酷!學園

技術討論區 => 程式討論版 => PHP程式設計討論區 => 主題作者是: hotswin 於 2010-12-10 22:10

主題: 如何防止重複post表單呢?
作者: hotswin2010-12-10 22:10
你好:

請敖一下,我目前的submit 表單 post之後
database 常出現重複的記錄,可能是按refresh造成的
有什麼防止這種情況呢?
主題: 回覆: 如何防止重複post表單呢?
作者: Yamaka2010-12-10 22:25
你好:

請敖一下,我目前的submit 表單 post之後
database 常出現重複的記錄,可能是按refresh造成的
有什麼防止這種情況呢?

最簡單的就是在資料處理完畢之後
用 header("Location: xxxxxx") 導到其他頁
這樣就算 user 按重新整理或回上頁
也不會回到接收資料那頁
主題: 回覆: 如何防止重複post表單呢?
作者: hotswin2010-12-27 11:13
你好:

請敖一下,我目前的submit 表單 post之後
database 常出現重複的記錄,可能是按refresh造成的
有什麼防止這種情況呢?
最簡單的就是在資料處理完畢之後
用 header("Location: xxxxxx") 導到其他頁
這樣就算 user 按重新整理或回上頁
也不會回到接收資料那頁
我有試著修改您的方式,但仍然會出現重複的記錄
不過修改後,重複的次數較之前不頻繁
不知道 這種情況 user是怎麼做 submit ?


主題: 回覆: 如何防止重複post表單呢?
作者: ricky2010-12-27 12:06
為了避免User不小心按下refresh一直重複submit
可以在表單中埋入一個hidden欄位給他一個隨機值
並且在session中紀錄這個隨機值
當完成表單post後,就把這個隨機值從session中刪除
所以當User是重複按下refresh或是按上一頁重新submit時
表單中hidden欄位的數值勢必跟session紀錄的不一樣,就可以知道這是重複送出的form了。
主題: 回覆: 如何防止重複post表單呢?
作者: hikohan2010-12-27 14:32
中間打一個洞看看。

ex:

doc.form.submit() -> null page -> complete -> redirect

redirect可以清document.history,於complete頁面偵測refer(遇到踢至err page)。

打完,大概重複發送表單的問題也杜絕了。
主題: 回覆: 如何防止重複post表單呢?
作者: ricky2010-12-27 15:45
另外一個常見的處理方式是這樣

把表單的頁面跟POST的對象頁面設為同一個
像這樣
<form action='' method='post'> ...</form>
當表單被submit時會被送到原本產生form的路徑去
在php的程式中透過$_SERVER['REQUEST_METHOD']可以得知目前的request method
$_SERVER['REQUEST_METHOD']=>GET    送出form的表單
$_SERVER['REQUEST_METHOD']=>POST  表示User按下submit
接下來的處理流程就一樣樓
處理完submit該做的事情後透過header('location=xxxx');導向結果頁面。
主題: 回覆: 如何防止重複post表單呢?
作者: TyroneYeh2010-12-28 08:51
用 AJAX POST 資料,就不怕 Reflash!
主題: 回覆: 如何防止重複post表單呢?
作者: christ7562011-02-21 13:25
小弟是初學者,方法有點拙 :)
假如:填寫頁→紀錄頁→顯示紀錄完成頁
方法1.我會在填寫頁紀錄一個cookie,在紀錄完成頁會刪除此cookie,在紀錄頁判斷此cookie是否存在,存在才紀錄,不存在就轉頁到其他地方。
方法2.在紀錄頁echo "<Script language='javascript'>if(window.history.forward(1) != null)   window.history.forward(1);</Script>"; //防止從紀錄完成頁按上一頁回紀錄頁,然後轉到紀錄完成頁
當然也可以兩個一起用0.0
主題: 回覆: 如何防止重複post表單呢?
作者: fattomhk2011-02-21 16:32
為了避免User不小心按下refresh一直重複submit
可以在表單中埋入一個hidden欄位給他一個隨機值
並且在session中紀錄這個隨機值
當完成表單post後,就把這個隨機值從session中刪除
所以當User是重複按下refresh或是按上一頁重新submit時
表單中hidden欄位的數值勢必跟session紀錄的不一樣,就可以知道這是重複送出的form了。
雖然Ajax可以解決refresh問題,但是Ajax也可以不停call啊,
所以版主提供的方法好像更有效 :o
COOKIE的方法與版主的理念相同吧,但是板主的應該比較安全
主題: 回覆: 如何防止重複post表單呢?
作者: linlong33882011-04-26 17:54
不妨貼程式碼來看看~
或許 ,問題不在post ,而是層層且複雜的迴圈造成的問題~ :)