我有一个名字的数据。我有输入类型=文字,其中值等于名称,以及按钮类型=提交。所以我想要做的是,我想更改和更新我的数据库中的名称,并输出新名称而不立即重新加载页面因为我想运行一个JS函数(Not Alert but a Toast)通知)这是我做不到的。所以要缩短,(EDIT - > UPDATE - > SHOW =不重新加载页面)。
编辑:: 对不起,我忘了提及。我知道jQuery和AJAX是解决方案,但我无法理解AJAX,与jQuery不同。
profile.php(表格代码)
<form action="profile.php" method="POST">
<input type="text" id="changename" name="changename" class="form-control" placeholder="New Name" required>
<button id="btnchange" type="submit"></button>
</form>
profile.php(PHP代码)
<?php
if(isset($_POST['changename'])) {
require 'connect.php';
$newname = $_POST['changename'];
$user_id = $_SESSION['temp_user'];
$sql = "UPDATE login SET login_name='$newname' WHERE user_id='$user_id'";
if(mysqli_query($conn, $sql)){
header('location: profile.php');
// MY JS FUNCTION HERE //
}
mysqli_close($conn);
}
?>
答案 0 :(得分:1)
在您尝试通过POST方法检索“changename”时,在表单中要做的第一件事是将表单方法更改为POST(而不是GET)。 所以改变这个:
<form action="profile.php" method="GET">
由此:
<form action="profile.php" method="POST">
答案 1 :(得分:1)
如何在不重新加载页面的情况下更新和输出数据库?您正在寻找的是AJAX。 我知道你已经选择了答案,但是从长远来看,你需要的额外信息对你有帮助
你可以在网上找到一些很好的ajax教程
你可以在网上找到更多。
这是你需要做的,首先你的表单方法是GET
,并且在你的PHP脚本上你要求$_POST
因此这会产生一个未经解决的通知错误,changename
: 通知:未定义的变量名称,因此,如果您的表单为$_GET
,那么解决方案是在单个表单中使用一种方法,如果表单方法为$variable = $_GET['fieldname']
,则使用POST
您的服务器端使用$variable = $_POST['fieldname'];
而不是您的方式。因此,我们将您的表单方法更改为POST
然后这就是您应该做的事情。
<强> edit.php 强>
更新
<script type="text/javascript">
$('document').ready(function(){
$('form').on('submit',function(event){
event.preventDefault();//prevent the form from reloading the page when submit
var formData = $('form').serialize(); // reading form input
$.ajax({
type :'POST',
data : formData,
url : 'profile.php',
dataType : 'json',
encode : true,
success : function(response){
//response = JSON.parse(response);
if(response == "ok"){
$('#success').html('profile updated success');
setTimeout(' window.location.href = "profile.php"; ', 6000); // redirecting
}else{
//could not update
$('#error').html(response);
}
},
error : function(e){
console.log(e); // debugging puporse only
}
});
});
});
</script>
这就是您在前端需要的内容..请注意,如果您在一个页面中有多个表单,请不要使用$('form').on('submit',function(event){});
,然后为每个表单添加一个唯一的{{1}然后用你希望提交的形式的iD替换jquery / ajax上的ID
。
然后是你的服务器端。
我注意到你有
form
用于重定向,因为我们正在向服务器发送ajax请求 回到客户端,你不能在服务器端重定向你的 收到响应后,使用客户端重定向 你期望从服务器。我已经评论过我所做的那个部分 在客户端重定向,在上面的脚本上。
<强> profile.php 强>
header('location: profile.php');
这就是您所需要的,请注意您需要在使用它们之前验证客户端和服务器端的所有输入字段。
我还建议你学习更多关于准备好的陈述,使用mysqli或PDO它们非常容易使用且非常安全。
运行如下查询:<?php
$message = '';
if(isset($_POST['submit'])) {
require 'connect.php';
//validate your input field
$newname = $_POST['changename'];
$user_id = $_SESSION['temp_user'];
$sql = "UPDATE login SET login_name='$newname' WHERE user_id='$user_id'";
if(mysqli_query($conn, $sql)){
$message = 'ok'; // success
}else{
$message = 'system error could not update please try again later';
}
echo json_encode($message);//sending response back to the client
mysqli_close($conn);
}
?>
非常不安全,您的输入未经过验证,未经过筛选和清理。
所以准备好的陈述很简单:
profile.php准备
$sql = "UPDATE login SET login_name='$newname' WHERE user_id='$user_id'";
<?php $message = ''; if(isset($_POST['submit'])) { require 'connect.php'; //validate your input field $newname = $_POST['changename']; $user_id = $_SESSION['temp_user']; //prepare and bind $sql = $conn->prepare("UPDATE login SET login_name= ? WHERE user_id= ? "); $sql->bind_param("si",$newname,$user_id); if($sql->execute()){ $message = 'ok'; }else{ $message = 'Error Could not update please try again later'; } echo json_encode($message); $conn->close(); } ?>
此函数将参数绑定到SQL查询并告诉数据库参数是什么。 are.By告诉mysql期望什么类型的数据,我们将SQL注入的风险降至最低。