刷新php时重复提交
我正试图纠正脚本中的双重提交问题。当我按submit时,它只更新mysql一次(这是我想要的)。但是,当我点击刷新时,它会再次更新mysql。一旦按下刷新按钮,它似乎会忽略if语句。我该怎么做才能阻止这一切 这是我的密码刷新php时重复提交,php,mysql,xhtml,double-submit-prevention,Php,Mysql,Xhtml,Double Submit Prevention,我正试图纠正脚本中的双重提交问题。当我按submit时,它只更新mysql一次(这是我想要的)。但是,当我点击刷新时,它会再次更新mysql。一旦按下刷新按钮,它似乎会忽略if语句。我该怎么做才能阻止这一切 这是我的密码 if (isset($_POST['submitButton'])) { //do something } <form action = "table.php" method="post"> <label for="submitButton">&
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>
if(isset($_POST['submitButton']){
//做点什么
}
刷新页面时,将再次发送帖子
一些浏览器实际上会警告您发生这种情况
为了防止这种情况发生,我会:
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>
if(isset($_POST['submitButton']){
//做点什么
//…做所有的帖子
header('Location:thisPage.php');//清除POST
}
刷新页面时。浏览器再次发布所有数据。所以同样的事情再次发生,在做了一些事情之后,再次将浏览器重定向到相同的页面,就像这样
if (isset($_POST['submitButton'])) {
//do something
header("location:table.php");
}
这是一种标准行为:当您重新加载页面时,如果页面已发布,浏览器将(与发布一起)重放相同的请求 为了避免这种情况,您可以使用重定向到同一页面,包括:
<?php
header("location:".$mycurrentURl);
我通常不担心这一点,只要用户不想重新发帖就可以了。但是,如果您想禁止它,可以使用nonce
我使用会话阻止重新发布
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.
}
我更愿意在表单中使用csrf令牌,而不是创建2个提交请求,但我必须说这是一个相当整洁且易于实现的技巧。也许会死;在页眉()之后?