CodeIgniter: Form Validation Problem
I am using CodeIgniter to validate the form. Once the form is submitted and there's some validation error, I want to form to remember the input fields values. At the moment, I validate all fields at once and it works fine (ie. I can get the input fields values in the form if the validation fails.
The following code works fine:
View:
<?php if ( form_error('name') ) { ?>
<input type="text" class="error" name="name" value="<?php echo set_value('name'); ?>"/>
<?php echo form_error('name', '<p class="error">', '</p>');
} else { ?>
<input type="text" name="name" value="<?php echo set_value('name'); ?>"/>
<?php } ?>
Controller:
function validate_form{
$this -> form_validation -> set_rules( 'name', 'name', 'trim|required|' );
$this -> form_validation -> set_rules( 'email', 'Email', 'trim|required|callback_email_available' );
$this -> form_validation -> set_rules( 'captcha', 'captcha', 'callback_check_captcha' );
if ( $this -> form_validation -> run() === FALSE )
{
$this -> load -> view( 'signup_view' );
}
else
{
//process form and insert to db.
}
}
My Problem:
Now, Instead of above approach (to validate all fields at once), I want to validate only one field 'captcha' at first. So If the captcha field is validated, then i want to valiate the other fields. Otherwise i want to return to form and display the captcha error, but I want to keep the other fields values the input fields, so that the user don't have to type again.
I am trying following code, but it does not work fine. For example, when I submit the form, the fields dont seem to remember the values. The view code is same as above.
Code which I am trying and is not working:
$this -> form_validation -> set_rules( 'captcha', 'captcha', 'callback_check_captcha' );
if ( $this -> form_validation -> run() === FALSE )
{
$this -> lo开发者_运维问答ad -> view( 'signup_view' );
}
else
{
$this -> form_validation -> set_rules( 'name', 'Name', 'trim|required|' );
$this -> form_validation -> set_rules( 'email', 'Email', 'trim|required|callback_email_available' );
if ( $this -> form_validation -> run() === FALSE )
{
$this -> load -> view( 'signup_view' );
}
else
{
//process form and insert to db.
}
}
Try this instead:
set_value('name', $this->input->post('name'));
For a strange reason, sometimes you can only get the value by using $this->input->post()
but not by using $_POST[]
.
The values are only remembered if you checked them through the form validation. So add every field to your form validation without any rules. This way they ain't checked on their conditions (rules) but will be displayed in the input fields.
Best way to pass value to form and display manually
controller
function validate_form{
$this -> form_validation -> set_rules( 'name', 'name', 'trim|required|' );
$this -> form_validation -> set_rules( 'email', 'Email', 'trim|required|callback_email_available' );
$this -> form_validation -> set_rules( 'captcha', 'captcha', 'callback_check_captcha' );
$repopulationData = $this->input->post(NULL, TRUE);
if ( $this -> form_validation -> run() === FALSE )
{
$this -> load -> view( 'signup_view',$repopulationData );
}
else
{
//process form and insert to db.
}
}
View
<form action='action page URL' method='post'>
<input type='text' name='name' value='<?php echo $name ?>'/>
<input type='text' name='email' value='<?php echo $email ?>'/>
<input type='text' name='captcha' value='<?php echo $captcha ?>'/>
<input type='submit' value='Save'/>
精彩评论