2012-02-23 44 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