我有一个codeigniter应用程序。这是我在视图页面中的代码。
function click_next(){
var aname = $("#txtuname").val();
var apasswd = $("#txtupass").val();
if(aname == ''){
$("#error_val").css("display","block")
$("#error_val").html("user name required");
});
}else if(apasswd == ''){
$("#error_val").css("display","block")
$("#error_val").html("password required");
}else{
var cnt=$("#alogin").serialize();
$.ajax({
type: "POST",
url: "<?php echo base_url();?>index.php/admin/adminLogin/",
data: cnt,
success: function(msg){
if(msg==1){
window.location="<?php echo base_url();?>index.php/admin/adminHome/";
}
else{
$("#error_val").css("display","block")
$("#error_val").html(msg);
return false;
}
}
});
}
}
此处alogin
是表单的名称,url: "<?php echo base_url();?>index.php/admin/adminLogin/"
是控制器页面中的函数路径。
这是Controller页面中的代码
function adminLogin(){
$this->adminmodel->admin_login();
}
这是模型页面中的代码
function admin_login(){
$adminname=$this->input->post('txtuname');
$adminpass=$this->input->post('txtupass');
$adminp_decr=md5($adminpass);
$this->db->where('varuname',$adminname);
$this->db->where('varpassword',$adminp_decr);
$query = $this->db->get('tbladmin');
$row=$query->row();
if($row==TRUE){
$adminname=$row->varuname;
$id=$row->intaid;
$userdata = array(
'ausername=' =>$adminname,
'aid' => $id,
'logged_in' => TRUE
);
$this->session->set_userdata($userdata);
echo 1;
}
else
{
echo "Invalid user name or password";
}
}
但是当我点击Login buttton时,什么都不会发生(click_next()被调用并给予admin,admin作为用户名,密码)。原因是什么?这在我们的服务器上工作但是在客户端的服务器上没有工作?
答案 0 :(得分:1)
由于您要发布到控制器方法,我建议在该方法中获取POST变量并通过参数将它们传递给模型函数。根据MVC,控制器应该使用POST变量而不是模型。
试试这个:
function adminLogin(){
$adminname=$this->input->post('txtuname');
$adminpass=$this->input->post('txtupass');
if (strlen($adminname) > 0 && strlen($adminpass) > 0)
echo $this->adminmodel->admin_login($adminname, $adminpass);
else
echo "you didn't enter anything.... duh.";
}
function admin_login($adminname="", $adminpass=""){
$adminp_decr=md5($adminpass);
$this->db->where('varuname',$adminname);
$this->db->where('varpassword',$adminp_decr);
$query = $this->db->get('tbladmin');
$row=$query->row();
if($row==TRUE){
$adminname=$row->varuname;
$id=$row->intaid;
$userdata = array(
'ausername=' =>$adminname,
'aid' => $id,
'logged_in' => TRUE
);
$this->session->set_userdata($userdata);
return 1;
}
else
{
return "Invalid user name or password";
}
}
这是一个小改动,但代码更多地遵循MVC原则。另外,我怀疑你的POST变量可能没有超过对模型的admin_login()方法的调用。
答案 1 :(得分:0)
您不会处理ajax调用返回“invalid username”并且无声地失败的情况。
您的if (msg == 1)
至少应该有一个else
条款:
if(msg==1){
window.location="<?php echo base_url();?>index.php/admin/adminHome/";
} else {
alert(msg);
}
并且服务器端登录功能至少应检查是否已传入用户名和密码,而不仅仅是空白。