如何避免頁面刷新數據重復寫入數據庫
當表單的數據是提交給本頁面處理并寫入數據庫時,點提交后,刷新頁面的話使數據重復寫入數據庫。網上搜索一下,發現了不少的解決方案:
一、把一頁面分開為兩個,數據提交給另一個頁面處理,之后再跳到輸入頁面。
優點:避免了刷新的影響,并可連續提交數據。
缺點:當用戶在還沒有完整的填寫表單時,點了提交。若不執行數據入庫操作又要保留用戶之前輸入的內容,用php來實現有些困難或說不方便。(當然,用js實現可能比較容易。在此約定本文只是從php的角度評價,研究php的運用)
*總的說來,這是一種不錯的解決方案。
二、在session中保存變量
_SESSION['submit']=false
提交后 改為true
檢測變量
if (_SESSION['submit']=true){
echo "text";
exit();
}
優點:避免了刷新的影響,并且只有一個頁面,沒有第一種方法的缺點
缺點:只能提交一次,不能連續提交數據。
*有可取之處,但適用面太窄。
三、在數據入庫之前執行一次驗證查詢,看數據庫里是否已經存在了相同的記錄,由此來決定是否寫入數據。
優點:沒有了前兩種方法的缺點。
缺點:代碼不精簡,操作繁瑣。再說有時并不排斥保存完全相同的信息。
*實現代價太高,副作用過大。
有沒有沒整合三種方法優點不要其缺點的方法呢?有!下面就是一種不錯的解決方案,與大家分享:
///////////////////////////////////////////////////////
<?php
session_start();
if(!isset(_SESSION['h'])){
_SESSION['h']=1;
}
_SESSION['h']++;
if(isset(_POST['h']) and _SESSION['h']==_POST['h']){
echo '<font color=green >您點提交按鈕了</font>';
}else{
echo '<font color=red>您沒有點提交</font>';
}
?>
<form action="im.php" method=post>
b:<input type="text" name=b ><P>
<input type="hidden" name=h value=<?php echo _SESSION['h']+1;?>>
c:<input type="text" name=c ><P>
d:<input type="text" name=d ><P>
<input type="submit" value=提交>
新聞熱點
疑難解答