2012-03-06 11 views
1

私は最初のプロジェクトでこの問題にぶち当たっています。私は確かに骨折していますが、最後の数時間それを理解しようとしていて、私は猫がそれを理解しているようだ...Codeigniter Active Records致命的なエラー

私はデータベースライブラリを自動読み込みしているが、毎回私のモデルでメソッドを使用しようとするとこのエラーが出る:

「致命的なエラー:ライン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 

私は問題をデバッグしようとしていたとき、私は、コントローラにデシベルメソッドを追加し、彼らが働いていました彼らが私のモデルでそれらを使用するとき、私は言及した致命的なエラーをどんな理由でも働かせたくありません。あなたが私の道を捨てることができる助けを感謝してください。

ありがとうございます!

(使用してCodeIgniterの2.1)

EDIT:

ちょうど、私は私のコントローラに(私のモデルから)validateメソッドを追加すると、私はエラーを取得していない、より少し物事をクリアすると、すべてが正常に動作します...しかし、モデルでそれを残して、コントローラからそれを呼び出すときに、私はあなたが$クエリ=一部を逃した

+1

あなたは絶対にデータベースライブラリがロードされていることを確かめていますか?ライブラリを自動ロードするには、 'application/config/autoload.php'を編集して、適切な配列にオートロードする必要があるものを追加する必要があります。 – afarazit

+0

ポジティブ...それは何だったのか分かりませんが、私はいくつかの検索を行い、他の人々が同じ問題を抱えていることを発見しました。 CodeIgniterを同じコードとファイルで新しくインストールし、問題は消えました... Strange ... CodeIgniterセッションクラスにも問題があったので、セッションを取得して私のために働かせなければなりませんでした。言うまでもなく、私の髪を引っ張って数日後に私はついに進行しています:) – newguy13

答えて

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

+0

テスト関数が機能しているかどうかを確認してください。 –

+0

user_modelにcheck()を追加し、それをユーザコントローラから呼び出しました。このエラーが発生しました:致命的なエラー:アプリケーション\モデル\ user_model.php内の非オブジェクト上のメンバ関数データベース()を呼び出します。私が前に言及したように、dbメソッドはコントローラーに入れてもうまく動作しますが、私のメソッドでそれらを使用しようとすると、これらの致命的エラーが発生し続けます...奇妙な – newguy13

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 

ようにすべきだと思いますそのように呼び出す