2011-09-27 33 views
3

從傳統的(如果生鏽的)編程背景來看,我正在忙於掌握網站的「無狀態」特性。這是一種心態變化!網絡編程原理

我爲團隊創建了一個小型網站,我在其中使用內部來跟蹤我們日常研究的某些方面。這個網站是功能性的,我爲我設法提供的東西感到非常自豪。

但是我讀了一些東西,這表明我可能做得不好。特別是,團隊網站的中心頁面完成了大部分工作。它檢查你來自哪裏,然後「切換」以執行一些工作(對數據庫進行一些更改),然後再次呈現該頁面。

在很多情況下,網頁只是自動調用!我所做的是顯示一張桌子。每行的最後一列是一組html表單。每個表單都有一個提交按鈕,至少有一個隱藏字段。 「提交」按鈕具有名稱/值,例如「刪除」,「修改」,「歸檔」等。

如果$_POST['submit'] == "delete"那麼我在由隱藏字段標識的行上執行該函數。查看「存檔」的可見性。對於修改,我打開一個新頁面,顯示一個帶有默認值的表單,當用戶提交表單時,主PHP頁面再次被調用來執行SQL更新,然後顯示錶格。

因此,在主頁開始附近的一個大型(並且不斷增長)的案例構造完成了大部分工作,甚至包括登錄按鈕!

它似乎很整潔和有條理的這種方式,但我有兩個問題:

  1. 是否有消除「重新發送表單數據」的提示,當用戶按下後退的方式?在大多數情況下,後退按鈕在這個網站上沒有多大意義,但我們在這裏與人類打交道。我注意到其他人已經發布了有關注銷按鈕等的類似問題,但我迄今發現的答案對我來說很少或根本沒有意義。

  2. 這是不好的編程習慣,特別是整個PHP-調用本身從一個形式行動的概念....?

謝謝你的時間!

回答

4

您的問題:

  1. 您正在尋找的東西像後重定向消息獲得,提交你「做工作」與您的數據和右後重定向用戶之後,這意味着,所以擊球后退按鈕不會重新提交!

  2. 一般來說,它是如何工作的...在開始。過了一段時間,你應該看看OOP(面向對象的編程),或者對於初學者來說,只需將每個動作分成不同的功能,也許這些功能甚至可以分爲單獨的文件。檢查PHP手冊functions或者如果你真的熱衷於瞭解更多信息,OOP將是聖盃,但這是一個「有點」複雜;)你開發什麼

+0

後 - *重定向* - 得到 – Phil

+2

oups謝謝你...重新設計每次發佈後將是一個不錯的功能,不是; – Anonymous

+0

Thanx丹。我確實使用函數,並且有一個用於泛型站點範圍函數的包含文件。我仍然需要深入OOP,這是我知道的基本理論。我的意思是知道。它會很快回到我身上。 –

2

Post-redirect-get是一種相當乾淨地解決這個問題的模式。

+0

同上我附:對Dan的評論 - 感謝您提供的解決方案。我相信它會解決這個問題,我將來可能會多次使用這種方法。與此同時,我仍然試圖決定這是否是本例中最適合我的解決方案。 –

1

不是一個網站,但更像是一個Web應用程序。爲了消除「後退按鈕問題」,您應該考慮使用一些JavaScript魔術(例如,Ajax可以幫助您消除打開另一個頁面或提交到同一頁面的需要,jQuery可以幫助顯示和隱藏頁面部分哦基於用戶交互)。

對於第二個問題:在一個php文件中擁有所有邏輯沒有任何問題。當然,如果你有類似bazillion的代碼行,但對於一個小應用程序,它可能會受到傷害......爲什麼不呢?!

一般來說,建議分開邏輯和GUI。你可以閱讀關於它here

+0

我必須相信你對我的問題描述有很好的洞察力!感謝您的建議和意見! –

1

在表單數據處理完之後,redirect頁面總是一個明智的想法。它避免了頁面刷新或返回按鈕上的重新發送表單。

在PHP重定向,你可以使用:

header("Location: {url here without brackers}"); 
+0

謝謝。另請看看我對其他評論的迴應! –