2010-03-01 87 views
4

我有一個PHP表單,我想知道如何處理提交。我記得學習Rails的,該行爲是有一個表單,然後重定向用戶到登陸頁面,這將阻止用戶通過點擊返回按鈕,可以追溯到意外重新提交數據的特殊處理頁面時表單提交頁面。(PHP)正在處理同一頁面上的表單提交更多/更少/同樣在單獨的頁面上處理?

對於我的PHP的形式,來避免這樣的錯誤(和確保安全性,但它可能在)是它也最好通過郵寄發送表單數據到處理頁面,他們將用戶重定向?或者,只要在表單的同一頁面上處理表單數據就行了?如果我做了後者,用戶是否有可能通過點擊/刷新/等來意外地重新提交數據?

回答

5

Post-Redirect-Get是推薦用於web的表單,以防止重新提交(和你在軌使用什麼)

如果您提交相同的頁面或不同的一個它並不真正重要的設計模式,它的重定向這可以防止意外重新提交。因此,您可以根據自己的編碼風格和/或應用程序語義選擇是發佈到相同的頁面還是單獨的頁面。

1

同樣的原則也適用於PHP。重定向可以幫助防止意外的形式更新。但是,您仍然應該採取一切必要的預防措施以避免意外刷新的問題(例如,使用單次使用令牌,驗證輸入等)。

我使用我自己的MVC風格的框架,它只是讓調度員在每個頁面視圖上查找表單帖子,並調用可以處理請求的適當控制器(假設只提交一次需求)。然後,它將瀏覽器重定向到適當的登錄頁面。

您可以張貼到相同的頁面,當然,但我認爲這將導致不好的做法,如過多的邏輯,HTML和數據庫訪問混合在一起。

0

有去了解這一點,我特別喜歡的第三條道路。爲了將邏輯與表示分離,我喜歡在每個需要處理某種HTML文檔(例如顯示動態數據,處理HTTP POST請求等)的HTML文檔中包含一個PHP文件。我通常將此文件存儲在一個單獨的目錄中,並將其命名爲「filename.page.php」。毋庸置疑,這只不過是一種編碼習慣,你可能想稱之爲別的東西。

從某種意義上說,這意味着你在處理同一個文件的HTTP POST請求(至少就作爲Web服務器而言)。您可以重定向客戶無論如何,雖然,通過使用HTTP Location頭,像這樣:

header("Location: file.php")

作爲一個方面說明,我不會取決於HTTP POST安全;任意HTTP POST請求比HTTP GET請求更難。

相關問題