我有两个数字字段来收集用户的数据。需要使用codeigniter表单验证类来验证它。
条件:
目前我使用
$ 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个条件?
提前致谢。
答案 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 &/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;
在您的控制器中。