我正在设置一个PHP会话变量,其中包含我正在提交的HTML表单的成功消息。如果没有表单错误,我将重定向到同一页面(使用header())并显示会话变量中的消息。一切都很好,直到这里,但如果我在提交后再次访问该页面,该消息仍然存在。是否可以在成功提交后重定向时才显示它?
我的form.php代码如下所示:
if (isset($_POST['submit'])) {
// some form processing here
if (count($errors) == 0) {
// some data saving here
$_SESSION['status'] = 'Thank you for submitting the form';
header('Location: /form.php');
}
现在是我的模板文件:
{if isset($smarty.session.status)}
<p><strong>{$smarty.session.status)</strong></p>
{/if}
<!-- form html code goes here -->
谢谢。
答案 0 :(得分:2)
销毁会话:
将代码更改为类似
if(isset($_SESSION['sentData'])
{
echo "Your message";
//This
session_destroy();
//or this
unset($_SESSION['sentData']);
}
修改强>
实际上没有,在显示消息后将其放在form.php /您的模板文件的末尾:
unset($_SESSION['status']);
答案 1 :(得分:0)
在显示消息后清除会话变量是否足够?
这似乎是最直接的解决方案。你也可以:
A)检查$ _SERVER变量中的哪些信息,以尝试检测用户访问该页面的方式,只显示该消息是否发生在路径中。
B)让重定向包含一个查询字符串变量(例如'?messages = 1'),您可以在显示会话消息之前使用$ _GET进行检查。
编辑:我认为操作顺序是:
1)表单提交 2)如果没有错误,在会话中设置消息 3)重定向 4)重定向后显示消息
我说添加第5步:删除显示后的消息。就像在,回显你正在做的消息,然后在echo之后添加代码来删除或清除会话变量。
编辑2:啊,我现在明白了......
我很好奇你是否应该直接从你的模板文件引用会话变量。可能最好将其作为模板参数传递,该参数由调用模板的PHP设置?这使您能够将会话管理与显示分开,这可能符合您的最佳利益。
答案 2 :(得分:0)
在显示消息之前,您可以检查消息是否为空。如果它不为空,则显示该消息,然后立即显式清空会话变量,以便下次上一次检查不会显示该消息。
我希望我理解你的问题:)