一切都很好,我没有改变任何代码,突然得到Undefined属性:stdClass :: $ id

时间:2017-08-15 20:38:20

标签: php codeigniter

我正在尝试登录我的网站,我在模型文件夹中使用CodeIgniter框架我创建了User_model.php,函数名为authenticate user,这就是代码:

public function authenticate_user($us, $pass){
    $query = $this->db->query("SELECT username, password FROM users WHERE username = '".$us."' AND  password = '".$pass."' LIMIT 1");
    return $query->row();
}

在控制器文件夹中,我创建了一个名为login的user.php 这是代码的一部分:

public function login(){

    if($_POST){
        $result = $this->user_model->authenticate_user($_POST['username'],$_POST['password']);

        // If the username and password found
        if(!empty($result)){
            // Set userdata
            $userdata = [       
                                    'id' => $result->id,
                'username' => $result->username,
                'password' => $result->password,
                'logged_in' => TRUE
            ];

错误在包含' id'的行中=> $ result-> id我不知道为什么它没有错误工作正常而且我没有改变任何东西突然它给了我那个错误

数据库包含一个名为users的表,其中包含3个属性id,它是自动递增的,用户名和密码就是这样的,就像网站在免费主机上的方式一样,当我尝试使用时,会给我这个错误登录。

任何帮助,请理解为什么我收到此错误。

error message

4 个答案:

答案 0 :(得分:4)

试试这个

$query = $this->db->query("SELECT id, username, password FROM users WHERE username = '".$us."' AND password = '".$pass."' LIMIT 1");

也许您忘记了ID列 希望这能帮助你:)

答案 1 :(得分:1)

这是因为您的查询中没有id字段。将您的authenticate_user方法更改为:

public function authenticate_user($us, $pass){
    // add id field
    $query = $this->db->query("SELECT id, username, password FROM users WHERE username = '".$us."' AND  password = '".$pass."' LIMIT 1");
    return $query->row();
}

答案 2 :(得分:1)

我不知道CodeIgniter是如何填充域对象的,但是你错过了SQL查询中的id字段

SELECT username, password FROM users WHERE username = '".$us."' AND  password = '".$pass."' LIMIT 1

您只是检索用户名和密码。获取id字段:

SELECT id, username, password FROM users WHERE username = '".$us."' AND  password = '".$pass."' LIMIT 1

答案 3 :(得分:1)

首先不要在数据库中存储计划密码,使用此方法创建密码

http://php.net/manual/en/function.password-hash.php

确保密码列varchar 255

http://php.net/manual/en/function.password-verify.php

  

而且我也不会在会话中输入密码。

<?php

class User extends CI_Controller {

public function login(){

   if($this->input->post()){

    if ($this->verifyPassword($this->input->post('password'), $this->input->post('username')))

        $userdata = $this->getUser($this->input->post('username'));


        if ($userdata)
        {
            $sessiondata = array(
                'username' => $userdata['username'],
                'id' => $userdata['id'],
                'logged_in' => true
            );

            $this->session->set_userdata($sessiondata);

             redirect(base_url('controllername'));

        }


   }

}

public function verifyPassword($password, $username)
{
    $stored_password = $this->getPassword($username);

    if (password_verify($password, $stored_password))
    {
        return TRUE;
    }

    return FALSE;
}

public function getPassword($username)
{
    $this->db->where('username', $username);
    $user_query = $this->db->get($this->db->dbprefix . 'user');
    if ($user_query->num_rows() == 1)
    {
        return $user_query->row()->password;
    }

    return false;
}

public function getUser($username)
{
    $this->db->where('username', $username);
    $user_query = $this->db->get($this->db->dbprefix . 'user');

    return $user_query->row_array();
}

}