我是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()
有什么问题?
答案 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;
}
这应该有效。记得以某种方式调用帖子在模型中不起作用。我完全不知道他们的理由。