2012-03-06 82 views
1

新的堆棧溢出(和codeigniter!),我在我的第一個項目上遇到這個問題,自然...我敢肯定它是我的一個笨蛋錯誤,但我一直在研究,並試圖找出過去的幾個小時,我貓似乎想通了......Codeigniter活動記錄致命錯誤

我有數據庫庫自動加載,但每次我嘗試使用我的模型中的方法我得到這個錯誤:

「致命錯誤:調用一個成員函數,其中()的非對象在應用\模型\上線13 user_model.php上」

這是我的用戶控制器的方法通過表單的動作從我的登錄表單視圖叫:

function login() { 
    $this->load->model('user_model'); 
    $query = $this->user_model->validate(); 

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

     $this->session->set_userdata($data); 
     redirect('members'); 
    } 
    else 
    { 
     $this->load->view('user'); 
    } 

} // end login function 

這是我的模型:

<?php 

class User_model extends CI_Model { 

function __construct() { 
    parent::__construct(); 
} 

// ------------------------------------------------------------------------------- 

// validate(): query db for user/pass and return true or false 
function validate() { 
    $this->db->where('username', $this->input->post('username')); 
    $this->db->where('password', sha1($this->input->post('password'))); 
    $query = $this->db->get('users'); 

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

} // end validate function 

// ------------------------------------------------------------------------------- 

function check() 
{ 
    $dbo = $this->load->database('default',TRUE); 
    $query = $this->$dbo->get('users'); 
    echo $query->num_rows(); 
} 

} // end user_model class 

,當我試圖調試的問題,我加入了數據庫的方法來控制和他們的工作罰款......在我的模型中使用它們時,他們不想因爲任何原因而工作,並拋出我提到的致命錯誤。感謝任何幫助你們拋棄我的方式。

在此先感謝!

(使用笨2.1)

編輯:

只是爲了澄清一些事情有點多,當我添加validate方法(從我的模型),以我的控制,我沒有得到任何錯誤,一切正常。但在模型離開它時,從控制器調用它,我得到了致命的錯誤

+1

你絕對確保數據庫庫加載?要自動加載需要編輯'application/config/autoload.php'的庫,並在相應的數組中添加需要自動加載的內容。 – afarazit 2012-03-06 13:55:00

+0

正面...不確定它是什麼,但我做了一些四處搜尋,發現其他人有同樣的問題。全新安裝的CodeIgniter具有相同的確切代碼和文件,問題消失了......奇怪...一直在CodeIgniter會話類中出現問題,必須將其切換爲讓會話爲我工作。毋庸置疑,幾天我的頭髮拉出,我終於進步:) – newguy13 2012-03-11 06:04:11

回答

0

你錯過了$查詢=部分,應該是:

 

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

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

 

編輯: 我想你還沒有加入所有的父類的構造,嘗試:

 

class Users extends CI_Model { 

function __Users() { 

    parent::__CI_Model(); 

    $this->load->database(); 

} 

 
+0

對不起,我忘了補充說,當我的代碼添加到問題。它在實際的代碼中,但是我得到的錯誤是在第13行的where()方法上。 – newguy13 2012-03-06 04:49:42

+0

檢查您的測試函數是否工作,請參閱編輯的答案 – 2012-03-06 05:04:14

+0

向user_model添加了check()並從用戶控制器調用它,出現此錯誤:致命錯誤:調用應用程序\ models \ user_model.php中的非對象上的成員函數database()。正如我前面提到的,放在控制器時,該數據庫方法做工精細,但當我嘗試在我的方法,我不斷收到這些致命錯誤使用它們......奇怪 – newguy13 2012-03-06 05:07:04

0

我想在你的模型功能驗證應該是這樣的

// validate(): query db for user/pass and return true or false 

function validate($username,$password) { 

    $this->db->where('username', $username); 
    $this->db->where('password', sha1($password)); 
    $query = $this->db->get('users'); 

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

} // end validate function 

在你的控制器,你可以把它像這樣

function login() 
{ 

$query =$this->user_model->validate($this->input->post('username'),$this->input->post('password')); 

    // the rest 
}