【发布时间】:2015-06-15 11:39:54
【问题描述】:
我在一个 codeigniter 站点的 firebug 中遇到了这个错误 无法访问与您的字段名称密码对应的错误消息 我已经搜索过,发现代码中有错误时会弹出错误,但没有一个问题像我的那样。 你能帮忙吗?
登录控制器
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;
}}}}
user_model
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;
}
}
ajax
<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>
表格
<?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>
【问题讨论】:
-
两个
username提交在您的表单中 -
在您的 html 中,您有两个输入具有相同的 name="username" 和 id="username"。
-
验证 2 个表单元素“用户名”,让我看看目前的情况。
-
您使用的是什么版本的 codeigniter?我问是因为
xss_clean在 v3 的表单验证中不可用。 -
一个额外的管道
|在需要之后(不是问题)和缺少右括号callback_password_check['.$username.'|(可能肯定是问题)@HeshamWatany
标签: ajax forms codeigniter validation authentication