CodeIgniter验证始终在匹配操作时返回false

时间:2016-09-19 06:44:29

标签: php forms codeigniter validation match

我在当前项目中使用了CodeIgniter 3.1.0。对于表单验证,一切都运行良好,但是当我想使用matches作为规则时,我遇到了问题。这是我的HTML:

<input type="password" class="form-control" name="password" id="password">
<input type="password" class="form-control" name="confirm" id="confirm">  

这是我的控制者:

$this->form_validation->set_rules('password','Password','matches[confirm]');
if ($this->input->post('password') != '' && $this->form_validation->run() == FALSE) {
    echo 'Error';
}

即使我在两个字段中输入相同的值,我也总是得到Error。我的错是什么?

3 个答案:

答案 0 :(得分:2)

在尝试匹配时,您还必须验证其他字段,这是可以帮助您的代码。

$this->form_validation->set_rules('password', 'password', 'trim|required');
$this->form_validation->set_rules('confirm', 'confirm', 'trim|required|matches[password]');
if ($this->form_validation->run() == FALSE) {
     echo 'ERROR';
}

答案 1 :(得分:1)

在if条件下提及($ this-&gt; input-&gt; post('password')!='')。因此,无论您插入什么值,它都将执行true。

if ($this->input->post('password') != '' && $this->form_validation->run() == FALSE) {
        echo 'Error';
    }

我建议你这样做

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|matches[passconf]');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');

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

http://www.codeigniter.com/userguide2/libraries/form_validation.html

中提及

答案 2 :(得分:0)

如果有效,这可能会有所帮助。

如果您的matches有问题。做一件像matches_pass这样的函数并使用如下的东西:

$this>form_validation>set_rules("input[password]","Password",'required|matches_pass[input---conf_password]');

和你的功能,

public function matches_pass($str, $field)
{
    $field = explode('---',$field);
    if ( ! isset($theField = $_POST [$field[0] ][ $field[1] ]))
    {
        return FALSE;
    }  
    return ($str !== $theField) ? FALSE : TRUE;
}

把它放在你的图书馆里。