是否可以使用会话变量,然后在?
后直接取消设置示例:
//====
//Process Form
if ($_POST['Submit']) {
$update = $userSettings->update($_POST);
//If there are form errors
if (!$update) {
//Load the errors into an array
$errors = $update[1];
} else {
//Set the session
$_SESSION['showUpdated'] = true;
//Redirect to this page
header("Location: http://www.mysite.com/settings");
}
}
//==================
if ($_SESSION['showUpdated']) {
echo "Settings Updated";
unset($_SESSION['showUpdated'];
}
所以提交表单后,如果没有错误:
目前问题是,如果你直接取消设置会话变量;就好像你在“if exists”部分之前取消了它。
任何解决方案?这甚至是最好的方法吗?
非常感谢!
答案 0 :(得分:23)
我注意到原始示例中的一个小错误可能会导致其他问题。
unset($_SESSION['showUpdated'];
需要
unset($_SESSION['showUpdated']);
不包括)
中的unset
结尾会导致错误。
答案 1 :(得分:3)
我不时这样做。我从来没有遇到任何问题。但是我要添加的内容是标题重定向后的exit()
函数调用。
编辑:exit()
的原因是它会阻止它处理任何进一步的代码,并且在您想要在重定向之后检查之前消除未设置的可能性。
答案 2 :(得分:3)
看起来它应该有效。确保在尝试使用会话之前调用session_start(),并在重定向标题之后始终退出()或die()。
我以不同的方式完成你所做的事情。我在会话中保留了一个“消息”元素。我会像“您的数据已保存”,错误消息等那样粘贴文本。然后,在每个页面上(实际上在页面模板类中),我检查$_SESSION['message']
是否已设置且不为空。如果有什么东西,我会显示消息并将值设置为空字符串或null。
答案 3 :(得分:2)
之后没有退出的标题调用将继续运行页面。
header("Location: http://www.mysite.com/settings");
exit;
使用它代替,应该杀死页面而不是在同一页面调用上取消设置会话变量。
答案 4 :(得分:1)
只需检查它是否存在。这在定义之前是安全的,并且在定义之后将告诉您答案。
if(!empty($_SESSION['showUpdated'])) {
答案 5 :(得分:0)
或者您可以将其设置为false。
if ($_SESSION['showUpdated']) { echo "Settings Updated"; $_SESSION['showUpdated'] = false; }
看起来你使用的是比5.3更小的PHP版本,因为在5.3中你会在使用未初始化的值时得到通知。所以你应该使用isset函数:
if (isset($_SESSION['showUpdated']) && $_SESSION['showUpdated']) { echo "Settings Updated"; $_SESSION['showUpdated'] = false; }