2013-02-26 79 views
0

我有一個多步驟的形式,我分佈在4個不同的頁面 - 換句話說,4個部分(我選擇了這種方法,因爲它太複雜,無法處理所有的字段一頁)。在我的MySQL DB中,我爲每個頁面上的每個部分都有一個表(step1step2step3step4)。提交第一頁後,我想將我的Page1數據插入到數據庫中並讓它返回主鍵,然後我打算髮送到下一頁(step2.php)...並且對於步驟3和步驟4也遵循相同的過程。PHP5 - 精靈風格的數據提交

DB中Step2,Step3和Step4的表格都有一個主鍵(reg_id),它們也都是到step1.reg_id的外鍵。

我想一些意見/建議請就如何:

  1. 後數據中的每一頁之後回到我的數據庫提交(難道我回發到同一頁,或有一個單獨的處理器頁要處理這個問題?)
  2. 重定向到下一個頁面
  3. 傳遞reg_id第一步回到下一步

我使用普通和簡單的PDO在MySQL中獲取我的數據。我承認,由於我太習慣於ASP.NET webforms開發的生命週期,所以我沒有太多的PHP知識來完成此任務,因此我在此尋求您的專業知識。

非常感謝一如既往!

+0

爲什麼不把信息存儲在一個會話中,然後將其全部保存在表單的結尾? – Karl 2013-02-26 14:18:33

+0

或者使用Javascript和TabBoard系統在同一頁面上提供所有表單步驟。 – crush 2013-02-26 14:22:45

+0

我也使用會話實現多階段形式。在會話中存儲階段的「路徑」,並在每個階段完成時處理下一個階段。它也更容易來回切換。而且,對於那些半途退出表單的用戶,數據庫中不會有冗餘數據。 – djjjuk 2013-02-26 14:29:02

回答

2

正如卡爾在他的公司所說在重定向到下一頁之前,將表單值保存爲$ _SESSION值是最有意義的。表單處理器然後訪問$ _SESSION中的值,就像您將它們作爲$ _POST值發送一樣。

要擴大一點爲什麼這樣會好一點,你必須考慮如果你的用戶不只是從第1頁到第2頁......到表單的結尾會發生什麼一個人坐着。如果有人在中途退出巫師怎麼辦?如果他們需要返回並編輯數值,有時會多次?簡而言之,如果您的用戶的工作流程導致不完整的表單或用戶在表單頁面之間來回切換,最終可能會導致大量不必要的驗證並寫入數據庫。

如果您將表單值保存在會話中,並且只在用戶完成整個多頁表單時將其存儲在數據庫中,則可以刪除這些不必要的寫入數據庫的可能性。

它還可以讓人們輕鬆地在表單中向後退出來進行編輯,而不會中斷您已經指出的驗證有點複雜。防爆。假設頁面1上的值x與頁面4上的值y相關。用戶一直到頁面5,但是然後決定他們想要回到頁面1來編輯x。第1頁可以訪問會話,因此可以訪問x和y,例如,如果新x值會導致y無效,或者沿着這些行發生了某種情況,您可以警告他們。

+0

是的, '$ _SESSION'變量方法聽起來不錯......我想我會走這條路線。但是,我是否還需要一個*處理器頁面?或者我的表單的動作,比如說'step1.php',是否需要發佈到自己? – maGz 2013-02-26 16:34:53

+0

執行此操作的「經典」方式是將step1.php發佈到step2.php,在step2.php表單的頂部重新顯示需要更正的任何字段。不過,這確實是一個美學問題,而你認爲​​最易於用戶使用。 – Liv 2013-02-26 17:08:21

+0

酷!感謝您的建議,並花時間向我解釋。 – maGz 2013-02-26 18:47:47

0

你可以有5個單獨的頁面,並在它們之間傳遞數據。

Page1.php將具有初始形式但不做處理,它會將其所有數據發佈到page2 onSubmit。

Page2.php將從page1.php中檢索所有發佈的數據,存儲到數據庫中,並檢索該ID的ID,然後顯示嚮導的第二階段的表單。這種形式onSubmit,將ID(隱藏字段)和表單元素髮送到page3.php

Page3.php存儲page2.php中的發佈數據,檢索ID並顯示下一個表單。再次提交隱藏的ID和表單字段,這一次到page4.php

您可以重複此步驟多次,因爲您有嚮導中的步驟。


另一種方法是將它全部放在一個頁面中。將會有幾個if語句,讀取已發送的數據。隱藏字段將跟蹤當前步驟。即

如果$步驟== 1,顯示第一形式(的onsubmit發送$步驟= 2作爲隱藏字段)

如果$步驟== 2檢索來自第一形式後數據和插入到DB然後顯示所述第二形式(的onsubmit發送$步驟= 3作爲隱藏字段)

如果$步驟== 3檢索來自前一個表格後數據和插入到DB然後顯示所述第二形式(的onsubmit發送$步驟= 4作爲隱藏字段)