Codeigniter在登录控制器上给出异常结果

时间:2013-01-31 23:49:19

标签: php codeigniter

我正在使用codeigniter框架。我有一个登录模型和一个带视图的控制器。我在我的数据库的users表中设置了admin作为用户名和admin作为密码进行测试。 但是,当我使用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;
            }

        }

3 个答案:

答案 0 :(得分:1)

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

        }

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

答案 1 :(得分:1)

您在

中有多少条记录

试试这段代码

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传递给函数

答案 2 :(得分:0)

您运行的是哪个版本的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;
}