我正在用PHP注册和登录表单,我有一个问题。目前,一切都很好,但我有一个小问题。当用户连接上后,我在他的帐户中添加了更改昵称的功能。我的代码可以工作,但我有个问题。当我更改昵称时,该昵称在数据库中更新,但不在我的标题中更新:
http://prntscr.com/8o2ipa 代码:<div id="header">
<div class="wrapper">
<div id="logo">
<a href=".">Logo</a>
</div>
<ul class="visitor-links">
<?php if(isset($_SESSION["auth"])): ?>
<li>
<a href="account.php" class="account">Welcome, <?= $_SESSION["auth"] -> nickname; ?></a>
</li>
<li>
<a href="sign-out.php" class="sign-out button primary">Sign Out</a>
</li>
<?php else: ?>
<li>
<a href="sign-in.php" class="sign-in">Sign In</a>
</li>
<li>
<a href="sign-up.php" class="sign-up button primary">Sign Up</a>
</li>
<?php endif; ?>
</ul>
</div>
</div>
昵称更新代码:
if(!empty($_POST["nickname"]))
{
$user_id = $_SESSION["auth"] -> id;
$req = $pdo -> prepare("UPDATE users SET nickname = ?") -> execute([$_POST["nickname"]]);
$_SESSION["flash"]["success"] = "Your nickname has been updated.";
}
如果我在昵称字段中放入一个新昵称,旧昵称仍然在标题中:http://prntscr.com/8o2mfx
所以我可以看到新的昵称,我必须从会话注销并登录。我怎么能让它瞬间发生?
对不起,我是法国人。
所以,你正在从auth
中读取会话值nickname
,但它总是相同的,你永远不会改变它的值,即使数据库值可能不同。
你要做的就是改变它,然后(添加最后一行):
if(!empty($_POST["nickname"]))
{
$user_id = $_SESSION["auth"] -> id;
$req = $pdo -> prepare("UPDATE users SET nickname = ?") -> execute([$_POST["nickname"]]);
$_SESSION["flash"]["success"] = "Your nickname has been updated.";
// added this line '/
$_SESSION["auth"] -> nickname = $_POST["nickname"];
}
,以便下次读取会话值Welcome, <?= $_SESSION["auth"] -> nickname;
时,您有新的会话值。
只是个加号。您应该在代码中创建一些验证,例如检查在更新期间是否发生了任何错误,这样您就不会向用户显示与DB不同的昵称。