这篇文章的原因是我试图避免表格重新提交错误"大多数浏览器在刷新表单时都会放弃。
采用以下示例:
用户位于名为 signpetition.php 的网页上,并显示基本的HTML表单:
<div id="sign-errors" style="display: none;">
</div>
<form action="" method="post">
<input type="submit" name="submit_button" value="sign petition" />
</form>
因此,用户点击submit
按钮,现在将读取并验证POST数据。
<?php
if(isset($_POST['submit_button']))
{
// Do some validation
if($errors == true)
{
// What to do here? I want to go back to the last page, but keep the errors. Should I store them in a session variable and then unset them after their use? I feel as though there must be a better solution to this.
$_SESSION['error'] = "the error";
header('Location: '. $_SERVER['REQUEST_URI'] , true, 303);
exit;
}
else
{
$_SESSION['success'] = "your petition was successfully signed!";
header('Location: '. $_SERVER['REQUEST_URI'] , true, 303);
exit;
}
}
?>
所以,总结一下:
我想避免表单重新提交问题,这就是我使用的原因 我的代码中的标题重定向
答案 0 :(得分:0)
如果要重定向用户,则永远不应该重新提交表单。
将它们重定向到submitted.php
并使用以下内容:
if(isset($_SESSION['error'])){ echo'the error';}
else if(isset($_SESSION['success'])){ echo'your petition was successfully signed!');}
else{ echo 'unknown error.'; }
答案 1 :(得分:0)
我知道这已经过时了,但我想补充一点,关于在SESSION对象中存储消息以供一次性使用的原始解决方案没有任何问题。这是一种称为“Flash消息”的常见做法,它是存储在会话中的消息,在一次读取时会被删除。该技术受到Rails的欢迎。 PHP摘要如下:
http://www.phpdevtips.com/2013/05/simple-session-based-flash-messages/