CodeIgniter,在非对象上调用成员函数post()

时间:2013-12-23 15:05:26

标签: php codeigniter-2

我是CodeIgniter的新手(v.2.1.4)。从模型中获取帖子我有问题。

我有一个控制器:

class Login extends CI_Controller{

    public function index(){
        $data['main_view'] = 'login_form';
        $this->load->view('login/include/template', $data);
    }

    public function validate(){

        $this->load->library('form_validation');
        $this->form_validation->set_rules('user', 'Име', 'trim|required|min_length[3]');
        $this->form_validation->set_rules('pass', 'Парола', 'trim|required|min_length[4]');

        if($this->form_validation->run()){
            $this->load->model('users_model');

            if($this->users_model->validate_login($username, $password)){
                //valid user
            }
            else{
                //not vlaid user
            }
        }
        else{
            $this->index();
        }
    }
}

和模特:

class Users_model extends CI_Model{

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

    function validate_login(){
        $username = $this->input->post('user');
        $password = md5($this->input->post('pass'));

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

        if($query->num_rows() == 1){
            return TRUE;
        }
        else return FALSE; 
    }
}

当通过表单(post)发送有效对(用户名和密码)时没有任何反应,但是在apache2中会出现以下内容:

  

PHP致命错误:调用/var/www/ci/application/models/users_model.php中非对象的成员函数where()

有什么问题?

3 个答案:

答案 0 :(得分:3)

将构造函数添加到Login类

class Login extends CI_Controller {
    public function __construct() {
        parent::__construct();
    }
}

答案 1 :(得分:0)

您是否加载了数据库?您需要先加载数据库。

您可以将它添加到/config/autoload.php到自动加载数据库功能:

$autoload['libraries'] = array('database');

或按需拨打电话:

$this->load->database();

更多详情here

答案 2 :(得分:0)

不要在模型中使用post而是在像这样的控制器中使用它

controller login.php

public function validate(){
    $this->load->library('form_validation');
    $this->form_validation->set_rules('user', 'Име', 'trim|required|min_length[3]');
    $this->form_validation->set_rules('pass', 'Парола', 'trim|required|min_length[4]');

    if($this->form_validation->run()){
        $this->load->model('users_model');

        $post = $this->input->post();

        $data['username']   =   $post['username'];
        $data['password']   =   md5($post['password']);
        if($this->users_model->validate_login($data)){
            //valid user
        }else{
            //not vlaid user
        }
    }
    else{
        $this->index();
    }
}

模型

function validate_login($where){
    $this->db->where($where);
    $query = $this->db->get('users');

    if($query->num_rows() == 1){
        return TRUE;
    }
    return FALSE; 
}

这应该有效。记得以某种方式调用帖子在模型中不起作用。我完全不知道他们的理由。