繁体   English   中英

一切正常,我没有更改任何代码,突然得到Undefined属性:stdClass :: $ id

[英]Everything was working fine I didn't change any code and suddenly Getting Undefined property: stdClass::$id

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

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,并且它是自动递增的,用户名和密码就是它,通过网站位于免费主机上的方式,每次尝试登录时都会出现此错误。

任何帮助,请只是为了了解为什么我会收到此错误。

错误信息

尝试这个

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

也许您忘记了ID列,希望对您有所帮助:)

发生这种情况是因为查询中没有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();
}

我不知道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

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

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

确保密码列varchar 255

http://php.net/manual/zh/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();
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM