我正在使用Codeigniter&amp ;;构建Ajax登录Jquery ...我在回复“无效登录”消息时遇到了一个小问题,而且它让我烦恼。
在登录页面上我有:
$(document).keypress(function (e) {
if (e.which == 13) {
var login = $("#login").val();
var pass = $("#pass").val();
$('#login-block').removeBlockMessages().blockMessage('Please wait, cheking login...', {
type: 'loading'
});
$.post("<?php echo base_url(); ?>index.php/login/validate_credentials/", {
username: login,
password: pass
}, function (data) {
if (data.error) {
$('#login-block').removeBlockMessages().blockMessage(data.message, {
type: 'error'
});
} else {
document.location.href = data.redirect;
}
}, "json");
}
});
validate()
函数只是在数据库中查询用户名和密码匹配,如果num_rows = 1则返回用户数据。
尝试登录时所有这一切都正常,但当我输入不存在的用户名时,我不会收到“错误登录”错误...
如果我使用真实用户名和假密码,我会收到错误。
如果用户名和密码正确,则登录确定。
我只是不明白为什么当用户名不存在时它不会显示和错误?
修改
这是模型中的Validate()函数。
function validate() {
// CHECK LOGIN DETAILS
$this->db-> select('first_name,last_name,usertype,id,products,mac');
$this->db-> where('username', $this->input->post('username'));
$this->db-> where('password', md5($this->input->post('password')));
$query = $this->db->get('membership');
if ($query->num_rows() > 0) {
$data = array('usertype' => $row->usertype, 'userid' => $row->id, 'first_name' => $row->first_name, 'last_name' => $row->last_name, 'products' => $row->products, 'mac' = > $row->mac);
return $data;
}
}
答案 0 :(得分:0)
if(data.error){
$('#login-block').html('<p>'+data.message+'</p>);
} else {
document.location.href = data.redirect;
}
试试。
if($query->num_rows()==1)
{
$data2 = array(
'error' => false,
'redirect' => base_url().'index.php/site/home/'
);
好的,我知道那是怎么回事?在登录时,你应该总是检查num_rows = 1,不应该多于一个。
答案 1 :(得分:0)
用
修正了它$.getJSON('<?php echo base_url(); ?>index.php/login/validate_credentials/',{username: login, password: pass}, function(data) {
if(data.error){
$('#login-block').removeBlockMessages().blockMessage(data.message, {type: 'error'});
} else {
document.location.href = data.redirect;
}
});
我需要使用getJSON而不是post。 我不得不更新模型函数以使用get而不是post变量。 它现在按照我的希望工作。