0

我正在使用 codeigniter 框架。我有一个登录模型和一个带有视图的控制器。为了测试目的,我在我的数据库的用户表中设置了 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;
            }

        }
4

3 回答 3

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

        }

将你的usernameand传递password给函数

于 2013-02-01T04:28:42.057 回答
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;
            //}

        }

您的代码看起来不错,但是您能否检查它是否正确传递了正确的数据,请先尝试转储它。像上面的代码来检查数据和查询结果。

于 2013-02-01T00:54:54.777 回答
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;
}
于 2013-02-01T10:51:59.687 回答