$_SESSION 显示在点击提交一次后不反映更改

$_SESSION display not reflecting changes after hitting submit once

我正在创建一个可以编辑用户名的个人资料页面。我似乎无法弄清楚如何在成功编辑后更新首页显示的用户名(即 Hi Kana!)。

名称是使用我页面顶部的会话变量生成的,$_SESSION['username']

<?php
session_start();
if(isset($_POST['submit']) && isset($_SESSION['newusername'])){
    unset($_SESSION['username']); //clear existing username session
    $_SESSION['username'] = $_SESSION['newusername']; //replace with the new username
    echo $_SESSION['username'];
} else {
    echo $_SESSION['username'];
}
?>

在文本输入上使用不同的名称点击提交按钮后,它应该会改变,但实际上并没有。这些是我上面提到的代码之后的代码行。

<?php
$textinput = $_POST['textinput']; 

if(isset($_POST['submit']))
{
if(strlen($_POST['textinput']) < 2)) {
$errormessage = 'too short';
}
else
{
$_SESSION['newusername'] = $textinput; //setup a new session for the new username to be used above.
}
}
?>

请注意,引用的两组代码在同一页中。

实际情况是名称仍然显示以前的名称,据说已被覆盖。我尝试刷新页面还是没有变化,我需要再次提交(第2次)以显示新名称。

您可以而且应该彻底 简化您的代码。目前这里有各种不必要的操作。从语义上考虑你想要完成什么:

If the user submits their name, update the session with the new value. Then output the value.

就是这样。让你想要完成的事情的语义指导你如何完成它。启动会话,检查表单 post,有条件地更新值,输出值的当前状态。例如:

<?php
session_start();

// update the value
if(isset($_POST['submit'])) {
    $_SESSION['username'] = $_POST['textinput'];
}

// output the value
echo $_SESSION['username'];
?>

也许您会想要在没有用户名的情况下添加一个合理的默认值。那就像:

<?php
session_start();

// set a default value
if (!isset($_SESSION['username'])) {
    $_SESSION['username'] = "Default User";
}

// update the value
if(isset($_POST['submit'])) {
    $_SESSION['username'] = $_POST['textinput'];
}

// output the value
echo $_SESSION['username'];
?>