防止表單重復提交php
1. thinkphp 防止重復提交數據。
親,你可以加驗證碼驗證啊!~~
第一次產生驗證碼,然後驗證完成後就將驗證碼更新掉,這樣他再提交驗證碼就錯誤了,驗證碼錯誤就不讓他提交,直接轉向就好了!~~
驗證碼是防止重復提交的一個簡單的方式,目前還是比較有效的!~~
而且tp生成驗證碼很簡單,驗證也很方便的!~~
具體可以參考文檔這里:http://document.thinkphp.cn/manual_3_2.html#verify
希望對你有幫助,如果有幫助,記得採納喲!~~
2. php通過記錄IP來防止表單重復提交方法分析
本文實例分析了php通過記錄IP來防止表單重復提交方法。分享給大家供大家參考。具體分析如下:
這個原理比較的簡單就是用戶第一次提交時我們記錄提交用戶的IP地址,這樣如果用戶在固定時間內再次提交表單就會提示重復提交了,這種做法通常用於在頂一下,支持一下這種應用中了,在防止數據重復提交是一個非常不好的選擇.
例子,代碼如下:
復制代碼
代碼如下:<?php
session_start();
if(empty($_SESSION['ip']))//第一次寫入操作,判斷是否記錄了IP地址,以此知道是否要寫入資料庫
{
$_SESSION['ip']=$_SERVER['REMOTE_ADDR'];//第一次寫入,為後面刷新或後退的判斷做個鋪墊
mysql_query("INSERT
INTO
admin(id,
name,
age)
VALUES(123,
'姚明',
25)");//寫入資料庫操作
}
else//已經有第一次寫入後的操作,也就不再寫入資料庫
{
echo
'請不要重復提交表單或刷新頁面';//寫一些已經寫入的提示或其它東西
}
?>
還有辦法就是:
1:在頁面生成隨機碼,也就是每次提交隨機碼都不一樣,在提交的時候驗證隨機碼!
2:在提交的時候,驗證如果數據存在,就不提交了.
如果你想防止重復提交入庫IP不是最好的辦法,我們可以在資料庫中查詢是不是有相同記錄並且IP是不是想同再進行處理.
例子,代碼如下:
復制代碼
代碼如下:$sql
="select
*
from
表名
where
buy_tel='電話'
and
IP='$ip'
";//
and
$time-buy_date<60
$query
=
$db->query(
$sql
);
if(
$db->rows(
$query
)
)
{
echo('<script>alert("您己提交過了,請勿重復提交!");</script>');
}
else
{
//進行入庫操作
}
希望本文所述對大家的PHP程序設計有所幫助。
3. 在用php做小頁面,有個表單.每次刷新頁面時老是提示不要重復提交表單怎樣去掉這個提示啊
首先,為什麼會出現這個問題?假設你在a.html有一個表單<form>....</form>,首先我們要理解瀏覽器這樣做的用意:如果我們刷新這個網頁,你表單填寫的內容可能會被reset。如果你的表單是長長的填寫了很多內容,你當然不希望重頭再來,就這點而言,瀏覽器的提示沒有惡意。我們要做的就是告訴瀏覽器:放心刷新。這也是解題的思路:在刷新時把表單撤了。當然,我的情況可能和你的不同,我寫的是彈窗式的登錄頁面,所以,我用Jquery寫了個Load(「b.html」),b.html里只有一個<form>。這樣做就可以保證a.html里沒有<form>。只有你的網頁里有<form>,chrome就會提示「重新提交表單」。這個情況在IE,FF則不會出現。
這是我遇到的情況,希望對你有啟發。
4. php避免form表單重復提交
php避免form表單重復提交
重復提交我們在php中的防止方法許多最常用的就是資料庫限制了,當然也有可以直接在客戶端進行限制了,具體的來看php重復提交防止示例會有哪些呢?
下面的情況就會導致表單重復提交:
點擊提交按鈕兩次。
點擊刷新按鈕。
使用瀏覽器後退按鈕重復之前的操作,導致重復提交表單。
使用瀏覽器歷史記錄重復提交表單爛舉液。
瀏覽器重復的HTTP請求。
網頁被惡意刷新。
下面是幾種解決辦法:
一:利用js設置按鈕點擊後變成灰色
<form name=form1 method=”POST” action=”/” target=_blank>
<p>
<input type=”text” name=”T1″ size=”20″>
<input type=”button” value=”提交” onclick=”javascript:{this.disabled=true;document.form1.submit();}”>
</p>
</form>
點擊完按鈕之後變成灰色就不能點擊了,用戶需要再次提交表單的話就要刷新頁面之後重新填寫數據再提交了。
二:利用session
在session中???放一個特殊標志。當表單頁面被請求時,生成一個特殊的字元標志串,存在session中,同時放在表單的隱藏域里。接受處理表單數據時,檢查標識字串是否存在,並立即從session中刪除它,然後正常處理數據。
如果發現表單提交里沒有有效的.標志串,這說明表單已經被提交過了,忽略這次提交。
這使你的web應飢物用有了更高級的XSRF保護
載入提交的頁面時候,生成一個隨機數,
$code = mt_rand(0,1000000);
存儲在表單的隱藏輸入框中:
< input type=”hidden” name=”code” value=””>
在接收頁面的PHP代碼如下:
<?php
session_start();
if(isset($_POST[‘code’])) {
if($_POST[‘code’] == $_SESSION[‘code’]){
// 重復提交表單了
}else{
$_SESSION[‘code’] =$_POST[‘code’]; //存儲code
}
}?>
三:利用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’);//處理數據後,轉向到其他頁面
}
五:利用資料庫來添加約束
直接在資料庫里添加唯一約束或創建唯一索引,一旦發現用戶重復提交了,直接拋出警告或者提示,或者只處理第一次提交的數據,這是最直接有效的方法,要求前期的資料庫設計和架構要考慮周全.
六:Post/Redirect/Get模式
在提交後執行頁面重定向,這就是所謂的Post-Redirect-Get (PRG)模式。簡言之,當用戶提交了表單後,你去執行一個客戶端的重定向,轉到提交成功信息頁面。
if (isset($_POST[‘action’]) && $_POST[‘action’] == ‘submitted’) {
//處理數據,如插入數據後,立即轉向到其他頁面
header(‘location:submits_success.php’);
}
這能避免用戶按F5導致的重復提交,而其也不會出現瀏覽器表單重復提交的警告,也能消除按瀏覽器前進和後退按導致的同樣問題。
;5. PHP-ThinkPHP中的表單令牌是什麼原理
你說的是token吧
有效防止重復提交,以及跨站偽造請求
Token,就是令牌,最大的特點就是隨機性,不可預測。一般黑客或軟體無法猜測出來。
Token一般用在兩個地方——防止表單重復提交、anti csrf攻擊(跨站點請求偽造)。
原理上都是通過session token來實現的。當客戶端請求頁面時,伺服器會生成一個隨機數Token,並且將Token放置到session當中,然後將Token發給客戶端(一般通過構造hidden表單)。下次客戶端提交請求時,Token會隨著表單一起提交到伺服器端。
然後,如果應用於「anti csrf攻擊」,則伺服器端會對Token值進行驗證,判斷是否和session中的Token值相等,若相等,則可以證明請求有效,不是偽造的。
純手打,望採納