php 防止表單重複提交

用戶提交表單時可能由於網速的緣由,或者網頁被惡意刷新,導致同一條記錄重複插入到數據庫中,這是一個比較棘手的問題。咱們能夠從客戶端和服務器端一塊兒着手,設法避免同一表單的重複提交。

1.使用客戶端腳本

javascript

[php]  view plain copy
 
  1. <form method="post" name="register" action="test.php" enctype="multipart/form-data">  
  2. <input name="text" type="text" id="text" />  
  3. <input name="cont" value="提交" type="button" onClick="document.register.cont.value='正在提交,請等待...';document.register.cont.disabled=true;document.the_form.submit();">  
  4. </form>  


當用戶單擊「提交」按鈕後,該按鈕將變爲灰色不可用狀態
上面的例子中使用OnClick事件檢測用戶的提交狀態,若是單擊了「提交」按鈕,該按鈕當即置爲失效狀態,用戶不能單擊按鈕再次提交。

還有一個方法,也是利用JavaScript的功能,可是使用的是OnSubmit()方法,若是已經提交過一次表單,將當即彈出對話框,代碼以下:

php

[php]  view plain copy
 
  1. <script language="javascript">  
  2. var submitcount=0;  
  3. function submitOnce (form){  
  4.     if (submitcount == 0){  
  5.          submitcount++;  
  6.          return true;  
  7.     } else{  
  8.         alert("正在操做,請不要重複提交,謝謝!");  
  9.         return false;  
  10.     }  
  11. }  
  12. </script>  
  13. <form name="the_form" method="post" action="" onSubmit="return submitOnce(this)">  
  14. <input name="text" type="text" id="text" />  
  15. <input name="cont" value="提交" type="submit">  
  16. </form>  




在上例中,若是用戶已經單擊「提交」按鈕,該腳本會自動記錄當前的狀態,並將submitcount變量自加1,當用戶試圖再次提交時,腳本判斷submitcount變量值非零,提示用戶已經提交,從而避免重複提交表單。


2. 使用session(這個與JSP處理方法是同樣的)

利用PHP的Session功能,也能避免重複提交表單。Session保存在服務器端,在PHP運行過程當中能夠改變Session變量,下次訪問這個變量時,獲得的是新賦的值,因此,能夠用一個Session變量記錄表單提交的值,若是不匹配,則認爲是用戶在重複提交。
A頁面的代碼:java

[php]  view plain copy
 
  1. <?php  
  2. session_start();                //根據當前SESSION生成隨機數  
  3. $code = mt_rand(0,1000000);  
  4. $_SESSION['code'] = $code;      //將此隨機數暫存入到session  
  5. ?>  
  6. <form id="form1" name="form1" method="post" action="t2.php">  
  7.     <p>說明 <input type="text" name="titile" />  
  8.         <input type="hidden" name="originator" value="<?php echo $code;?>"></p>  
  9.     <p><input type="submit" name="Submit" value="提交" /></p>  
  10. </form>  



B頁面:數據庫

[php]  view plain copy
 
    1. <?php  
    2. session_start();  
    3. if(isset($_POST['originator'])) {  
    4.     if($_POST['originator'] == $_SESSION['code']){  
    5.         echo "ok";  
    6.         unset($_SESSION["code"]);               //將其清除掉此時再按F5則無效  
    7.     }else{  
    8.         echo "請不要刷新本頁面或重複提交表單";  
    9.     }  
    10. }?>  
相關文章
相關標籤/搜索