PHP 防止表單重復(fù)提交,使用令牌來(lái)做驗(yàn)證,即可解決。示例如下:
創(chuàng)新互聯(lián)主營(yíng)萊州網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP軟件開(kāi)發(fā),萊州h5微信小程序開(kāi)發(fā)搭建,萊州網(wǎng)站營(yíng)銷推廣歡迎萊州等地區(qū)企業(yè)咨詢
index.php:
?php?
header("Content-type:text/html;charset=utf-8");
//開(kāi)啟session
session_start();
//如果令牌為空,則生成一個(gè)令牌
if(!isset($_SESSION['token']?)????||?$_SESSION['token']?==?""){
//給當(dāng)前表單生成一個(gè)令牌
$_SESSION['token']?=?md5(microtime(true));
}
?
form?method="get"?action="deal.php"
名稱:?input?type="text"?name="names"br/
描述:?input?type="text"?name="desc"br/
input?type="text"?name="token"?value="?=$_SESSION['token']?"
input?type="submit"?value="提交"
/form
deal.php:
?php
header("Content-type:text/html;charset=utf-8");
//開(kāi)啟session
session_start();
//驗(yàn)證令牌
if($_REQUEST['token']?===?$_SESSION['token']){
//表單已經(jīng)提交,重新生成令牌
$_SESSION['token']?=?md5(microtime(true));
echo?"表單提交成功:br/";
print_r($_REQUEST);
}else{
echo?"重復(fù)提交";
}
?
1)首先你會(huì)不會(huì)修改一個(gè)數(shù)據(jù),是真正明白操作的修改?
2)針對(duì)兩個(gè)數(shù)據(jù)庫(kù)各建一個(gè)連接,$link1和$link2,然后對(duì)后面操作數(shù)據(jù)庫(kù)的操作復(fù)制一份,采用不同的連接做輸入?yún)?shù),這樣就能同時(shí)修改兩個(gè)數(shù)據(jù)庫(kù)了。
標(biāo)準(zhǔn)的方法是鎖定數(shù)據(jù)庫(kù),你開(kāi)始寫(xiě)數(shù)據(jù)的時(shí)候就獨(dú)占方式鎖定表,這時(shí)候其它用戶(或者同一用戶的其它進(jìn)程)查詢數(shù)據(jù)庫(kù)會(huì)報(bào)錯(cuò),直到你修改完畢后再解除表鎖定。
此外,還有一個(gè)更加完美一點(diǎn)的方法:增加TYPE字段的含義,1表示需要發(fā)送、2表示已經(jīng)發(fā)送、3表示正在發(fā)送,你的程序每次只查詢TYPE=1的來(lái)處理,處理之前整體修改TYPE=3(這個(gè)修改應(yīng)該瞬間完成,而且一個(gè)UPDATE語(yǔ)句執(zhí)行的時(shí)候MYSQL會(huì)自動(dòng)鎖定),然后慢慢發(fā)送和修改TYPE=2。
1、數(shù)據(jù)庫(kù)里有個(gè)東西叫鎖
2、在每個(gè)人操作表的時(shí)候,對(duì)表加鎖,這樣防止別人對(duì)表數(shù)據(jù)臟讀、臟寫(xiě)
3、操作完成后,釋放鎖
4、小心,加鎖后可能會(huì)造成死鎖,特別是鎖過(guò)多的時(shí)候。
用鎖需謹(jǐn)慎,有風(fēng)險(xiǎn),但對(duì)數(shù)據(jù)來(lái)說(shuō)是安全的
你這是PHP語(yǔ)法錯(cuò)誤引起的。我想你沒(méi)認(rèn)真看過(guò)PHP手冊(cè)吧。
"SELECT * FROM users where UserName=’{$_POST['username']}‘"
有什么問(wèn)題,錯(cuò)誤提示是什么,你要貼出來(lái)??!