只提交表单上的按钮点击不在页面刷新
下面是我的代码,工作正常..唯一的问题是,当我刷新页面时,它执行成功查询。只提交表单上的按钮点击不在页面刷新
<form action="" method="post">
<input type="submit" value="Purchase" id="btn" name="link_credits">
</form>
if(isset($_REQUEST['link_credits']))
{
echo "success";
//some codes here with sql statements
}
Else
{
echo " Please try Again tomorrow";
}
?>
问题:
我不想来运行页面刷新查询,它应该只在点击按钮运行代码。
只需添加行未设置($ _ REQUEST ['link_credits']);在成功循环
if(isset($_REQUEST['link_credits']))
{
echo "success";
//some codes here with sql statements
if($success){
$_SESSION['msg']="Data Added successfully";
}
else{
$_SESSION['msg']="Data Not Added successfully.Please Check";
}
unset($_REQUEST['link_credits']);
header("Location:--somepage.php--");
}
else
{
echo " Please try Again tomorrow";
}
然后你就可以在--somepage.php--并表示将使用后显示$_SESSION['msg']
值unset($_SESSION['msg']);
您的浏览器应该是警告你,刷新页面将重新提交表格。所以,即使刷新页面,或者使用了破碎的浏览器,也要点击一个按钮。
之所以这么说,这里有一些可能的解决方案:
曲奇“成功”这句话中的浏览器,并只允许如果cookie没有设置/目前成功的条件来运行。
了解“POST后重定向”,这就是您在应该在这里所做的。实质上,您执行成功操作,将标志设置为apropos,并将浏览器(通过PHP的标头())转发到一个页面,该页面显示“OK,它工作正常!”。
将您的if条件更改为。
if(isset($_POST['link_credits'])){
echo "success";
//some codes here with sql statements
}
else
{
echo " Please try Again tomorrow";
}
它运行后请再试一次,我按下按钮..有超过5个不同名称的表格。我希望这不会影响代码 – zeeshan
您可以使用任意数量的按钮,但每个按钮都应该有唯一的名称,并在相应的条件下使用if(isset($ _ POST ['button_name']))' –
这是因为您使用方法发布将表单提交到同一页面,所以当您刷新页面时,novamento会发送另一个请求帖子。
解决方案:
if(isset($_REQUEST['link_credits'])) {
echo "success";
$_REQUEST['link_credits'] = null;
} else {
echo " Please try Again tomorrow";
}
不起作用。相同 – zeeshan
这会发生,因为仅仅在刷新将再次提交请求。
所以解决这个问题的想法,通过治愈它的根源。
我的意思是我们可以在窗体内设置一个会话变量并在更新时检查它。
if($_SESSION["csrf_token"] == $_POST['csrf_token'])
{
// submit data
}
//inside from
$_SESSION["csrf_token"] = md5(rand(0,10000000)).time();
<input type="hidden" name="csrf_token" value="
htmlspecialchars($_SESSION["csrf_token"]);">
哪,属于正常现象。问题是什么? –
编辑。对不起,如此快速发布 – zeeshan
http://stackoverflow.com/questions/6320113/how-to-prevent-form-resubmission-when-page-is-refreshed-via-php – Danijel