2013-01-31 55 views
0

我正在使用codeigniter框架。我有一個登錄模型和一個帶有視圖的控制器。我有admin用戶名和管理員密碼在我的db用戶表中設置用於測試目的。 但是,當我使用admin13356或admindsgsd或adminWHATEVER和admin作爲密碼時,登錄成功。我不明白爲什麼。Codeigniter在登錄控制器上給出不尋常的結果

我的控制器功能如下。

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

     } 
+2

的代碼看起來不錯,但我會從模型中取出後的數據變量,而不是在控制器創建變量,並通過他們作爲你的'validate()'函數的參數。 – Jeemusu

回答

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

多少記錄你有在

試試這個代碼

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的功能

相關問題