php防止表單重複提交的方法

重複提交是我們開發中會常碰到的一個問題,除了我們使用js來防止表單的重複提交,同時還可以使用php來防止重複提交哦。大家知道php防止表單重複提交嗎?下面我們就給大家詳細介紹一下吧!

php防止表單重複提交的方法

使用者提交表單時可能因為網速的原因,或者網頁被惡意重新整理,致使同一條記錄重複插入到資料庫中,這是一個比較棘手的問題。我們可以從客戶端和服務器端一起著手,設法避免同一表單的重複提交。

  1.使用客戶端指令碼

[程式碼]xm l程式碼:

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

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

還有一個方法,也是利用ja vasc ript的功能,但是使用的是on submit()方法,如果已經提交過一次表單,將立即彈出對話方塊,程式碼如下:

[程式碼]xm l程式碼:

01

02 var submitcount=0;

03 function submitOnce (form){

04 if (submitcount == 0){

05 submitcount++;

06 return true;

07 } else{

08 alert("正在操作,請不要重複提交,謝謝!");

09 return false;

10 }

11 }

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

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

利用PHP的Session功能,也能避免重複提交表單。Session儲存在伺服器端,在PHP執行過程中可以改變Session變數,下次訪問這個變數時,得到的是新賦的值,所以,可以用一個Session變數記錄表單提交的值,如果不匹配,則認為是使用者在重複提交。

A頁面的程式碼:

[程式碼]php程式碼:

01

02 session_start(); //根據當前SESSION生成隨機數

03 $code = mt_rand(0,1000000);

04 $_SESSION['code'] = $code; //將此隨機數暫存入到session

B頁面:

[程式碼]php程式碼:

01

02session_start();

03if(isset($_POST['originator'])) {

04 if($_POST['originator'] == $_SESSION['code']){

05 echo "ok";

06 unset($_SESSION["code"]); //將其清除掉此時再按F5則無效

07 }else{

08 echo "請不要重新整理本頁面或重複提交表單";

09 }

10}?>