如何在使用返回按钮时使浏览器重新提交表单数据?

3
我想我的问题是如何理解$_POST处理。
我有两个页面处理2个表格。第1页要求提供一些信息,这些信息将在第2页中使用。当提交时,表单操作使用同一页,然后在验证后重定向到下一页,但仅在$_GET变量?usersubmit=1处理数据。
<form action="<?=$_SERVER['PHP_SELF']?>?usersubmit=1" method="post" name="form1">
<input type="text" name="field1">
</form>

假设我有一个名为form1.php的页面。当提交表单后,它将被发送到form1.php?usersubmit=1。然后该页面会将已发布的数据分配给会话变量,然后通过header('location:form2.php')重定向到form2.php。

<? 
if($_GET['usersubmit']){
    if($_POST['field1']){
      #if valid then assign session variable and redirect to next form
      $_SESSION['field1'] = $_POST['field1'];
      header("location:form2.php");
    }else{
      #if invalid send error message 
      $error = true;
    }
}
?>

我的问题出现在当用户点击浏览器的“返回”按钮以编辑以前表单中的数据时。浏览器不会重新提交这些数据,只是显示一个空白表单。我不想使用$_SESSION数据填写表单,因为我认为重新提交方法可能是更快,更少问题的解决方法。
我还尝试了使用javascript重定向而不是header,但浏览器足够聪明,不会让你返回到想要重定向的页面,所以它不起作用。
希望能得到任何帮助和理解,谢谢。
3个回答

3
唯一处理它的方法是通过会话... HTML5允许存储这种数据,但老实说,我现在甚至不会考虑它作为可能性,尽管它确实有效。

0
通常情况下,返回按钮将使用与上一个位置页面加载时相同的所有get和post变量。服务器端头部重定向将不允许您使用返回按钮返回到上一页,因为此重定向是在服务器端完成的。
有两种使用JavaScript进行重定向的方法:window.location会将您的先前位置放入浏览器历史记录中,因此返回按钮将起作用;而location.replace则不会在您的历史记录中放置链接,因此无法使用返回按钮返回到上一页。
或者,您可以只使用第二页来处理第一页的表单...

0
此外,您应该在代码中使用htmlentities()。它可以关闭一个安全漏洞(有关更多详细信息,请参见http://www.html-form-guide.com/php-form/php-form-action-self.html)。
<form action="<?=$_SERVER['PHP_SELF']?>?usersubmit=1" method="post" name="form1">

应该将其更改为以下内容。

<form action="<?=htmlentities($_SERVER['PHP_SELF'])?>?usersubmit=1" method="post" name="form1">


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接