Hes*_*any 0 forms authentication validation ajax codeigniter
我在 codeigniter 站点的萤火虫中遇到此错误无法访问与我搜索过的字段名称密码相对应的错误消息,发现在代码中出现错误时会弹出错误,但没有任何问题与我的一样. 你能帮忙吗 ?
登录控制器
function do_login()
{
$username = $this->input->post('username');
$password = $this->input->post('password');
if(!empty($username) && isset($username))
{
$this->form_validation->set_rules(
'username', 'Your Username',
'trim|required|xss_clean|max_length[20]|callback_username_check');
$this->form_validation->set_rules('password', 'Password','trim|required||xss_clean|callback_password_check['.$username.']|min_length[4]|max_length[20]');
if($this->form_validation->run() == FALSE)
{
echo json_encode(array('st'=>0, 'msg' => validation_errors()));
}
else if(($this->form_validation->run() == TRUE))
{
echo json_encode(array('st'=>1));
}
function username_check($username)
{
$this->form_validation->set_message('username_check', ' is not regesterd!');
$checkVar=$this->user_model->check_user($username);
if($checkVar == true)
{return TRUE;}
elseif ($checkVar == false)
{return false;}
}
function password_check($username,$password)
{
$this->form_validation->set_message('password_check', ' is not correct!');
$checkVar = $this->user_model->check_pass($username,$password);
if($checkVar == true)
{return TRUE;}
elseif ($checkVar == false)
{return false;
}}}}
Run Code Online (Sandbox Code Playgroud)
用户模型
public function check_user($username)
{
$this->query = $this->db->select('COUNT(*)')
->from('users')
->where(array('username'=>$username))
->limit(1)->get();
$query = $this->query->num_rows();
if ($query> 0){
return true;
}
else{
return false;
}
}
public function check_pass($username, $password)
{
$this->query = $this->db->select('COUNT(*)')
->from('users')
->where(array('username'=>$username, $password))
->limit(1)->get();
$query = $this->query->num_rows();
if ($query> 0){
return true;
}
else{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
阿贾克斯
<script type="text/javascript">
$(document).ready(function() {
$('#frm').submit(function(){
$.post(
$('#frm').attr('action'),
$('#frm').serialize(),
function( data )
{
if (data.st == 0)
{
$('#validation-error').html(data.msg);
}
else if(data.st == 1)
{ var url = "home/"
window.location.href = url;
}
},
'json'
);
return false;
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
形式
<?php echo form_open('signin/do_login', array('id'=>'frm')); ?>
<input type="text" id='username' name="username" size="15" placeholder="??? ????????">
<input type="password" id="password" name="password" size="15" placeholder="???? ??????" >
<div id="validation-error"></div>
<input type='submit' value="????? ??????">
</form>
Run Code Online (Sandbox Code Playgroud)
搜索和调试后我发现问题出在这一行
$this->form_validation->set_rules('password', 'Password','trim|required||xss_clean|callback_password_check['.$username.']|min_length[4]|max_length[20]');
Run Code Online (Sandbox Code Playgroud)
它应该是
$this->form_validation->set_rules('password', 'Password','trim|required|xss_clean|callback_password_check['.$username.']|min_length[4]|max_length[20]');
Run Code Online (Sandbox Code Playgroud)
问题是 required 和 xss clean 之间的“ | ” 谢谢