2013-02-14 83 views
1

我正在使用代码点火器登录表单。我能得到的形式显示正常的,但是当我点击登录我得到显示以下错误:CodeIgniter PHP错误登录表单

A PHP Error was encountered 

Severity: Notice 

Message: Undefined property: CI_DB_mysql_driver::$query 

Filename: models/membership_model.php 

Line Number: 8 

这为m membership_model.php文件

class Membership_model extends CI_Model{ 

    function validate(){ 
     $this->db->where('username', $this->input->post('username')); 
     $this->db->where('password', md5($this->input->post('password'))); 
     $this->$query = $this->db->query->get('members'); 

     if($query->num_rows != 0){ 
      return true; 
     } 
    } 

} 

这是我的login.php文件,该文件是我的主要控制者。

class Login extends CI_CONTROLLER{ 


function index() 
{ 
    $data['main_content'] = 'login_form'; 
    $this->load->view('includes/template', $data); 
} 

function validate_credentials() 
{ 
    //load model to query db 
    $this->load->model('membership_model'); 
    $query = $this->membership_model->validate(); 

    if($query){ //if credentials validated 
     $data = array(
      'username' => $this->input->post('username'), 
      'is_logged_in' => true 

      ); 

      $this ->session->set_userdata($data); 
      redirect('site/members_area'); 
    } 

    else{ //if not validated load login form again. 
     $this->index(); 

    } 

} 

这是错误消息的屏幕截图我正在

screen showing error message

任何想法可能是想错了?我没有线索!我在网上看过,但似乎没有任何帮助。有没有人遇到过这个问题。我一直在关注这个教程视频,但它使用的是代码点火器的老版本,所以我一直在进行更改。

http://www.youtube.com/watch?v=-fLtTRYQX0M http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-day-6-login/

+0

您是否启用活动记录? – 2013-02-14 00:37:48

+0

我不这么认为,我会在配置文件中发现吗? – Javacadabra 2013-02-14 00:39:03

+0

它在你的'application/database.php'文件中,应该是这个'$ active_record = TRUE;'这也是你第一次在你的应用程序中进行数据库查询,因为你以前能够成功连接并检索数据? – 2013-02-14 00:43:50

回答

1
function validate(){ 
    $this->db->where('username', $this->input->post('username')); 
    $this->db->where('password', md5($this->input->post('password'))); 
    $this->$query = $this->db->query->get('members'); 

    if($query->num_rows != 0){ 
     return true; 
    } 
} 

应该是:

function validate() 
{ 
    $array = array(
     'username' => $this->input->post('username'), 
     'password' => md5($this->input->post('password'))); 
    $query = $this->db->get_where('members', $array); 
    if ($query->num_rows() > 0) 
    { 
     return true; 
    } 
} 

注:get_where()可如果你正在使用CI

的旧版本被称为 getwhere()

顺便说一句,你不应该使用MD5来散列你的密码。你应该使用BCrypt,因为MD5是不安全的。

+0

我改变了你的建议,但无济于事。我确实看到这是如何导致问题。我粗心大意。我发布了另一个问题,这在某种程度上与我的问题有关,因为现在上述问题没有被看到...... http:// stackoverflow。com/questions/14866158/codeigniter-404-bad-request-error#comment20840624_14866158 – Javacadabra 2013-02-14 01:12:08

+0

您可以使用'get_where()'方法。我会重做你的代码来使用它。 – 2013-02-14 01:14:13

+0

请参阅我的编辑。 – 2013-02-14 01:18:30

0

首先显而易见的是,你正在加载数据库库吗?

二,你为什么在query()后追加get()?

$this->db->query->get('members'); 

查询()是一个独立的函数,其示例表示,它应该这样来使用:

$query = $this->db->query('YOUR QUERY HERE'); 

而得到()是活性记录的一部分。

$query = $this->db->get('mytable'); 

或在您的情况:

$query = $this->db->get('members');