【发布时间】:2017-06-16 11:27:12
【问题描述】:
我试图在showName div 中显示更新后的值,但我的网站仅在注销并再次登录后才显示更新后的值。
- 按
saveName按钮更新用户名。 - 成功更新 PHPMyAdmin
users表中的用户名。 -
showNamediv 仍然显示旧用户名。即使我刷新页面。
index.php
<div id="showName">
<?php
if(isset($_SESSION['userId'])){
echo $_SESSION['username']; }
?>
</div>
<div id="message"></div>
<div> <input id="editName" name="editName" /> </div>
<button id="saveName" type="submit" >Save</button>
edit.php
<?php
ob_start();
session_start();
include_once('database.php');
$validUser= $_SESSION["username"];
if(isset($_POST['editName']))
{
$username = $_POST["editName"];
if ($username =="") {
echo "Enter your full name.";
return false;
}else {
$sql = "UPDATE users SET username='$username' WHERE username='$validUser'";
if(mysqli_query($con, $sql)){
echo "Successfully Updated.";
} else{
echo "Something went wrong"; }
}
return false;
}
ob_end_flush();
?>
script.php
$("#saveName").click( function(e) {
e.preventDefault();
e.stopPropagation();
$.post("edit.php",
$("#editName").serializeArray(),
function(info){ $("#message").html(info);
});
});
【问题讨论】:
-
警告:当使用
mysqli时,您应该使用parameterized queries 和bind_param将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug。 切勿将$_POST或$_GET数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。 -
提示:如果您从
$_SESSION提取数据,那么如果您在数据库中更改它,您也必须更新它。 -
@tadman 我实际上有一个函数使用
trim()、stripslashes()和htmlspecialchars()来表示$_POST。我想知道当我同时更新数据库时如何更新$_SESSION? -
这种方法完全不够用,它不能正确防止注射。使用带有占位符值的准备好的语句。此外,要更新
$_SESSION,通常您只需分配给它。您最初是如何设置该值的?那样。