php 解決和避免form表單重複提交的方法

WBOY
發布: 2016-08-08 09:26:06
原創
1252 人瀏覽過

轉載於:http://www.hlmblog.com/183.html

在提交表單的時候,可能遇到網速等導致頁面突然加載變慢,用戶重複地點擊提交按鈕,將在數據庫產生多條數據,導致不可控情況。

例如下面的情況就會導致表單重複提交:
點擊提交按鈕兩次。
點擊刷新按鈕。
使用瀏覽器後退按鈕重複先前的操作,導致重複提交表單。
使用瀏覽器歷史記錄重複提交表單。
瀏覽器重複的HTTP請求。
網頁被惡意刷新。

下面是幾個解決的方法:
一:利用js設定按鈕點擊後變成灰色

$(document).ready(function(){
  $(input:submit).click(){
      setTimeout(function(){obj.disabled=true;},100)
  };
});
登入後複製

二:利用session

表單隱藏域中存放session(表單被要求時產生的標記)。

採用此方法在接收表單資料後,檢查此標誌值是否存在,先進行刪除,然後處理資料; 若不存在,說明已提交過,忽略本次提交。

//服务端生成随机数存入session, 分配至表单页
$data['sess_id'] = $_SESSION['sid'] = mt_rand(1000, 9999);
$this->load->view('form', $data);

//表单页隐藏域存放此session值
<input type="hidden" name="sid" value="<?=$sess_id; ?>">

//处理
if($_POST['sid'] != '' && $_POST['sid'] == $_SESSION['sid'])
{
 unset($_SESSION['sid']);

 echo '处理数据';
}
else
{
 echo '已提交过表单';
}
登入後複製

三:利用cookies
原理和session差不多,但是cookies一旦用戶瀏覽器禁用cookies,這功能就失效了

if(isset($_POST['submit'])){
    setcookie("tempcookie","",time()+30);  
    header("Location:".$_SERVER[PHP_SELF]);exit();  
}
if(isset($_COOKIE["tempcookie"])){  
    setcookie("tempcookie","",0);echo "您已经提交过表单";  
}
登入後複製

四:利用header函數跳轉

if (isset($_POST['submit'])) {
   header('location:success.php');//处理数据后,转向到其他页面
}
登入後複製


四:利用header函數跳轉

rrreee點擊完資料後跳到其他頁面

rrreee


五:利用資料庫來新增約束

直接在資料庫中新增唯一約束或建立唯一索引,一旦發現使用者重複提交了,直接拋出警告或提示,

或只處理第一次提交的數據,這是最直接有效的方法,要求前期的資料庫設計和架構要考慮周全

以上就介紹了php 解決和避免form表單重複提交的方法,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。 🎜 🎜 🎜
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板