2012-04-12 136 views
0

這是場景:我填寫一個表格,然後在我的數據庫中插入一些東西。之後,我自動重定向到另一個表單。如果用戶按下瀏覽器的後退按鈕,因此第二個表單未被填充和提交,我想從數據庫中刪除他之前插入的內容。Zend - 檢查瀏覽器的後退按鈕是否被按下

我怎麼能知道,當用戶按下瀏覽器的後退按鈕?

+2

如果用戶關閉瀏覽器會怎麼樣?因此,嘗試將數據temp保存在會話中,並在表單填滿後將其保存在數據庫中! – Rikesh 2012-04-12 11:54:19

+0

是的,會議是要走的路。 – mpm 2012-04-12 12:01:55

回答

0

我放棄了插入,然後刪除的想法。我已經選擇在兩個表單填充後插入數據。謝謝Rikesh Shah的想法!並感謝大家的答覆!

0

你是什麼意思?你想檢測在JavaScript或後端代碼(zend)?

你可以令牌(唯一ID)添加到窗體,並確保在頁面緩存一段時間,所以當用戶單擊後退按鈕的頁面不會被重新從服務器獲得由此產生了新的令牌。

編輯:多步驟嚮導可以通過多種方式完成,無需通過身份驗證的用戶就可以跟蹤令牌,也可以根據您提交的數據進行檢查,無論是否已重新提交。

+0

我想在Zend那樣做。我將嘗試僅在填寫兩個表單時插入數據。這似乎是一個好主意。 – 2012-04-12 12:00:30

0

我不知道你是否能抓住這個事件(外觀與history.back())

但我認爲更好的辦法,使這是把一個國家在你的DB(與用戶ID或類似的東西)&當狀態保持「當前」時刪除它

2

首先 - 在Zend中沒有辦法做到這一點,因爲它是客戶端操作,而不是服務器端。您可以嘗試找到在第二頁上使用javascript的window.onunload事件(也是implemented in jQuery)的方法,但這並不是最安全的選項,因爲它可能無法在某些瀏覽器中觸發,或者用戶可能會關閉其javascript。

你可以保存在會話中的第一種形式的最後插入的ID,並檢查它的存在,當你下一次加載頁面。例如,當用戶提交第一個表單時,你說表單A已經被提交併且一個記錄已經用這個ID保存了。然後,如果用戶提交下一個表單,則清除標誌(意味着所有事情都按計劃進行)。但是,如果用戶按下後退按鈕並返回上一頁,則檢查標誌是否已設置。如果是這樣,你從表中刪除記錄(因爲用戶沒有提交第一個表單就按下了)。

這種解決方案的問題是,瀏覽器將最有可能加載頁面的緩存版本和你的PHP代碼甚至沒有得到執行。因此,您需要在提交第一個表單時檢查狀態。但是,這會產生另一個問題 - 如果用戶提交第一個表單,返回並關閉窗口會怎麼樣?它永遠不會運行檢查,並且永遠不會刪除該行。

在我看來,最可行的辦法是修剪第一種形式的記錄是不是,比方說,一個小時老年人和使用cron作業尚未完成。

有沒有簡單的解決辦法,所以我會說有一個頁面上這兩種形式的所有領域。這會讓你的生活更輕鬆。