2014-10-09 2 views
0

обе переменные не определены ($ и $ Новичок senha) :(Неопределенная переменная [CodeIgniter]

этот код 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

+0

Чтобы форматировать код, выделите блок и нажмите '{}' (* не * кнопка '' ''). –

+0

Вам необходимо передать '$ usuario' и' $ senha' функции 'login()' в качестве параметров. –

ответ

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

Это даст вам более безопасные запросы с экранированными пользовательскими значениями.