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