簡體   English   中英

僅在按鈕上單擊而不在頁面刷新上提交表單

[英]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']);

您的瀏覽器警告您,頁面刷新將重新提交表單。 因此,即使刷新頁面或使用損壞的瀏覽器,也要單擊按鈕。

話雖如此,以下是一些可能的解決方案:

  1. 在“成功”短語中為瀏覽器設置Cookie,並且僅當未設置/存在cookie時,才允許成功條件運行。

  2. 了解有關“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM