我是 codeigniter 的新手,我使用的是 3.1.5 版本。下面是我的用户登录功能。
class Auth extends CI_Controller
{
public function login()
{
// Load Login View
$this->load->view('login');
// validate form
$this->form_validation->set_rules('username','Username','required');
$this->form_validation->set_rules('password','Password','required|min_length[5]');
if($this->form_validation->run()== true){
$username = $_POST['username'];
$password = $_POST['password'];
// check user in database
$this->db->select("*");
$this->db->from("users");
$this->db->where(array("username"=>$username,"password"=>$password));
$query = $this->db->get();
$user_data = $query->row();
// check if user exists or not
if($user_data->username){
// show temporary success message
$this->session->set_flashdata("success","User successfully logged in");
// set temporary sesstion variables
$_SESSION['user_logged'] = TRUE;
$_SESSION['username'] = $user_data->username;
}else{
$this->session->set_flashdata("error","Invalid username, user not exist");
}
}
}
当我提供用户凭据(例如用户名和密码)时,我收到以下错误并且无法解决此问题。
Severity: Notice
Message: Trying to get property of non-object
Filename: controllers/Auth.php
Line Number: 29
Backtrace:
File: D:\xampp\htdocs\ci315\application\controllers\Auth.php
Line: 29
Function: _error_handler
File: D:\xampp\htdocs\ci315\index.php
Line: 315
Function: require_once
第 29 行正是从这里开始
if($user_data->username){
// show temporary success message
$this->session->set_flashdata("success","User successfully logged in");
// set temporary sesstion variables
$_SESSION['user_logged'] = TRUE;
$_SESSION['username'] = $user_data->username;
}else{
$this->session->set_flashdata("error","Invalid username, user not exist");
}
如果我评论上面的部分,那么就没有错误。请建议我哪里做错了。任何帮助将不胜感激,提前致谢。
最佳答案
使用下面的代码工作正常。使用 if($query->num_rows() > 0) 而不是 if($user_data->username) 和 $query->row()->username 而不是 $user_data->username
class Auth extends CI_Controller
{
public function login()
{
// Load Login View
$this->load->view('login');
// validate form
$this->form_validation->set_rules('username','Username','required');
$this->form_validation->set_rules('password','Password','required|min_length[5]');
if($this->form_validation->run()== true){
$username = $_POST['username'];
$password = $_POST['password'];
// check user in database
$this->db->select("*");
$this->db->from("users");
$this->db->where(array("username"=>$username,"password"=>$password));
$query = $this->db->get();
if($query->num_rows() > 0){
// show temporary success message
$this->session->set_flashdata("success","User successfully logged in");
// set temporary sesstion variables
$_SESSION['user_logged'] = TRUE;
$_SESSION['username'] = $query->row()->username;
}else{
$this->session->set_flashdata("error","Invalid username, user not exist");
}
}
}
}
关于php - Codeigniter错误选择查询无法检查用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49609997/