Проблема с отправкой страницы с использованием AJAX в PHP - PullRequest
0 голосов
/ 28 ноября 2011

У меня есть приложение 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/" - путь к функции на странице контроллера.

Это код на странице контроллера

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";     
        }

    }

Но когда я нажимаю на кнопку входа в систему, ничего не происходит (вызывается click_next () и задается admin, admin в качестве имени пользователя, пароля). В чем причина? Это работает на нашем сервере, но не работает на клиентском сервере?

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

Поскольку вы отправляете сообщение в метод контроллера, я бы рекомендовал захватить переменные 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 () модели.

0 голосов
/ 28 ноября 2011

Вы не обрабатываете случай, когда при вызове ajax возвращается "неверное имя пользователя", и просто молча терпите неудачу.

Ваш if (msg == 1) должен как минимум иметь предложение else:

if(msg==1){
           window.location="<?php echo base_url();?>index.php/admin/adminHome/";
} else {
   alert(msg);
}

и функция входа на стороне сервера должна как минимум проверять, что имя пользователя и пароль были переданы, а не просто пропущены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...