防止用户在提交后返回PHP表单

时间:2014-09-03 23:47:26

标签: php html forms form-submit

我有2个PHP表单。如果用户提交第一个表单,则应将其重定向到第二个表单。

我想阻止用户在提交后回到第一个表单。截至目前,在我提交第一个表单后,它会将我重定向到第二个表单但是如果我按下浏览器中的后退按钮,我可以看到我在第一个表单中插入的所有数据。

(我在我的PHP文件末尾使用了标题('位置:form2.php')重定向到第二个表单并且它正常工作。我搜索了很多关于阻止重新提交表单但仍然我无法解决我的问题。

2 个答案:

答案 0 :(得分:2)

我个人认为该表单位于同一页面(aka form.php),但是根据您通过表单传递的变量来控制页面上的输出。

在第一个表单上,您可以放置​​一个隐藏的var,告诉它哪个表单已经完成。

ex:<input type="hidden" name="task" value="form1" />

这样,当您将变量传递给第二个表单时,您可以控制传递的变量并提供propper输出... ex。

<?php
if ($_POST['task'] == 'form1') {
  // show form2
} else {
  // show form1
}
<?

然后,这只是基于你所描述的。根据表单的用途,可能会更改解决方案。此外,如果您希望用户在完成表单之前无法返回到form1,那么您可能希望保存提交的表单变量。

<?php
session_start();
if ($_POST['task'] == 'form1') {
  $_SESSION['blah'] = $_POST['blah'];
  $_SESSION['form1'] = true;
}
<? 

此时,检查他们所处的形式将类似于:

<?php
if ($_SESSION['form1']) {
  // show form 2
}
<? 

只是一个警告,我还没有对这些代码进行调试,因此可能无法按原样运行。

答案 1 :(得分:1)

也许这就是你想要的, 这是主要的想法。

  1. 在同一页面上创建2表单,但隐藏第二个表单。

  2. 点击第一个表单的提交按钮后,使用ajax发送数据,隐藏第一个表单并显示第二个表单。

    <html>
    <head>
    </head>
    <body>
            <div class='form1'>
                Form1<br>
                <input id='name'>
                <button id='btnGo'>Send</button>
            </div><div class='form2' style='display:hidden;'>
                Form2<br>
                <input id='location'>
                <button id='btnGo2'>Send</button>
            </div>
    
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
    
        <script>
        $(document).ready(function() {
            $(".form2").hide();
        });
    
        $("#btnGo").click(function() {
            $(".form1").hide();
            $(".form2").show();
            var name = $("#name").val();
                $.ajax({
                    type: "POST",
                    url: "process.php",
                    data: { name: name},
                });
    
            event.preventDefault();
        });
    
        $("#btnGo2").click(function() {
                var loc = $("#location").val();
                $.ajax({
                    type: "POST",
                    url: "process.php",
                    data: { location: loc }
                });
    
        });
        </script>
    </body>