清除表单发布数据

时间:2012-02-23 23:22:55

标签: php html forms

我有一个3页系统,表单>发布>提交到位。我遇到的问题是,如果用户从提交的页面按下后退按钮,它会将它们带到表单页面,并填入值,因此如果他们单击“提交”,则会重新输入数据。

在通常情况下,用户会正常返回索引页面,并且我们会检查用户ip在过去一小时内出现在所述数据库(mysql)中的次数,并限制发布后的能力在那。但如果他们回过头来,那个系统就无效了。

我唯一能够防止这种情况的代码是:

ob_start();
header('Cache-Control: private');

但这似乎什么都不做。

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:0)

在提交数据之前立即进行POST检查,或者将其重定向(更改标题位置)到另一个包含所需信息的成功/已提交页面。这样,如果他们点击回来,他们会返回原来的提交页面,将他们重定向回成功/提交页面。

还有其他解决方案,但这一切都取决于目的 - 这是为了防止标准用户犯愚蠢的错误或恶意用户。

答案 1 :(得分:0)

你可以尝试:

header('Cache-Control: no-cache');

我无法看到启用输出缓冲如何阻止此行为,因此您可能希望省略ob_start()和ob_flush()调用。

但我同意这样做会更好:

header("Location: mypage.php?somepublicdata=this+is+public");

然后使用$ _SESSION来继承$ _POST数据。

答案 2 :(得分:0)

不应该这样的工作吗? (我自己没试过。)

<head>
<script>
function clearForms()
{
  var i;
  for (i = 0; (i < document.forms.length); i++) {
    document.forms[i].reset();
  }
}
</script>
</head>
<body onLoad="clearForms()" onUnload="clearForms()">
</body>

答案 3 :(得分:0)

我有一个快速的解决方案:

<?php
//Check for double post
//Start session
session_start();
$process = true;
if(isset($_POST)){
    if(isset($_SESSION['olddata'])){
       if($_SESSION['olddata'] == $_POST){
          $process = false;
       }
       $_SESSION['olddata'] == $_POST;
    }

}

//Now you can check $process before you do something with the data

&GT;