程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 探討PHP表單重復提交的預防法則

探討PHP表單重復提交的預防法則

編輯:關於PHP編程

當用戶單擊“提交”按鈕後,該按鈕將變為灰色不可用狀態。

上面的例子中使用OnClick事件檢測用戶的提交狀態,如果單擊了“提交”按鈕,該按鈕立即置為失效狀態,用戶不能單擊按鈕再次提交。

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

  1. < input type="hidden" name="originator" value="<?=$code?>"> 
  2. 在接收頁面的PHP代碼如下:  
  3. < ?phpsession_start();if(isset($_POST['originator'])) {  
  4. if($_POST['originator'] == $_SESSION['code']){// 處理該表單的語句,省略  
  5. }else{  
  6. echo ‘請不要刷新本頁面或重復提交表單!’;  
  7. }  
  8. }?> 


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

2.使用Cookie處理
使用Cookie記錄表單提交的狀態,根據其狀態可以檢查是否已經提交表單,請見下面的代碼:

  1. < ?php  
  2. if(isset($_POST['go'])){setcookie("tempcookie","",time()+30);  
  3. header("Location:".$_SERVER[PHP_SELF]);exit();  
  4. } if(isset($_COOKIE["tempcookie"])){  
  5. setcookie("tempcookie","",0);echo "您已經提交過表單";  
  6. }?> 

如果客戶端禁止了Cookie,該方法將不起任何作用,這點請注意。

3.使用Session處理
利用PHP的Session功能,也能避免PHP表單重復提交。Session保存在服務器端,在PHP運行過程中可以改變Session變量,下次訪問這個變量時,得到的是新賦的值,所以,可以用一個Session變量記錄表單提交的值,如果不匹配,則認為是用戶在重復提交,請見如下代碼:

  1. < ?php  
  2. session_start();//根據當前SESSION生成隨機數  
  3. $code = mt_rand(0,1000000);  
  4. $_SESSION['code'] = $code;  
  5. ?> 

在頁面表單上將隨機數作為隱藏值進行傳遞,代碼如下:

  1. < input type="hidden" name="originator" value="< ?=$code?>"> 


在接收頁面的PHP代碼如下:
 

  1. < ?php  
  2. session_start();  
  3. if(isset($_POST['originator'])) {  
  4. if($_POST['originator'] == 
    $_SESSION['code']){  
  5. // 處理該表單的語句,省略  
  6. }else{  
  7. echo ‘請不要刷新本頁面或
    重復提交表單!’;  
  8. }  
  9. }?> 

4.使用header函數轉向
除了上面的PHP表單重復提交的預防方法之外,還有一個更簡單的方法,那就是當用戶提交表單,服務器端處理後立即轉向其他的頁面,代碼如下所示。

  1. if (isset($_POST['action']) 
    && $_POST['action'] == 'submitted') {  
  2. //處理數據,如插入數據後,立即轉向到其他頁面  
  3. header('location:submits_success.php');  
  4. }  

以上就是PHP表單重復提交的幾個預防方法的介紹。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved