刷新php时双重提交

时间:2011-08-16 17:05:40

标签: php mysql xhtml double-submit-prevention

我正在尝试在我的脚本中更正双重提交的问题。当我按提交时它只更新一次mysql(这就是我想要的)。但是,当我点击刷新它再次更新mysql。一旦点击刷新按钮,它似乎忽略了if语句。我该怎么做才能阻止这个

这是我的代码

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>

5 个答案:

答案 0 :(得分:7)

刷新页面时 - POST IS SENT 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>

答案 1 :(得分: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.
 } 

答案 2 :(得分:2)

这是一种标准行为:当您重新加载页面时,如果它已发布,您的浏览器将重播相同的请求(使用POST)。

为避免这种情况,您可以使用重定向到同一页面:

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

这将通过get请求重新加载页面。这样可以防止双重帖子。

答案 3 :(得分:1)

刷新页面时。浏览器再次发布所有数据。所以同样的事情再次发生在克服这个问题之后,再次将浏览器重定向到同一页面,就像这样

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

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

答案 4 :(得分:1)

我通常不担心这一点,只是依赖用户不要重新发布,除非他们想要。但是,如果您想禁止它,可以使用 nonce

http://en.wikipedia.org/wiki/Cryptographic_nonce