只提交表单上的按钮点击不在页面刷新

问题描述:

下面是我的代码,工作正常..唯一的问题是,当我刷新页面时,它执行成功查询。只提交表单上的按钮点击不在页面刷新

<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

哪,属于正常现象。问题是什么? –

+0

编辑。对不起,如此快速发布 – zeeshan

+0

http://stackoverflow.com/questions/6320113/how-to-prevent-form-resubmission-when-page-is-refreshed-via-php – Danijel

只需添加行未设置($ _ 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']);

+0

不起作用,相同的情况 – zeeshan

+0

检查编辑答案 –

+0

这个工作...但问题是它不显示成功消息。 我可以在重定向到下一页之前设置计时器 – zeeshan

您的浏览器应该是警告你,刷新页面将重新提交表格。所以,即使刷新页面,或者使用了破碎的浏览器,也要点击一个按钮。

之所以这么说,这里有一些可能的解决方案:

  1. 曲奇“成功”这句话中的浏览器,并只允许如果cookie没有设置/目前成功的条件来运行。

  2. 了解“POST后重定向”,这就是您在应该在这里所做的。实质上,您执行成功操作,将标志设置为apropos,并将浏览器(通过PHP的标头())转发到一个页面,该页面显示“OK,它工作正常!”。

将您的if条件更改为。

if(isset($_POST['link_credits'])){ 
echo "success"; 
//some codes here with sql statements 
} 
else 
{ 
echo " Please try Again tomorrow"; 
} 
+0

它运行后请再试一次,我按下按钮..有超过5个不同名称的表格。我希望这不会影响代码 – zeeshan

+0

您可以使用任意数量的按钮,但每个按钮都应该有唯一的名称,并在相应的条件下使用if(isset($ _ POST ['button_name']))' –

这是因为您使用方法发布将表单提交到同一页面,所以当您刷新页面时,novamento会发送另一个请求帖子。

解决方案:

if(isset($_REQUEST['link_credits'])) { 
    echo "success"; 
    $_REQUEST['link_credits'] = null; 
} else { 
    echo " Please try Again tomorrow"; 
} 
+0

不起作用。相同 – 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"]);">