代码点火器在登录控制器上给出异常结果


Codeigniter giving unusual results on login controller

我正在使用codeigniter框架。我有一个登录模型和一个带有视图的控制器。我将管理员作为用户名,将管理员设置为密码,在我的数据库的用户表中设置用于测试目的。但是当我使用 admin13356 或 admindsgsd 或 adminWHATEVER 将 admin 作为密码时,登录成功。我不明白为什么。

我的控制器功能如下。

function check(){
        $this->load->model('loginModel');
        $query = $this->loginModel->validate();
        if($query){
            $data = array('username' => $this->input->post('username'),
                           'is_logged_in' => true
                        );
            $this->session->set_userdata($data);
            //redirecting to appropriate page 
            redirect('success');
        }else{
            $this->session->set_flashdata('loginCheck','Username/Password Comination Incorrect!');
            redirect('login');
        }
    }

我的模型如下。

function validate(){
            $this->db->where('username', $this->input->post('username'));
            $this->db->where('password', md5($this->input->post('password')));
            $query = $this->db->get('users');
            if($query->num_rows() == 1){
                return true;
            }
        }
function validate(){
           // dump all post variables recieved
           echo '<pre>';
           print_r($this->input->post());                
           echo '</pre><br>';    
            $this->db->where('username', $this->input->post('username'));
            $this->db->where('password', md5($this->input->post('password')));
            $query = $this->db->get('users');
           // Dump what the query result is
           echo '<br><pre>';
           print_r($query->result());                
           echo '</pre>';
            //if($query->num_rows() == 1){
            //    return true;
            //}
        }

您的代码似乎很好,但是您可以检查它是否正确传递了正确的数据吗,请先尝试转储它。 就像上面的代码一样检查数据和查询结果。

表中有多少条记录

试试这个代码

function validate($username,$password){
            $this->select('*');
            $this->from('table_name');
            $this->db->where('username', $username);
            $this->db->where('password', md5($password));
            $query = $this->db->get();
            if($query->num_rows() == 1){
                return true;
            }
        }

usernamepassword传递给函数

您运行的是什么版本的 PHP?我之前遇到过 PHP 问题,它为非返回返回 TRUE。

尝试将return false添加到 validate() 方法中:

function validate(){
    $this->db->where('username', $this->input->post('username'));
    $this->db->where('password', md5($this->input->post('password')));
    $query = $this->db->get('users');
    if($query->num_rows() == 1){
        return true;
    }
    return false;
}

此外,模型应该是与输入无关的。一定要考虑将$this->input->post()移动到控制器并将值作为参数传递:

这允许您在其他方案中使用 validate() 方法。例如(当用户名不是通过邮寄而是通过会话提供时,重新验证密码)。

控制器

function check(){
    $this->load->model('loginModel');
    $query = $this->loginModel->validate($this->input->post('username'), $this->input->post('password'));
    if($query){
        $data = array(
           'username' => $this->input->post('username'),
           'is_logged_in' => true
        );
        $this->session->set_userdata($data);
        //redirecting to appropriate page 
        redirect('success');
    }else{
        $this->session->set_flashdata('loginCheck', 'Username/Password Combination Incorrect!');
        redirect('login');
    }
}

function validate($username, $password){
    $this->db->where('username', $username);
    $this->db->where('password', md5($password));
    $query = $this->db->get('users');
    if($query->num_rows() == 1){
        return true;
    }
    return false;
}