views:

288

answers:

2

I'm building a survey w/ Codeigniter, and it's getting cumbersomely long...so I want to split it up into sections (about 5).

If I want each section to validate, and submit to db after the user clicks "next", what is the best way to do this? I've never made a multi-step process before.

Any advice for a noob? :)

A: 

CI doesn't have built-in multi-page form support the way content management systems like Drupal do.

The best way is probably to create five separate forms, each with its own form_validation array, controller function, and view. When a user successfully submits form 1, validate the form, enter the (partial) data into the database, and redirect to the second form. Include a database ID number or your own custom transaction ID number in the URL of subsequent forms so that you know which record you're referring to:

http://www.mysite.com/mycontroller/form1
http://www.mysite.com/mycontroller/form2/transaction_id

CI's documentation is great, and this form validation library will get you most of the way there: http://codeigniter.com/user_guide/libraries/form_validation.html

Summer
+1  A: 

I totally disagree. Save the whole thing in session after validation and then display all the results on a confirmation page. If the user confirms it, then save each field that was actually answered in a relevant database table.

Summer's idea is open to errors or intentional bad input from the user. There is nothing to prevent them from bookmarking http://www.mysite.com/mycontroller/form2/transaction_id or intentionally changing the transaction_id.

I've built one multi-page form now using summer's idea, another using codeigniter's session class but storing the sessions in a database, and another one saving each page to a database table but using a log in system to track the user. The last option is the most robust, but is a real pain. The session system is best.

Kris
Is it a bad idea to use session data like this to store about 100 values temporarily?
Kevin Brown
I don't think so. Just be aware that session are rebuilt with every post back to the server, which could create scalability issues if you have a large number of simultaneous users and a large session array for each of them.
Kris
That's great and all, but what happens if the view being loaded comes from another controller? That is to say if you select one of x options to get there, then the validation framework then fails...
Stephane Grenier