2013-01-14 46 views
0

我目前正在研究一個使用CodeIgniter的Web應用程序,具體來說,我正在構建註冊表單。CodeIgniter多步註冊

這個表格由3個不同的步驟組成,我只是想知道爲了在2個步驟之間保存信息,最好的方法是什麼? 我只想在完成最後的stap後保存所有的信息到數據庫中。

我應該只使用本機PHP會話來做到這一點?或者我應該使用CI flashdata?

+0

'flashdata'只會最後數據爲一頁。爲什麼不使用[CI會話](http://ellislab.com/codeigniter/user-guide/libraries/sessions.html)? –

+1

看到這個:: http://stackoverflow.com/questions/5083014/multi-step-page-form-in-php-codeigniter –

+0

@AaronW。可能的是,我一直在尋找最好的方法。 –

回答

1

我已經使用隱藏的字段和會話。我傾向於在每個階段結束時將所有表單值保存到文本文件中。然後,如果在任何特定階段發生什麼事情,我可以選擇如何處理保存在文本文件中的數據。

例如,如果您希望可以在第一頁上捕獲電子郵件地址。如果表格沒有完成(因爲所有階段都已成功完成),那麼您可以在適當的階段發送一封電子郵件給未來的用戶,並附上註冊表單的鏈接。預期用戶不必重新填寫他們填寫的任何字段,並且有機會以用戶身份重新獲取他們。

我傾向於使用文本文件作爲默認方式來保存多階段表單中任何階段的所有數據。在表格末尾,我可以將數據處理到數據庫並刪除文本文件。要抓取部分完整的註冊信息,我可以編寫一個腳本,該腳本通過每分鐘運行的cronjob執行。我總是在表示文件上次更新的數據文件中保存時間戳。如果時間戳超過X分鐘,則運行未完成註冊腳本或僅刪除它。

在每個階段保存數據很簡單。第一階段後,您創建$dataFile$dataFile = file_put_contents(json_encode($data));其中$data = array('timestamp'=>...) + $_POST;。第一次使用後,每個階段使用$data = json_decode(file_get_contents($dataFile), TRUE) + $_POST;$data['timestamp'] = ...;。然後使用file_put_contents將其保存迴文件。顯然,您需要跟蹤$ dataFile變量,但這很容易通過隱藏字段或會話數據完成。

該文件只會在處理和刪除之前的X分鐘內出現,但如果您希望在短時間內對文本文件具有安全性,那麼我會建議查找密碼或創建自己的變體簡單的Ceasar密碼。在字段名稱和值上使用密碼。

早在12月,我正在爲自己研究最新CodeIgniter中的多階段表單問題。我不能說這是一個普遍接受的最佳做法,但該文本文件在過去對我很有幫助。我在這裏發佈了一個多階段表格的示例代碼:Multi-Stage Form Example

+0

你能解釋爲什麼你認爲這是一個更好的過程將數組保存在文件中,而不是像在serialize(array())這樣的數據庫中保存數據? 另外,只需指出,CI有一個加密類,它允許您選擇密碼。 – Timmytjc

+0

首先,我想通過說我的經驗完全在我自己的使用LAMP設置的項目上作爲序言。我想我對DB文本文件的偏見可以追溯到非最佳的LAMP設置。在我的開發箱中,我發現太多的數據庫連接(有時低於1000)可能會導致我的四核Ubuntu服務器。我沒有在我的專用服務器上發現這種情況,但我也盡我所能避免這種情況。我還發現將數據保存到數據庫比文本文件慢(再次未在我的專用服務器上測試過)。 –

+0

在我的專用服務器上,我主要運行WordPress網站,它可以捆綁多個MySQL連接。由於這些經驗,我控制了使用任何工具打開的數據庫連接的數量。我發現的最簡單的解決方案是使用文本文件並通過cron作業進行後期處理。具有1個DB cxn的cronjob可以在一分鐘內處理大量文本文件。通常情況下,我可以處理來自文本文件的用戶反饋,並且1分鐘延遲到達數據庫不是問題。 –

0

您可以將值發佈到下一個表單,您可以在其中使用隱藏字段來存儲這些值,以便在發佈最後一個表單時您具有所有值,並且可以一次處理它們。

+0

我不會推薦這個過程。你如何保護我不使用螢火蟲等程序操作隱藏的輸入值,併成功完成下一步?您需要驗證隱藏表單數據是否已提交,從而使此流程毫無意義。 – Timmytjc

+0

@Timmytjc感謝您的反饋。我將爲未來記住這一點。 – cartina

0

我在最新的項目面臨着這種情況下,我用笨的會話保存在用戶數據會在最後一步,我將數據發送到DB確認後提交的陣列