2011-09-24 13 views
2

我建立了一個系統,允許新成員去年加入一個組織,當時我剛從一個程序員開始。這是跨越多頁的多步驟過程,在成功的信用卡交易之後結束。部分複雜因素是家庭成員的要求,它記錄了家庭中的每個人的細節併爲他們創建了記錄。多頁面註冊系統:如何保持一路上的狀態?

最初,我使用會話變量中的數組在整個步驟中維護表單輸入數據,並在信用卡付款完成後將數據提交給數據庫。

我現在已經完全重建了,因爲從那時起我已經學到了很多東西,而且它變得太混亂而無法維護,但我仍然不知道管理這些數據的最佳方式是什麼。

原來的理由是,因爲有很多步驟,並且最終要求付款,所以在完成過程之前將數據提交給數據庫似乎沒有意義,特別是因爲它涉及記錄在多個表中,不得不定期清除不完整記錄的想法看起來是不必要的,過於複雜的努力。在第一次完成之後,會話變量中的數組變得非常混亂,並且在代碼中涉及很多驗證,因爲它可能容易出錯。我也失去了很多時間來糾正會話超時(這似乎比我在開發時預期的要多得多)。

所以我問那些比我自己知識和經驗要多得多的人: 通過多頁註冊過程來維護臨時數據的最佳方式是什麼?

+0

您是否有任何示例來說明如何對這些會話變量進行編碼並存儲它們?也許你可以通過遍歷POST數組並將其存儲在SESSION數組中,然後遍歷SESSION數組以存儲在數據庫中來節省時間。 –

回答

4

一般來說,沒有多少不同的方法來處理這個問題。

要麼所有的數據都會保留在會話中,或者只有一個唯一的標識符存在於會話中,以便在整個過程中查詢數據庫中的所有數據。

雖然會話是不穩定的,所以數據庫是一個更好的方法。

將部分數據的每一步保存到數據庫中,但在每個相關表中默認情況下都有一個類似「已完成」或「已提交」的列,並且只有當過程完成時將它們全部標記爲1。

編寫一個被cron調用一次的php腳本,每晚一次刪除所有提交的記錄= 0並且最後修改時間> 1天(您確實有一列可以自動執行)更新權限時更新時間戳?)或類似的東西。或者更好,而不是刪除,將它們移動到另一個名爲「warm_leads」的表格 - 那些對您的服務感興趣但出於某種原因保釋出來並且繼續銷售/客戶服務的人。

也增加了會話超時爲1或2個小時:

ini_set(’session.gc_maxlifetime’, 120*60); // 120 minutes 

;或者在每一頁上每隔10分鐘,基本上是執行會話保持活動延長只要會話觸發一個AJAX請求因爲瀏覽器已打開並且JavaScript沒有中斷。

另一個好消息是數據庫持久化數據,你只需要在進行中驗證一次,而不是每一步。

3

這是我的另一個想法。如果你不想使用SESSIONS,你可以使用Javascript(是的,聽我說)。因此,基本上你會一次加載整個表單,然後隱藏其中的一部分,當有人點擊下一步時,繼續進入它將顯示的進程中的下一步(你甚至可以製作幻燈片的動畫)隱藏部分並隱藏他們剛完成的部分。

因此,您不會加載不同的頁面,而是將內容滑入和滑出用戶視圖。您可以在繼續之前驗證用戶是否輸入了數據,但您不會保存數據,也不需要。

這裏將是jQuery的一個例子(注意它並不顯示領域,但你的想法。)

http://cssglobe.com/lab/easyslider/03.html

單擊向下按鈕。

+0

這確實是個好主意。它也可以設計爲非侵入性的文本客戶端或瀏覽器w/JavaScript禁用。 – Artefact2

+0

如果我有能力在JS中做到這一點,我會的。 這是一個如此複雜的註冊過程(尤其是在添加和刪除家庭成員時,只允許兩個家庭成員超過18個等),它會在JS中更好地處理很多原因。不幸的是,我還沒有達到那個水平。 我覺得現階段對我來說最令人沮喪的事情是我的設計軟件的能力遠遠超過了我創造它的能力。至少我有很多想要的! – aspekt

相關問題