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(){
           // 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 に答える
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;
            }

        }

usernameあなたとpasswordを関数に渡します

于 2013-02-01T04:28:42.057 に答える
0

どのバージョンのPHPを実行していますか?PHPで問題が発生したことがありますが、PHPが非リターンに対してTRUEを返します。

return falsevalidate()メソッドに追加してみてください。

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 に答える