未定义的变量[CodeIgniter]

时间:2014-10-09 19:33:59

标签: php codeigniter

两个变量都是未定义的($ usuario和$ senha):(

此代码用于登录,但模型未接收变量

控制器

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

1 个答案:

答案 0 :(得分: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;
}

这将为您提供包含转义用户值的更安全的查询。