仅在按钮上单击而不是在页面刷新时提交表单

时间:2015-05-14 13:30:22

标签: php mysql sql forms

下面是我的代码,并且工作正常..唯一的问题是当我刷新页面时,它执行成功查询。

<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"; 
}

?>

问题:

我不想使用页面刷新运行查询,它只应在按钮单击时运行代码。

5 个答案:

答案 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)

您的浏览器警告您页面刷新将重新提交表单。因此,即使刷新页面,或者使用的是破碎的浏览器,也会点击按钮。

所有这些,这里有一些可能的解决方案:

  1. 在“成功”词组中对浏览器执行Cookie操作,并且仅在未设置/存在Cookie时才允许运行成功条件。

  2. 了解“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"]);">