我正在使用codeigniter框架。我有一个登录模型和一个带视图的控制器。我在我的数据库的users表中设置了admin作为用户名和admin作为密码进行测试。 但是,当我使用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;
}
}
答案 0 :(得分:1)
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;
//}
}
您的代码似乎很好,但是您可以检查它是否正确传递正确的数据尝试首先转储它。像上面的代码一样检查数据和查询结果。
答案 1 :(得分:1)
您在表
中有多少条记录试试这段代码
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
传递给函数
答案 2 :(得分:0)
您运行的是哪个版本的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;
}