刷新php时重复提交

刷新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">&

我正试图纠正脚本中的双重提交问题。当我按submit时,它只更新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>
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个提交请求,但我必须说这是一个相当整洁且易于实现的技巧。也许会死;在页眉()之后?