php 防止表單重復提交實例
<?php
session_start();
$_SESSION[
?>
<!DOCTYPE html PUBLIC "
<html xmlns="
<head>
<meta http
<title>防止表單重復提交</title>
<SCRIPT language=Javascript type=text/javascript>
<!
//*****Javascript防重復提交************
var frm_submit=false; //紀錄提交狀態
function check_form(fobj) {
var error =
var error_message = "";
if (fobj
{
error_message = error_message + "formtext 不能為空
error =
}
if (frm_submit==true) {
error_message = error_message + "這個表單已經提交
error=
}
if (error ==
alert(error_message);
return false;
} else {
frm_submit=true; //改變提交狀態
return true;
}
}
</script>
</head>
<body>
Javascript和服務器端 雙重防止表單重復提交演示
<br/>
<br/>
現在時間
<br/>
<br/>
<?php
if(@$_POST["faction"]=="submit"||@$_GET["faction"]=="submit"){
//提交處理
//*****服務器端防重復提交*******************
//如果POST傳來的表單生成時間與SESSION保存的表單生成時間
//相同
//不相同
if($_SESSION["fsess"]==$_POST["fpsess"]){
$_SESSION["fsess"]=time();
echo "提交內容
echo $_POST["fpsess"]
echo $_POST["formtext"];
echo "</body></html>";
exit;
} else {
echo "重復提交
echo "</body></html>";
exit;
}
}
//$_SESSION["fsess"]=time();
?>
<form name="f_info" action="" method="post" onSubmit="return check_form(this);">
<input name="fpsess" type="hidden" value="<?php echo $_SESSION["fsess"]; ?>" />
<!
<input name="faction" type="hidden" value="submit" />
<input name="formtext" id="formtext" type="text" value="" />
<input type="submit" value="提交" />
<input type="reset" value="重置" />
</form>
</body>
</html>
*************************************************************
上面是完整例題
*************************************************************
用戶提交表單時可能因為網速的原因
提到客戶端腳本
<form method="post" name="register" action="test
<input name="text" type="text" id="text" />
<input name="cont" value="提交" type="button" onClick="document
</form>
當用戶單擊“提交”按鈕後
上面的例子中使用OnClick事件檢測用戶的提交狀態
還有一個方法
<script language="javascript">
<!
var submitcount=
function submitOnce (form){
if (submitcount ==
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>
在上例中
使用Cookie記錄表單提交的狀態
<?php
if(isset($_POST[
setcookie("tempcookie"
header("Location:"
exit();
}
if(isset($_COOKIE["tempcookie"])){
setcookie("tempcookie"
echo "您已經提交過表單";
}
?>
如果客戶端禁止了Cookie
利用PHP的Session功能
<?php
session_start();
//根據當前SESSION生成隨機數
$code = mt_rand(
$_SESSION[
?>
在頁面表單上將隨機數作為隱藏值進行傳遞
<input type="hidden" name="originator" value="<?=$code?>">
在接收頁面的PHP代碼如下
<?php
session_start();
if(isset($_POST[
if($_POST[
// 處理該表單的語句
}else{
echo ‘請不要刷新本頁面或重復提交表單!
}
}
?>
關於Session的內容
除了上面的方法之外
if (isset($_POST[
//處理數據
header(
}
這樣
在開發過程中
header(
session_cache_limiter(
下面的代碼片斷可以防止用戶填寫表單的時候
session_cache_limiter(
session_cache_limiter(
session_cache_limiter(
session_start();
//以下是表單內容
將該段代碼貼到所要應用的腳本頂部即可
Cache
Cache
請 求時的緩存指令包括no
緩存指令
說 明
public
指示響應可被任何緩存區緩存
private
指示對於單個用戶的整個或部分響應消息
no
指示請求或響應消息不能緩存
no
用於防止重要的信息被無意的發布
max
指示客戶機可以接收生存期不大於指定時間(以秒為單位)的響應
min
指示客戶機可以接收響應時間小於當前時間加上指定時間的響應
max
指示客戶機可以接收超出超時期間的響應消息
表單可以通過同一個程序來分配應該要處理的動作
其實只要通過提交按鈕的name 就可以知道了
<FORM method="POST" Action=test
<input type=submit name="btn" value="a">
<input type=submit name="btn" value="b">
</FORM>
當使用者按下“a”按鈕的時候btn=a
另外也可以通過提交按鈕的名字(name)來判斷
<FORM method="POST" Action=test
<input type=submit name="a" value="提交A">
<input type=submit name="b" value="提交B">
</FORM>
這樣只要POST/GET的參數裡面有a或b
<?php
print_r($_POST);
?>
From:http://tw.wingwit.com/Article/program/PHP/201311/20939.html