我正在使用PHP进行注册和登录表单,我遇到了一个问题。目前,一切都很完美,但我只是有一个小问题。当用户连接时,在他的帐户中,我添加了更改他的昵称的能力。我的代码有效,但我有个问题。当我更改昵称时,昵称将在数据库中更新,但不会在标题中更新:
代码:
<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。
因此,为了看到新的昵称,我必须从会话中注销并登录。我怎么能让它瞬间?
对不起,我的英语,我是法国人。
发布于 2015-10-05 18:40:42
因此,您正在从nickname中读取会话值auth,但是它始终是相同的,您从不更改它的值,即使数据库值可能有所不同。
您需要做的是更改它,然后(添加最后一行):
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不同的昵称。
https://stackoverflow.com/questions/32955116
复制相似问题