【问题标题】:How do you make the browser re-post form data when using the back button?使用后退按钮时如何使浏览器重新发布表单数据?
【发布时间】:2011-12-27 06:08:09
【问题描述】:

我想我的问题在于理解 $_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 重定向而不是标头,但浏览器足够智能,不会将您发送回想要重定向您的页面,因此它不起作用。

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

【问题讨论】:

    标签: php forms browser post back-button


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      或者,您可以只使用第二页来处理页面表单...

      【讨论】:

        【解决方案3】:

        此外,您应该在代码中使用 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">

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-27
          • 2020-05-02
          • 1970-01-01
          • 2019-11-14
          • 1970-01-01
          • 1970-01-01
          • 2016-10-06
          相关资源
          最近更新 更多