下面是我的代码,并且工作正常..唯一的问题是当我刷新页面时,它执行成功查询。
<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";
}
?>
问题:
我不想使用页面刷新运行查询,它只应在按钮单击时运行代码。
答案 0 :(得分:1)
只需添加行未设置($ _ 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']);
答案 1 :(得分:1)
您的浏览器应警告您页面刷新将重新提交表单。因此,即使刷新页面,或者使用的是破碎的浏览器,也会点击按钮。
所有这些,这里有一些可能的解决方案:
在“成功”词组中对浏览器执行Cookie操作,并且仅在未设置/存在Cookie时才允许运行成功条件。
了解“POST后重定向”,这是应该在这里做的事情。基本上,您执行成功操作,将标记设置为apropos,并将浏览器(通过PHP的标题())转发到一个页面,上面写着“好吧,它有效!”。
答案 2 :(得分:0)
将您的if条件更改为。
if(isset($_POST['link_credits'])){
echo "success";
//some codes here with sql statements
}
else
{
echo " Please try Again tomorrow";
}
答案 3 :(得分:0)
这是因为您使用方法帖子将表单提交到同一页面,因此当您刷新页面时,novamento会发送另一个请求帖子。
解决方案:
if(isset($_REQUEST['link_credits'])) {
echo "success";
$_REQUEST['link_credits'] = null;
} else {
echo " Please try Again tomorrow";
}
答案 4 :(得分:0)
这是因为只需刷新它就会再次提交您的请求。
因此,通过治愈其根源来解决这个问题的想法。
我的意思是我们可以在表单中设置一个会话变量,并在更新时进行检查。
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"]);">