問關於sql語句防止使用者重複提交有時候不起作用
有一個問答表單,使用者選擇好選項之後提交,我先用一個sql語句加上限制,使得回答正確的人就不用再回答了:
SQL code
select * from q_record where username='$username' and isright=1 limit 1
如果找不到,則執行插入語句:
SQL code
insert into q_record...
但是發現,資料庫裡面仍然會有個使用者的isright=1的數量大於1,而且時間是同一秒的,不知道是什麼原因?是不是資料庫反應不過來了,還沒有做好select判斷,就執行了insert語句?
------解決方案--------------------
我想看看你的php代碼. 另外SQL也不需要這麼寫.
------解決方案--------------------
你這個不是同個表嗎?q_record 怎麼是用insert into 不是update set?
------解決方案--------------------
加個時間限制,js和php都限制,js限制是一般情況的限制,php再在session中存放上次回答時間,到時候進行限制就行了,如果問題是因為極短時間內重複提交的原因
------解決方案--------------------
探討
引用:
你這個不是同個表嗎?q_record 怎麼是用insert into 不是update set?
insert into是記錄使用者的回答記錄,如果已經答對了,就提示使用者不用再答了,否則就讓使用者再來回答。
------解決方案--------------------
說起這個防止使用者重複提交,連號稱最大社區的csdn也沒解決,,昨天一個getTime()的問題,,我只提交了一遍,出來顯示2個,扣了40分,我擦
------解決方案--------------------
$query = "select * from q_record where username='$username' and isright=1 limit 1";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
if ($row) {
echo "你已經答對該題了,不需要再回答哦!";
}else{
$query = "insert into q_record (pid,question,isright,time) values ('$pid','$question','$isright','$time')";
$result = mysql_query($query);
}
?>
這樣試一下
------解決方案--------------------
資料庫表的結構是什麼樣的。