使用后退按钮时,如何使浏览器重新发布表单数据?

时间:2011-12-27 06:08:09

标签: php forms browser post back-button

我想我的问题是了解$ _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。该页面现在将发布的数据分配给会话变量,然后通过标题重定向到form2.php('location: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重定向而不是标题,但浏览器非常智能,无法将您发送回想要重定向的页面,因此它无法正常工作。

任何帮助理解这一点将不胜感激。 感谢。

2 个答案:

答案 0 :(得分:0)

通常后退按钮将使用与先前位置页面加载时使用的所有相同的get和post变量。服务器端头重定向将不允许您使用后退按钮到达上一页,因为此重定向在服务器端完成。

有两种方法可以使用javascript window.location进行重定向,这会将您之前的位置放入浏览器历史记录中,因此后退按钮会起作用,而location.replace也不会在您的历史记录中放置链接,因此不允许您使用后退按钮进入上一页。

或者,您可以使用第二页来处理页面形式......

答案 1 :(得分: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">