2011-08-16 100 views
3

我想改正我的腳本中雙提交的問題。當我按提交它只更新MySQL一次(這是我想要的)。但是,當我刷新它再次更新MySQL。一旦刷新按鈕被擊中,似乎忽略if語句。我會怎麼做,以阻止這種刷新時雙提交php

這裏是我的代碼

if (isset($_POST['submitButton'])) { 
//do something 
} 


<form action = "table.php" method="post"> 
<label for="submitButton"></label> 
<input type="submit" name="submitButton" id="submitButton" 
value="Submit Form"/> 
</form> 

回答

7

當您刷新頁面 - 在POST發送AGAIN

一些瀏覽器實際上是警告你這種事情發生。

爲了防止我做:

if (isset($_POST['submitButton'])) { 
//do something 

//..do all post stuff 
header('Location: thisPage.php'); //clears POST 
} 


<form action = "table.php" method="post"> 
<label for="submitButton"></label> 
<input type="submit" name="submitButton" id="submitButton" 
value="Submit Form"/> 
</form> 
+0

謝謝你不僅是在幫助我,但給我解釋爲什麼 – Aaron

+0

@Aaron - 沒問題^ _^ – Neal

+0

我寧願形式使用CSRF令牌比一個提交,但我創建2請求不得不說這是一個相當整潔和容易實施的伎倆。也許死();在header()之後; ? – edorian

1

當你刷新頁面。瀏覽器再次發佈所有數據。於是同樣的事情再次發生這是一個標準的行爲做事後再次曾這樣

if (isset($_POST['submitButton'])) { 
     //do something 

     header("location:table.php"); 
    } 
2

克服這個瀏覽器重定向到同一頁:當你重新加載頁面,如果它被張貼,您的瀏覽器重播相同的請求(與POST)。

爲了避免這種情況,您可以使用重定向到同一頁面,使用:

<?php 
header("location:".$mycurrentURl); 

這將刷新頁面,通過GET請求。這將防止雙重帖子。

4

我使用一個會話從重新發布保持。

session_start(); 

if(isset($_SESSION['your_variable']) && 
    $_SESSION['your_variable'] == $_POST['your_variable']){ 
    // re-post, don't do anything. 
} 
else{ 
    $_SESSION['your_variable'] = $_POST['your_variable']; 
    // new post, go do something. 
}