Codeigniter:验证两个Date字段

时间:2015-02-18 09:39:08

标签: php forms validation codeigniter

我有两个Date字段来收集用户的数据。需要使用codeigniter表单验证类来验证它。

场景:

  1. 第一个日期字段可以为空
  2. 第二个日期字段不能为空
  3. 第一个日期字段不应大于今天的日期
  4. 第二个日期字段应大于第一个日期字段

    $ this-> form_validation-> set_rules(' first_field',' First Field',' trim | required');

    < / LI>

    $ this-&gt; form_validation-&gt; set_rules(&#39; second_field&#39;,&#39; Second Field&#39;,&#39; trim | required | callback_check_equal_less [&#39;。$ this - &GT;输入 - &GT;柱(&#39; FIRST_FIELD&#39;)&#39;]&#39);

    并且回调函数是:

    function check_equal_less($second_field,$first_field)
              {
                if ($second_field <= $first_field)
                  {
                    $this->form_validation->set_message('check_equal_less', 'The First &amp;/or Second fields have errors.');
                    return false;       
                  }
                  else
                  {
                    return true;
                  }
              }
    

2 个答案:

答案 0 :(得分:3)

如果您正在使用正确的日期,只需将其转换为strtotime,那么比较将很容易

这里是修改过的功能

function check_equal_less($second_field,$first_field)
          {
            if (strtotoime($second_field) <= strtotime($first_field))
              {
                $this->form_validation->set_message('check_equal_less', 'The First &amp;/or Second fields have errors.');
                return false;       
              }
              else
              {
                return true;
              }
          }

答案 1 :(得分:1)

/application/controllers/Welcome 控制器中,我添加了一个处理程序函数并设置了验证规则和自定义回调(并定义了到此控制器函数 $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;
    }
}

这个控制器的视图文件: 我可以选择加载 Boostrap,因为我使用 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>