2014-09-27 1 views
0

我有我自己的MVC應用程序,我有3個主要區域:模型,視圖,控制器。如何使用PHP檢查多個表單提交?

在視圖中,我創建了一個表單,將一些數據插入到數據庫中。該操作設置爲同一頁面,類型爲:POST。

在模型中,如果表單已提交或不提交,我會進行一些基本檢查。之後有一秒睡眠。

在控制器中,我以非常簡單的方式連接視圖和模型,以便它們可以相互通信。

但是,只要訪問者在提交按鈕上多次點擊,就會出現問題。因爲等待1秒(這是故意的 - 所以它像系統正在處理數據一樣),他們可以多次點擊按鈕。

存在一個問題,因爲這樣,數據將根據點擊量插入到數據庫中。如果我輸出一個簡單的單詞,如「Foo」,它將只顯示一次(我猜這是因爲每次都重新加載頁面),但數據會多次插入到數據庫中。

有沒有解決此問題的方法?我的意圖是創建一個會話,並檢查這是否是第一次提交,否則什麼都不做。但是這不起作用,因爲會話總是在頁面加載時獲得基本的值。

任何人都可以幫助我解決這個問題嗎?

+0

如果您在插入之前檢查記錄是否插入,該怎麼辦?或者更好 - 創建一個獨特的約束來防止重複? – zerkms 2014-09-27 22:47:25

+0

我試圖運行一個檢查fr唯一性的查詢,但它似乎毫無價值。好像頁面在檢查之前插入了所有內容,即使它存在。不過,如果沒有這樣的記錄,我只能將其放入插入條件中。我想,不知何故,它檢查一次,如果它存在,然後插入多次 - 不知何故插入堆積起來。 – 2014-09-27 22:51:01

+0

最簡單的方法是使用一些簡單的javascript在前端處理它。 – Eugene 2014-09-27 22:54:35

回答

0

兩個選項:

  1. 放在前端一些JavaScript在被點擊禁用按鈕,然後提交表單 - 這可能是最簡單的方法,但你可能會想嘗試離開前端儘可能簡潔。

  2. 在加載頁面之前設置會話變量,然後在插入後立即刪除此會話變量。在插入之前,你應該檢查會話變量 - 如果它被設置,那麼插入是允許的,如果它不是,那麼它是不允許的。您可能還想將代碼添加到主控制器(如果您的所有控制器都來自一個主控制器),該控制器將檢查已調用的控制器,然後如果設置的會話變量應該用於不同的控制器,則應該是被刪除(因此如果用戶在不提交表單的情況下轉到其他頁面,則不再存在)。