In /application/controllers/Welcome controller I added a handler function and set the validations rules and custom callbacks (and define a custom route to this controller function $route['action_page'] = 'welcome/dates_validation';
):
public function dates_validation(){
$this->load->helper(array('form', 'url'));
$this->load->library('session');
$this->load->library('form_validation');
$this->form_validation->set_error_delimiters('<div class="alert alert-danger">', '</div>');
$this->form_validation->set_rules('first_field', 'First date', 'trim|callback_check_equal_less');
$this->form_validation->set_rules('second_field', 'Second date', 'trim|required|callback_check_greater_then['.$this->input->post('first_field').']');
$this->session->set_flashdata('result', '');
if ($this->form_validation->run() == FALSE)
{
$this->session->set_flashdata('result', validation_errors());
}
else{
$this->session->set_flashdata('result', '');
}
$this->load->view('forms');
}
public function check_equal_less($date){
$today = strtotime(date("Y-m-d"));
$first_date = strtotime($date);
if ( ($date != "") && ($first_date > $today) )
{
$this->form_validation->set_message('check_equal_less', 'The First date can not be greater than today!');
return false;
}
else
{
return true;
}
}
public function check_greater_then($second_date, $first_date){
if ( ($first_date != "") && ($second_date != "") && (strtotime($first_date) > strtotime($second_date)) )
{
$this->form_validation->set_message('check_greater_then', 'Second date field should be greater than First date field!');
return false;
}
else
{
return true;
}
}
The view file to this controller:
Optionally I loaded Boostrap because I formatted messages with alert
<div id="container">
<h1>Date validations</h1>
<?php echo $this->session->flashdata('result'); ?>
<form action="/action_page" method="post">
<label for="first_field">First date:</label><br>
<input type="date" id="first_field" name="first_field" value="<?php echo set_value('first_field'); ?>"/></br>
<label for="second_field">Second date:</label><br>
<input type="date" id="second_field" name="second_field" value="<?php echo set_value('second_field'); ?>"/></br></br>
<input type="submit" value="Submit">
</form>
</div>