2013-02-21 86 views
-2

感謝@Mischa幫助我解決問題。將數據傳遞給CI模型

答:

型號:

function validate_login($username, $password) { 
     $bcrypt = new Bcrypt(17); 

     $sql = "SELECT * FROM users WHERE username = ? "; 
     $loginQ = $this -> db -> query ($sql, array($username)); 
     $database = $loginQ->row(); 

     $hash = $database->password; 
     if ($bcrypt -> verify($password, $hash)){ 
      return $loginQ; 
     } 
    } 

控制器:

function validate_credentials() { 
     $this -> load -> library('form_validation'); 
     $this -> load -> library('bcrypt'); 

     $this -> form_validation -> set_rules('username', 'Username', 'required|alpha_numeric|min_length[4]|max_length[15]'); 
     $this -> form_validation -> set_rules('password', 'Password', 'required|min_length[7]|alpha_dash|max_length[20]'); 

     if ($this -> form_validation -> run() == FALSE) { 
      $this -> index(); 
     } else { 
      $this -> load -> library('bcrypt');  
      $this -> load -> model('login_model'); 

      $username = $this -> input -> post('username'); 
      $password= $this -> input -> post('password'); 

      if ($loginQ = $this -> login_model -> validate_login($username, $password)) { 
       if ($activated = $this -> login_model -> activated($username)) { 
        $session_array = array('username' => $this -> input -> post('username'), 'loggedin' => TRUE); 
        $this -> session -> set_userdata($session_array); 
        redirect('staff_controller/index'); 
       } else { 
        $this -> session -> sess_destroy(); 
        $this -> load -> view('accessdenied_view'); 
        $this -> output -> _display(); 
        die(); 
       } 
      } else { 
       $this -> index(); 
      } 
     } 
    } 
+0

什麼你想只做傳遞數據時的觀點的作品。 – Mischa 2013-02-21 14:06:04

+0

但是當我print_r($ data);在模型中,我得到一組數據(我的用戶名和密碼) – RaGe10940 2013-02-21 14:07:28

+0

是的,但是你的模型中沒有使用'$ data'。你正在使用'$ username'和'$ password',這些都是未定義的。在您的模型中傳遞'$ username'和'$ password' *到*您的模型或者使用'$ data ['username']'和'$ data ['password']'* *。不是像你現在這樣做的組合。 – Mischa 2013-02-21 14:10:13

回答

1

什麼你想只做傳遞數據時的觀點的作品。你只需要將單獨的變量傳遞給你的模型。類似這樣的:

function validate_login($username, $password) { 
    $bcrypt = new Bcrypt(17); 

    $sql = "SELECT * FROM users WHERE username = ? LIMIT ? "; 
    $loginQ = $this -> db -> query ($sql, array($username, 1)); 
    $row = $loginQ->result(); 

    $hash = $row['password']; 
    if ($brcrypt -> verify($password, $hash)){ 
    return $loginQ; 
    } 
} 

當然這意味着你也必須改變你的控制器代碼來分別傳遞這些變量。

另一種選擇是在你的模型中使用$date['username']$data['password'],但我不會推薦這樣做,因爲它會讓你的代碼難以閱讀。

更新,以使其更清晰:

控制器:

$username = $this->input->post('username'); 
$password = $this->input->post('password'); 
$this->login_model->validate_login($username, $password); 

型號:

function validate_login($username, $password) { 
    // Etc. 
} 
+0

還是什麼都沒有,我更新了原帖。 – RaGe10940 2013-02-21 14:16:26

+0

你還必須更換你的控制器。不要這樣做:'$ this-> login_model-> validate_login($ data)',但是分別向模型傳遞用戶名和密碼。我試圖解釋你做錯了什麼。不要只複製/粘貼我的代碼。請嘗試瞭解我想告訴你的內容。另請參閱我上面的評論。 – Mischa 2013-02-21 14:18:52

+0

我仍然收到錯誤,原始帖子已更新。 – RaGe10940 2013-02-21 14:28:23