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