Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter-对非对象调用成员函数select()_Php_Codeigniter - Fatal编程技术网

Php CodeIgniter-对非对象调用成员函数select()

Php CodeIgniter-对非对象调用成员函数select(),php,codeigniter,Php,Codeigniter,我对CodeIgniter是个新手。这是我的代码: class User_model extends CI_Model { function validate_user() { $this->db->select('*'); $this->db->from('user'); $this->db->where('username', $this->input->post('username'

我对CodeIgniter是个新手。这是我的代码:

class User_model extends CI_Model {

    function validate_user() {

        $this->db->select('*');
        $this->db->from('user');
        $this->db->where('username', $this->input->post('username'));
        $this->db->where('password', md5($this->input->post('password')));
        $validate_user = $this->db->get();

        if($validate_user->num_rows == 1) {
            return TRUE;
        }
    }
}
我在,在我的模型文件中收到此错误:

Call to a member function select() on a non-object

目前我使用的是CodeIgniter版本2.1.0。请帮帮我

num_rows
是一个函数,因此需要添加
()

另外,您是否正在调用构造函数中的父类构造函数

class User_model extends CI_Model {

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

我认为您必须加载“数据库”库。第一种方法是在应用程序/config/autoload.php中包含“数据库”

$autoload['libraries'] = array('database', 'session');
或者在类构造函数中:

class User_model extends CI_Model { 

     public function __construct() 
     {
           parent::__construct(); 
           $this->load->database();
     }
}

您可以在这里获得更多信息:

看起来您没有坚持MVC模式。您应该从视图->控制器->模型传递数据

至于向数据库发送信息,我非常确定CI处理xss和过滤器输入,但您永远无法确定

还要确保在config/autoload.php文件中加载模型,或者在controller\uuu construct()函数中启动模型

例如,在我的登录视图中,我会让CI创建所需的字段

<?php 
    echo form_open('admin');
    echo form_label('Username:', 'username');
    echo form_input('username', 'name');
    echo form_label('Password:', 'password');
    echo form_password('password');
    echo form_submit('submit', 'Login', 'id="loginBtn"'); ?>
    echo form_close(); 
?>

噢,db对象似乎没有初始化。你在调用构造函数中的父类构造函数吗?不。我没有在我的代码中调用任何构造函数。即使我放置了_construct()函数,错误仍然存在,表示“致命错误:在C:\AppServ\www\ci\application\models\user_model.php的第14行对非对象调用成员函数where()”问题已解决!我只是在autoload.php文件中添加了单词“database”$自动加载['libraries']=array('database');为了清楚起见,除非重写子类中的_construct()函数,否则将始终调用父构造函数。在这种情况下,需要显式调用父级的构造函数,父级::u construct();要更新我的答案,您可能应该使用sha256和salt+密码哈希,因为md5不再被视为最佳实践。在搜索此特定错误时,这是一个非常有用的线程,在搜索结果中显示得很高。请不要这么快哭了。
<?php
    class User extends CI_Controller
    {
        public __construct()
        {
            parent::__construct();
            $this->load->model('User_model');
        }
    }
$autoload['model'] = array('User_model');
<?php 
    echo form_open('admin');
    echo form_label('Username:', 'username');
    echo form_input('username', 'name');
    echo form_label('Password:', 'password');
    echo form_password('password');
    echo form_submit('submit', 'Login', 'id="loginBtn"'); ?>
    echo form_close(); 
?>
<?php
class User extends CI_Controller
{

    public function index()
    {

        $this->load->model('User_model');
        $result = $this
                    ->user_model
                    ->index(
                        $this->input->post('username'),
                        $this->input->post('password'));
    }

}
?>
<?php

class User_model extends CI_Model
{


    function index($username, $password)
    {
        $q = $this
                ->db
                ->where('username', $username)
                ->where('password', md5($password))
                ->limit(1)
                ->get('user');

        if ($q->num_rows() > 0) {
            return $q->row();
        }
    }
}