[英]submit form only on button click not on page refresh
下面是我的代碼,並且工作正常。.唯一的問題是,當我刷新頁面時,它將執行成功查詢。
<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";
}
?>
問題:
我不想使用頁面刷新來運行查詢,它應該僅在單擊按鈕時運行代碼。
只需添加unset($ _ 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,並且僅當未設置/存在cookie時,才允許成功條件運行。
了解有關“ POST之后重定向”的知識,這是您應該在此處執行的操作。 本質上,您執行成功操作,將標志設置為適當,然后將瀏覽器(通過PHP的header())轉發到一個頁面,上面寫着“確定,它起作用了!”。
將條件更改為。
if(isset($_POST['link_credits'])){
echo "success";
//some codes here with sql statements
}
else
{
echo " Please try Again tomorrow";
}
這是因為您要將表單與方法發布提交到同一頁面,因此刷新頁面時novamento發送了另一個請求發布。
解:
if(isset($_REQUEST['link_credits'])) {
echo "success";
$_REQUEST['link_credits'] = null;
} else {
echo " Please try Again tomorrow";
}
發生這種情況是因為僅在刷新時它將再次提交您的請求。
因此,通過根源解決這一問題的想法。
我的意思是我們可以在表單內設置一個會話變量,並在更新時檢查它。
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"]);">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.