萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php 防止表單重復提交方法

php 防止表單重復提交方法

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

  1.使用客戶端腳本

  [代碼]xm l代碼:

  1<form method="post" name="register" action="test.php" enctype="multipart/form-data">

  2<in put name="text" type="text" id="text" />

  3<in put name="cont" value="提交" type="button" on click="document.register.cont.value='正在提交,請等待...';document.register.cont.disabled=true;document.the_form.submit();">

  4</form>

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

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

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

  [代碼]xm l代碼:

  01<sc ript language="ja vasc ript">

  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 }

  12 </sc ript>

  13 <form name="the_form" method="post" action="" on submit="return submitOnce(this)">

  14 <in put name="text" type="text" id="text" />

  15 <in put name="cont" value="提交" type="submit">

  16 </form>

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

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

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

  A頁面的代碼:

  [代碼]php代碼:

  01<?php

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

  03 $code = mt_rand(0,1000000);

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

  05 ?>

  06 <form id="form1" name="form1" method="post" action="t2.php">

  07 <p>說明 <in put type="text" name="titile" />

  08 <in put type="hidden" name="originator" value="<?php echo $code;?>"></p>

  09 <p><in put type="submit" name="Submit" value="提交" /></p>

  10 </form>

  B頁面:

  [代碼]php代碼:

  01<?php

  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}?>

copyright © 萬盛學電腦網 all rights reserved