3

我正在尝试纠正脚本中双重提交的问题。当我按下提交时,它只更新一次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>
4

5 回答 5

7

When you refresh the page - the POST IS SENT AGAIN

Some browsers actually warn you about that happening.

To prevent that I do:

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>
于 2011-08-16T17:07:37.613 回答
5

我使用会话来防止重新发布。

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.
 } 
于 2012-01-30T19:12:51.087 回答
2

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

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

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

这将通过获取请求重新加载页面。这将防止重复发布。

于 2011-08-16T17:09:56.963 回答
1

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

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

         header("location:table.php");
    }
于 2011-08-16T17:09:27.483 回答
1

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

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

于 2011-08-16T17:11:00.317 回答