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

时间:2016-02-24 14:23:46

标签: php mysql codeigniter controller

我已经按照教程开始使用CodeIgniter创建一个简单的登录(我使用的版本是最后一个),但是当我插入用户名和密码时,我只得到"无效的用户名或密码"如果我错过了其中的一个,那将是很好的,但两者都是正确的。数据库是在PHPmyAdmin中创建的(我使用WAMP,用户root,没有密码),该表名为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;
   }
 }
}
?>

2 个答案:

答案 0 :(得分:1)

根据您的意见:

  

是的,它返回:Array([0] =&gt; stdClass对象([id] =&gt; 1   [username] =&gt; fabio [密码] =&gt; fabio))。对不起,在我删除之前   那个印刷品,我不明白你想做什么。 - user5913892   9分钟前

您的数据库中的Response [https://dataminer.pjm.com/dataminerui/] Date: 2016-02-24 15:28 Status: 200 Content-Type: text/html Size: 159 B <!-- Plain HTML page that kicks us into the app --> <html> <head> <meta http-equiv="Refresh" content="0; URL=pages/public/index.html"> </head> </html> > content(response) <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <!-- Plain HTML page that kicks us into the app --><html><head><meta http-equiv="Refresh" content="0; URL=pages/public/index.html"></head></html> 没有密码。为此你需要使用这个:

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()

答案 1 :(得分:0)

当您插入新的用户名和密码时,如果找不到它们,则在数据库中检查它们是否返回false,函数check_database(),此函数应该反转它的作用。