您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)PHP中怎么預(yù)防表單重復(fù)提交,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
1.使用客戶端JS腳本
提到客戶端腳本,經(jīng)常使用的是JavaScript進行常規(guī)輸入驗證。
< 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>
深入剖析PHP變量的具體使用方法
PHP類Snoopy的特點分析
詳細解讀PHP $_FILES數(shù)組的內(nèi)容
PHP APC的安裝與高級使用
PHP表單數(shù)組的具體使用方法介紹
當(dāng)用戶單擊“提交”按鈕后,該按鈕將變?yōu)榛疑豢捎脿顟B(tài)。
上面的例子中使用OnClick事件檢測用戶的提交狀態(tài),如果單擊了“提交”按鈕,該按鈕立即置為失效狀態(tài),用戶不能單擊按鈕再次提交。
還有一個方法,也是利用JavaScript的功能,但是使用的是OnSubmit()方法,如果已經(jīng)提交過一次表單,將立即彈出對話框,代碼如下:
< input type="hidden" name="originator" value="<?=$code?>"> 在接收頁面的PHP代碼如下: < ?phpsession_start();if(isset($_POST['originator'])) { if($_POST['originator'] == $_SESSION['code']){// 處理該表單的語句,省略 }else{ echo ‘請不要刷新本頁面或重復(fù)提交表單!’; } }?>
在上例中,如果用戶已經(jīng)單擊“提交”按鈕,該腳本會自動記錄當(dāng)前的狀態(tài),并將submitcount變量自加
1,當(dāng)用戶試圖再次提交時,腳本判斷submitcount變量值非零,提示用戶已經(jīng)提交,從而避免重復(fù)提交表單。
2.使用Cookie處理
使用Cookie記錄表單提交的狀態(tài),根據(jù)其狀態(tài)可以檢查是否已經(jīng)提交表單,請見下面的代碼:
< ?php if(isset($_POST['go'])){setcookie("tempcookie","",time()+30); header("Location:".$_SERVER[PHP_SELF]);exit(); } if(isset($_COOKIE["tempcookie"])){ setcookie("tempcookie","",0);echo "您已經(jīng)提交過表單"; }?>
如果客戶端禁止了Cookie,該方法將不起任何作用,這點請注意。
3.使用Session處理
利用PHP的Session功能,也能避免PHP表單重復(fù)提交。Session保存在服務(wù)器端,在PHP運行過程中可以改變Session變量,下次訪問這個變量時,得到的是新賦的值,所以,可以用一個Session變量記錄表單提交的值,如果不匹配,則認為是用戶在重復(fù)提交,請見如下代碼:
< ?php session_start();//根據(jù)當(dāng)前SESSION生成隨機數(shù) $code = mt_rand(0,1000000); $_SESSION['code'] = $code; ?>
在頁面表單上將隨機數(shù)作為隱藏值進行傳遞,代碼如下:
< input type="hidden" name="originator" value="< ?=$code?>">
在接收頁面的PHP代碼如下:
< ?php
session_start();
if(isset($_POST['originator'])) {
if($_POST['originator'] ==
$_SESSION['code']){// 處理該表單的語句,省略
}else{
echo ‘請不要刷新本頁面或
重復(fù)提交表單!’;}
}?>
4.使用header函數(shù)轉(zhuǎn)向
除了上面的PHP表單重復(fù)提交的預(yù)防方法之外,還有一個更簡單的方法,那就是當(dāng)用戶提交表單,服務(wù)器端處理后立即轉(zhuǎn)向其他的頁面,代碼如下所示。
if (isset($_POST['action'])
&& $_POST['action'] == 'submitted') {//處理數(shù)據(jù),如插入數(shù)據(jù)后,立即轉(zhuǎn)向到其他頁面
header('location:submits_success.php');
}
以上就是PHP中怎么預(yù)防表單重復(fù)提交,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。