2012-02-23 37 views
1

我有一个3页系统,form> post>提交,就位。我遇到的问题是,如果用户按下提交页面上的后退按钮,它会将它们带到表单页面,并填入值,所以如果他们单击提交,它会重新输入数据。清除表单发布数据

在通常的情况下,用户通常返回到索引页,并且有一个过程,通过该过程我们可以检查用户ip在过去一小时内出现在所述数据库(mysql)中的次数,并且限制岗位能力基于此。但是如果他们压倒一切,那该系统就无效了。

唯一的代码,我在的地方,以防止这就是:

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

,但似乎什么也不做。

任何帮助将不胜感激!

+0

如果你使用头(位置...)发送他们在处理表单后到索引页面,然后他发布数据被清除。 – 2012-02-23 23:26:20

+0

问题在于我需要'提交'页面来显示他们如何能够回到他们各自的帖子的信息。 – AviateX14 2012-02-23 23:27:40

+0

而且,如果用户刚刚按下几次,他们会立即重新发布。 – AviateX14 2012-02-23 23:28:38

回答

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 

>

0

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

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

0

你可以尝试:

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

我看不出如何使输出缓冲会阻止这种行为,所以你不妨省略ob_start(),并使用ob_flush()调用。

但我不同意这将是更好的事情可做:

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

,然后用$ _SESSION携带超过$ _ POST数据。

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> 
+0

理论上是这样的,问题是如果用户输入错误的数据,也就是机器人过滤器,它会要求他们回去重试,但是用这个代码,所有的数据都会被擦掉,他们必须这样做再次,这会减少用户体验... – AviateX14 2012-02-23 23:41:40

+0

我不太清楚你现在想要什么..你有一个botfilter?它是表格的一部分吗?如果是这样,你应该可以通过使用这样的东西来清除它: document.form_name.input_name.reset(); 虽然不太确定。 – Anton 2012-02-23 23:51:23