4

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

条件:

  1. 第一个字段可以为零
  2. 第二个字段不能为零
  3. 第一个字段不应等于第二个字段
  4. 第二个字段应该大于第一个字段

目前我使用

$this->form_validation->set_rules('first_field', '第一个字段', 'trim|required|is_natural');

$this->form_validation->set_rules('second_field', '第二字段', 'trim|required|is_natural_no_zero');

但是,如何验证上述第 3 和第 4 条件?

提前致谢。

4

3 回答 3

18

谢谢 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;
  }

现在一切似乎都很好:)

于 2013-03-14T14:51:43.950 回答
4

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

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

来自文档的示例

<?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;
        }
    }

}
?>
于 2013-03-12T16:53:21.130 回答
0

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

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

所以会是

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

在您的控制器中。

于 2015-02-05T11:03:27.083 回答