$_SESSION 显示未反映点击提交一次后的更改



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

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

<?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.
}
}
?>

请注意,两个引用的代码集位于同一页面中。

发生的情况是,该名称仍然显示以前的名称,该名称应该被覆盖。我尝试刷新页面,但它仍然没有改变,我需要再次提交(第二次(以显示新名称。

你可以而且应该大大简化你的代码。 目前这里有各种不必要的操作。 从语义上考虑要完成的任务:

如果用户提交其名称,请使用新值更新会话。 然后输出该值。

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

<?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'];
?>

最新更新