小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

php 解決和避免form表單重復(fù)提交的方法 | HLMBlog

 yeah51 2015-04-03

在提交表單的時(shí)候,可能遇到網(wǎng)速等導(dǎo)致頁(yè)面突然加載變慢,用戶重復(fù)地點(diǎn)擊提交按鈕,將在數(shù)據(jù)庫(kù)產(chǎn)生多條數(shù)據(jù),導(dǎo)致不可控情況。

比如下面的情況就會(huì)導(dǎo)致表單重復(fù)提交:
點(diǎn)擊提交按鈕兩次。
點(diǎn)擊刷新按鈕。
使用瀏覽器后退按鈕重復(fù)之前的操作,導(dǎo)致重復(fù)提交表單。
使用瀏覽器歷史記錄重復(fù)提交表單。
瀏覽器重復(fù)的HTTP請(qǐng)求。
網(wǎng)頁(yè)被惡意刷新。

下面是幾種解決的方法:
一:利用js設(shè)置按鈕點(diǎn)擊后變成灰色

1
2
3
4
5
$(document).ready(function(){
  $(input:submit).click(){
      setTimeout(function(){obj.disabled=true;},100)
  };
});

二:利用session

加載提交的頁(yè)面時(shí)候,生成一個(gè)隨機(jī)數(shù),
$code = mt_rand(0,1000000);
存儲(chǔ)在表單的隱藏輸入框中:
< input type="hidden" name="code" value="“>
在接收頁(yè)面的PHP代碼如下:

1
2
3
4
5
6
7
8
9
<?php
session_start();
if(isset($_POST['code'])) {  
    if($_POST['code'] == $_SESSION['code']){
         // 重復(fù)提交表單了
    }else{  
         $_SESSION['code'] =$_POST['code']; //存儲(chǔ)code
    }  
}?>

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

1
2
3
4
5
6
7
if(isset($_POST['submit'])){
    setcookie("tempcookie","",time()+30);  
    header("Location:".$_SERVER[PHP_SELF]);exit();  
}
if(isset($_COOKIE["tempcookie"])){  
    setcookie("tempcookie","",0);echo "您已經(jīng)提交過表單";  
}

四:利用header函數(shù)跳轉(zhuǎn)

一旦用戶點(diǎn)擊提交按鈕,處理完數(shù)據(jù)后跳到其他頁(yè)面

1
2
3
if (isset($_POST['submit'])) {
   header('location:success.php');//處理數(shù)據(jù)后,轉(zhuǎn)向到其他頁(yè)面
}

五:利用數(shù)據(jù)庫(kù)來添加約束

直接在數(shù)據(jù)庫(kù)里添加唯一約束或創(chuàng)建唯一索引,一旦發(fā)現(xiàn)用戶重復(fù)提交了,直接拋出警告或者提示,
或者只處理第一次提交的數(shù)據(jù),這是最直接有效的方法,要求前期的數(shù)據(jù)庫(kù)設(shè)計(jì)和架構(gòu)要考慮周全

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多