Php Codeigniter 3中的用户名或密码无效

Php Codeigniter 3中的用户名或密码无效,php,mysql,codeigniter,controller,Php,Mysql,Codeigniter,Controller,我遵循了一个教程,以便使用CodeIgniter创建一个简单的登录(我使用的是最后一个版本),但是当我插入用户名和密码时,我只会得到“无效用户名或密码”,如果我错过了其中一个,那将是非常好的,但这两个都是正确的。数据库是在PHPmyAdmin中创建的(我使用的是带有用户根且没有密码的WAMP),表名为users,我创建了两个不同的用户。如果有必要,我还可以把其他文件(database.php等)的代码放进去。所以,我不明白我错了什么,这是控制器: <?php if ( ! defined(

我遵循了一个教程,以便使用CodeIgniter创建一个简单的登录(我使用的是最后一个版本),但是当我插入用户名和密码时,我只会得到“无效用户名或密码”,如果我错过了其中一个,那将是非常好的,但这两个都是正确的。数据库是在PHPmyAdmin中创建的(我使用的是带有用户根且没有密码的WAMP),表名为users,我创建了两个不同的用户。如果有必要,我还可以把其他文件(database.php等)的代码放进去。所以,我不明白我错了什么,这是控制器:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class VerifyLogin extends CI_Controller {

     function __construct()
     {
       parent::__construct();
       $this->load->model('user','',TRUE);
       $this->load->helper('url');
     }

     function index()
     {
       //This method will have the credentials validation
       $this->load->library('form_validation');

       $this->form_validation->set_rules('username', 'Username', 'trim|required');
       $this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database');

       if($this->form_validation->run() == FALSE)
       {
         //Field validation failed.  User redirected to login page
         $this->load->view('login_view');
       }
       else
       {
         //Go to private area
         redirect('home', 'refresh');
       }

     }

     function check_database($password)
     {
       //Field validation succeeded.  Validate against database
       $username = $this->input->post('username');

       //query the database
       $result = $this->user->login($username, $password);

       if($result)
       {
         $sess_array = array();
         foreach($result as $row)
         {
           $sess_array = array(
             'id' => $row->id,
             'username' => $row->username
           );
           $this->session->set_userdata('logged_in', $sess_array);
         }
         return TRUE;
       }
       else
       {
         $this->form_validation->set_message('check_database', 'Invalid username or password');
         return false;
       }
     }
    }
    ?>

这是User.php

<?php
Class User extends CI_Model
{
 function login($username, $password)
 {
   $this -> db -> select('id, username, password');
   $this -> db -> from('users');
   $this -> db -> where('username', $username);
   $this -> db -> where('password', MD5($password));
   $this -> db -> limit(1);

   $query = $this -> db -> get();

   if($query -> num_rows() == 1)
   {
     return $query->result();
   }
   else
   {
     return false;
   }
 }
}
?>

当您插入新用户名和密码时,您在数据库中检查它们,当您没有找到它们时,您返回false,函数
check_database()
,此函数应反转其功能。

根据您的注释:

是的,它返回以下内容:数组([0]=>stdClass对象([id]=>1 [用户名]=>fabio[密码]=>fabio])。对不起,在我删除之前 那张照片,我不明白你想做什么用户5913892 9分钟前

数据库中的
MD5()
中没有密码。为此,您需要使用以下选项:

$this -> db -> select('id, username, password');
$this -> db -> from('users');
$this -> db -> where('username', $username);
$this -> db -> where('password', $password);
$this -> db -> limit(1);

对机密数据(如密码)使用加密是一种很好的做法,我建议您以
MD5()
的形式插入密码,而不是在登录时使用
MD5()

您是否正在获取
$password
???它被编码了??或者使用if(count($result)>0{}…也显示模型用户内部的登录函数也检查这个
print\r($result)
之前
如果($result)
模型看起来不错,只需检查打印($result);我没有得到任何不同的打印,只是相同的字符串,如前所述,“无效的用户或密码”