1

我正在使用代码点火器处理登录表单。我可以让表单正常显示,但是当我单击登录时,我会显示以下错误:

A PHP Error was encountered

Severity: Notice

Message: Undefined property: CI_DB_mysql_driver::$query

Filename: models/membership_model.php

Line Number: 8

这是 m members_model.php 文件

    class Membership_model extends CI_Model{

    function validate(){
        $this->db->where('username', $this->input->post('username'));
        $this->db->where('password', md5($this->input->post('password')));
        $this->$query = $this->db->query->get('members');

        if($query->num_rows != 0){
            return true;
        }
    }

}

这是我的 login.php 文件,它是我的主控制器。

class Login extends CI_CONTROLLER{


function index()
{
    $data['main_content'] = 'login_form';
    $this->load->view('includes/template', $data);
}

function validate_credentials()
{
    //load model to query db
    $this->load->model('membership_model');
    $query = $this->membership_model->validate();

    if($query){ //if credentials validated
        $data = array(
            'username' => $this->input->post('username'),
            'is_logged_in' => true

            );

            $this ->session->set_userdata($data);
            redirect('site/members_area');
    }

    else{ //if not validated load login form again.
        $this->index();

    }

}

这是我收到的错误消息的屏幕截图

显示错误信息的屏幕

有什么想法可能会出错吗?我一点头绪都没有!我在互联网上看过,但似乎没有任何帮助。有没有人遇到过这个问题。我一直在关注这个教程视频,但它使用的是旧版本的代码点火器,所以我一直在进行更改。

http://www.youtube.com/watch?v=-fLtTRYQX0M http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-day-6-login/

4

2 回答 2

1
function validate(){
    $this->db->where('username', $this->input->post('username'));
    $this->db->where('password', md5($this->input->post('password')));
    $this->$query = $this->db->query->get('members');

    if($query->num_rows != 0){
        return true;
    }
}

应该:

function validate()
{
    $array = array(
        'username' => $this->input->post('username'), 
        'password' => md5($this->input->post('password')));
    $query = $this->db->get_where('members', $array); 
    if ($query->num_rows() > 0)
    {
        return true;
    }
}

注意:如果您使用的是旧版本的 CI,get_where()可能会调用getwhere()

顺便说一句,您不应该使用 MD5 来散列您的密码。您应该使用 BCrypt,因为 MD5 不安全。

于 2013-02-14T01:08:16.233 回答
0

首先很明显,您是否正在加载数据库库?

其次,为什么要在 query() 之后附加 get()?

IE

$this->db->query->get('members');

query() 是一个独立函数,其示例表明它应该像这样使用:

$query = $this->db->query('YOUR QUERY HERE');

而 get() 是活动记录的一部分。

$query = $this->db->get('mytable');

或者在你的情况下:

$query = $this->db->get('members');
于 2013-02-20T01:17:42.400 回答