2013-02-14 66 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');