php 防止表單重複提交幾種方法

來源:互聯網
上載者:User

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

1.使用用戶端指令碼

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


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

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

<script language="javascript">      var submitcount=0;      function submitOnce (form){          if (submitcount == 0){               submitcount++;               return true;          } else{              alert("正在操作,請不要重複提交,謝謝!");              return false;          }      }      </script>      <form name="the_form" method="post" action="" onSubmit="return submitOnce(this)">      <input name="text" type="text" id="text" />      <input name="cont" value="提交" type="submit">      </form>

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


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

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

<?php     session_start();                //根據當前SESSION產生隨機數     $code = mt_rand(0,1000000);     $_SESSION['code'] = $code;      //將此隨機數暫存入到session     ?>     <form id="form1" name="form1" method="post" action="t2.php">         <p>說明 <input type="text" name="titile" />             <input type="hidden" name="originator" value="<?php echo $code;?>"></p>         <p><input type="submit" name="Submit" value="提交" /></p>     </form>B頁面:<?php  session_start();  if(isset($_POST['originator'])) {      if($_POST['originator'] == $_SESSION['code']){          echo "ok";          unset($_SESSION["code"]);               //將其清除掉此時再按F5則無效      }else{          echo "請不要重新整理本頁面或重複提交表單";      }  }?>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.