我正在使用codeigniter框架。我有一个登录模型和一个带有视图的控制器。我将管理员作为用户名,将管理员设置为密码,在我的数据库的用户表中设置用于测试目的。但是当我使用 admin13356 或 admindsgsd 或 adminWHATEVER 将 admin 作为密码时,登录成功。我不明白为什么。
我的控制器功能如下。
function check(){
$this->load->model('loginModel');
$query = $this->loginModel->validate();
if($query){
$data = array('username' => $this->input->post('username'),
'is_logged_in' => true
);
$this->session->set_userdata($data);
//redirecting to appropriate page
redirect('success');
}else{
$this->session->set_flashdata('loginCheck','Username/Password Comination Incorrect!');
redirect('login');
}
}
我的模型如下。
function validate(){
$this->db->where('username', $this->input->post('username'));
$this->db->where('password', md5($this->input->post('password')));
$query = $this->db->get('users');
if($query->num_rows() == 1){
return true;
}
}
function validate(){
// dump all post variables recieved
echo '<pre>';
print_r($this->input->post());
echo '</pre><br>';
$this->db->where('username', $this->input->post('username'));
$this->db->where('password', md5($this->input->post('password')));
$query = $this->db->get('users');
// Dump what the query result is
echo '<br><pre>';
print_r($query->result());
echo '</pre>';
//if($query->num_rows() == 1){
// return true;
//}
}
您的代码似乎很好,但是您可以检查它是否正确传递了正确的数据吗,请先尝试转储它。 就像上面的代码一样检查数据和查询结果。
表中有多少条记录
试试这个代码
function validate($username,$password){
$this->select('*');
$this->from('table_name');
$this->db->where('username', $username);
$this->db->where('password', md5($password));
$query = $this->db->get();
if($query->num_rows() == 1){
return true;
}
}
将username
和password
传递给函数
您运行的是什么版本的 PHP?我之前遇到过 PHP 问题,它为非返回返回 TRUE。
尝试将return false
添加到 validate() 方法中:
function validate(){
$this->db->where('username', $this->input->post('username'));
$this->db->where('password', md5($this->input->post('password')));
$query = $this->db->get('users');
if($query->num_rows() == 1){
return true;
}
return false;
}
此外,模型应该是与输入无关的。一定要考虑将$this->input->post()
移动到控制器并将值作为参数传递:
这允许您在其他方案中使用 validate()
方法。例如(当用户名不是通过邮寄而是通过会话提供时,重新验证密码)。
控制器
function check(){
$this->load->model('loginModel');
$query = $this->loginModel->validate($this->input->post('username'), $this->input->post('password'));
if($query){
$data = array(
'username' => $this->input->post('username'),
'is_logged_in' => true
);
$this->session->set_userdata($data);
//redirecting to appropriate page
redirect('success');
}else{
$this->session->set_flashdata('loginCheck', 'Username/Password Combination Incorrect!');
redirect('login');
}
}
型
function validate($username, $password){
$this->db->where('username', $username);
$this->db->where('password', md5($password));
$query = $this->db->get('users');
if($query->num_rows() == 1){
return true;
}
return false;
}