Reputation: 35
Can someone please help me with this conditional field validation in CodeIgniter?
Trying to collect some customer data and if the user selects 'Yes' in the mail radio buttons, some of the fields such as (address, city, postcode etc) becomes mandatory.
I have the CodeIgniter form validation code in config/form_Validation.php as below:
$config = array ( 'customer/new_customer' => array
(
array ( 'field' => 'firstName', 'label' => 'First Name', 'rules' => 'required' ),
array ( 'field' => 'lastName', 'label' => 'Last Name', 'rules' => 'required'),
array ('field' => 'mail', 'label' => 'Mail', 'rules' => 'required' ),
array ('field' => 'address', 'label' => 'Address','rules' => ''),
//other fields here
)
);
I have the code below in the controller to add/edit customer:
function new_customer()
{
$customer_id = $this->input->post('customer_id');
if ($this->form_validation->run() == FALSE)
{
if(($customer_id != "X") && ($customer_id != "")){
$data['add_or_edit'] = "add";
return $this->edit_customer($customer_id, 'add');
}else {
$data['title'] = "New Customer";
$data['add_or_edit'] = 'add';
$this->load->view('customer_form_view',$data);
}
}else{
$data['firstName'] = $this->input->post('firstName');
$data['lastName'] = $this->input->post('lastName');
if($this->input->post('mail') == "Yes")
{
$data['address'] = $this->input->post('address');
$data['city'] = $this->input->post('city');
//other fields
}
if(($customer_id == 'X') || ($customer_id == ''))
{
//add new customer
$customer_id = $this->customers_model->insertCustomer($data);
redirect("/customer/customerList");
}else{
//edit the customer matching the customerID
$this->customers_model->editCustomer($customer_id, $data);
redirect("/customer/customerlist");
}
}//end validation if
}//end function
I am not sure how to make the address, postcode and other fields as 'required' if the user selects 'Yes' in the mail option.
It will be great if someone can help me with this.
Thanks a lot
Regards, PS
Upvotes: 1
Views: 4079
Reputation: 1635
You could use callback function, as your mail option validation rule... Something like
$this->form_validation->set_rules('mail', 'Mail', 'callback_mail_check');
Then in callback function, you could have something like
function mail_check($str)
{
if ($str == 'YES')
{
$this->form_validation->set_message('mail_check', 'You need to fill other fields.');
return FALSE;
}
else
{
return TRUE;
}
}
Upvotes: 4