[英]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.