我在当前项目中使用了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。我的错是什么?
答案 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;
}
把它放在你的图书馆里。