Codeigniter:验证两个字段

时间:2013-03-12 16:50:33

标签: codeigniter

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

条件:

  1. 第一个字段可以为零
  2. 第二个字段不能为零
  3. 第一个字段不应等于第二个字段
  4. 第二个字段应大于第一个字段
  5. 目前我使用

      

    $ this-> form_validation-> set_rules('first_field','First Field',   '修剪|所需| is_natural');

         

    $ this-> form_validation-> set_rules('second_field','Second Field',   '修剪|所需| is_natural_no_zero');

    但是,如何验证上面提到的第3和第4个条件?

    提前致谢。

3 个答案:

答案 0 :(得分:17)

谢谢dm03514。我通过下面的回调函数来实现它。

$this->form_validation->set_rules('first_field', 'First Field', 'trim|required|is_natural');
$this->form_validation->set_rules('second_field', 'Second Field', 'trim|required|is_natural_no_zero|callback_check_equal_less['.$this->input->post('first_field').']');

并且回调函数是:

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;       
      }
      return true;
  }

现在一切似乎都运转正常:)

答案 1 :(得分:4)

您可以使用回调编写自己的验证函数3和4

http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html#callbacks

doc

中的示例
<?php

class Form extends CI_Controller {

    public function index()
    {
        $this->load->helper(array('form', 'url'));

        $this->load->library('form_validation');

        $this->form_validation->set_rules('username', 'Username', 'callback_username_check');
        $this->form_validation->set_rules('password', 'Password', 'required');
        $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
        $this->form_validation->set_rules('email', 'Email', 'required|is_unique[users.email]');

        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('myform');
        }
        else
        {
            $this->load->view('formsuccess');
        }
    }

    public function username_check($str)
    {
        if ($str == 'test')
        {
            $this->form_validation->set_message('username_check', 'The %s field can not be the word "test"');
            return FALSE;
        }
        else
        {
            return TRUE;
        }
    }

}
?>

答案 2 :(得分:0)

如果您使用的是HMVC,并且接受的解决方案不起作用 在控制器初始化后添加以下行

$this->form_validation->CI =& $this;

所以它将是

$this->load->library('form_validation');
$this->form_validation->CI =& $this;  

在您的控制器中。