php - Codeigniter错误选择查询无法检查用户输入

标签 php mysql codeigniter-3

我是 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/

相关文章:

php - 表单验证中的样式 CodeIgniter "human name"

php - SVN合并具有不同字符集的分支

PHP 数组输出带有逗号和 "or"

php - 将 MySQL SELECT 查询与 IF 语句结合起来

mysql - Rank() 超过 MySQL 中的分区依据

MySql 查询(连接)

php - Pico CMS 自定义 header

php - 在 PHP 中执行事务时遇到问题

php - 如何在 CodeIgniter 中上传多张图片并进行验证

php - Codeigniter:从单列中获取所有值作为数组