2014-10-09 92 views
0

兩個變量是不確定的($ usuario和$ senha):(未定義變量[笨]

此代碼suposed做登錄,但該模型不接收變量

控制器

public function login(){ 

    $this->load->model('Usuario_model'); 
    $this->Usuario_model->usuario = $this->input->post('usuario'); 
    $this->Usuario_model->senha = sha1($this->input->post('senha')); 
    $dados = $this->Usuario_model->login(); 
    foreach($dados AS $row){ 
     $level = $row->level; 
     $usuario = $row->login; 
    } 
    if(($dados)){ 
     $newdata = array(
      'usuario' => "$usuario", 
      'level'  => $level, 
      'logged_in' => TRUE 
     ); 
     $this->session->set_userdata($newdata); 
     $session = $this->session->all_userdata(); 
     redirect("index.php/voe/index"); 
    } 
} 

型號

public function login(){ 

     $query = $this->db->query("SELECT * FROM usuario WHERE login = '$usuario' AND senha = '$senha'"); 
     $query = $query->result(); 
     return $query; 
    } 
+2

請確保[請閱讀變量範圍](http://php.net/manual/en/language.variables.scope.php) – sjagr 2014-10-09 19:36:25

+0

要格式化代碼,請突出顯示塊,然後單擊「{}按鈕(*不是*「」「'按鈕)。 – 2014-10-09 19:37:19

+0

您需要將'$ usuario'和'$ senha'作爲參數傳遞給'login()'函數。 – 2014-10-09 19:38:06

回答

2

有來自這兩條線的指示:

$this->Usuario_model->usuario = $this->input->post('usuario'); 
$this->Usuario_model->senha = sha1($this->input->post('senha')); 

存在的Usuario-model的內部變量您訪問和存儲,但login()功能正試圖訪問的功能,而不是模型的範圍的範圍內的變量。使用$this->將讓你的函數住在訪問私有,公共,或之類的保護變量確保你試試:

public function login(){ 
    $query = $this->db->query("SELECT * FROM usuario WHERE login = '".$this->usuario."' AND senha = '".$this->senha."'"); 
    $query = $query->result(); 
    return $query; 
} 

要使用PDO式的方法,as per the CI docs,則應該做的:

public function login() { 
    $query = $this->db->query(
     'SELECT * FROM usuario WHERE login = ? AND senha = ?', 
     array($this->usuario, $this->senha) 
    ) 
    $query = $query->result(); 
    return $query; 
} 

這會爲您提供更安全的查詢,其中包含轉義的用戶值。