PHP:如何集成昵称的更新,而无需注销和登录以查看新昵称


PHP: How to integrate the update of my nickname without having to sign out and sign in to see the new nickname?

我正在用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不同的昵称。