2012-03-06 88 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 
}