当前位置: 首页 > 知识库问答 >
问题:

Codeigniter:验证两个日期字段

韦宏扬
2023-03-14

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

场景:

>

  • 第一个日期字段可以为空

    第二个日期字段不能为空

    第一个日期字段不应大于今天的日期

    第二个日期字段应大于第一个日期字段

    美元这个-

    美元这个-

    回调函数是:

    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个答案

    丁星火
    2023-03-14

    在/application/controllers/Welcome controller中,我添加了一个handler函数,并设置了验证规则和自定义回调(并定义了此控制器函数的自定义路由$route['action\u page']='Welcome/dates\u 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,因为我用警报格式化了消息

    <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>
    
    拓拔松
    2023-03-14

    如果你正在采取适当的日期只是转换它与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;
                  }
              }
    
     类似资料:
    • 我有两个数字字段来收集用户的数据。需要使用codeigniter表单验证类对其进行验证。 条件: 第一个字段可以为零 第二字段不能为零 第一字段不应等于第二字段 第二字段应大于第一字段 目前我使用 美元这个- 美元这个- 但是,如何验证上述第3和第4个条件? 提前谢谢。

    • 我正在尝试设置一个验证来比较两个日期。一个日期应该比另一个日期短。 此外,我为我的两个约会都创建了一个自定义约束。但问题是,我的注释接口无法处理非原始数据类型。 这是我的代码:(我知道这是错误的,但如果我展示我的源代码,也许你可以理解我的问题) 豆子: 注释界面: 所以这里有一个问题:我试图将类型放入类型。但是,如果我将我的和声明为,则存在一个问题: 还有其他方法来比较两次约会吗? 我错过了什么?

    • 您如何验证有效的 HTML JavaScript 即使我对表单中的其他字段使用相同的方法,对空字段的验证也不起作用。

    • 问题内容: 我试图建立一个PHP日期验证(MM / DD / YYYY),但我遇到了问题。这是我得到的样本: 问题答案: 您可以使用checkdate。例如,如下所示: 一种更偏执的方法,不会盲目相信输入内容:

    • 我正在尝试设置php日期验证(MM/DD/YYYY),但我遇到了问题。以下是我得到的一个示例:

    • 问题内容: 我正在写一个shell脚本,并且对为什么我的日期验证代码不起作用感到困惑。我针对发现的类似问题尝试了以下解决方案,但is_valid始终设置为1: 如何正确验证日期格式?只有格式为MM / DD / YYYY的日期才有效 我也尝试了以下解决方案:Linux Bash-日期格式,但它也总是拒绝日期。 问题答案: Mac OS X随附的BSD 不支持该选项(或者,它用于完全不同的东西)。安