我已经按照教程开始使用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;
}
}
}
?>
答案 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()
,此函数应该反转它的作用。