我正在使用password_verify来检查密码是否正确,这是完美的。我的问题是当用户输入错误的用户名点击登录按钮时,我收到错误"Trying to get property of non-object"
。
出现错误,它应显示验证错误消息。
如果我输入正确的用户名和错误的密码,而不是我收到正确的验证错误消息(密码无效)但是如果我输入了错误的用户名和正确的密码,那么我收到错误"Trying to get property of non-object"
。
你能帮我解决这个问题吗?
控制器
public function login_user()
{
$this->form_validation->set_error_delimiters('', '');
$this->form_validation->set_rules('user_email', 'Email', 'trim|required|valid_email');
$this->form_validation->set_rules('user_password', 'Password', 'trim|required|xss_clean|callback_check_password_database');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('login');
}
else
{
//redirect(base_url('Student_controller/index'),'refresh');
}
}
/*Checking the login details*/
function check_password_database($user_password)
{
$a_username=$this->input->post('user_email');
if (empty($a_username)) {
$this->form_validation->set_message('check_password_database','Email is Invalid');
}
else{
$password_fetch=$this->access_model->password_fetch($a_username);
if(password_verify($user_password, $password_fetch))
{
redirect('Student_controller/index','refresh');
}
else{
$this->form_validation->set_message('check_password_database','Password is Invalid');
return FALSE;
}
}
}
模型
public function password_fetch($username)
{
$query=$this->db->select('emp_password')
->from('employee_info')
->where('emp_email',$username)
->get();
$result = $query->row();
return $fetch_pass=$result->emp_password;
}
答案 0 :(得分:0)
您必须尝试直接访问阵列。在$a_username
和$password_fetch
之间,必须是您直接尝试访问的数组。
您必须回显它们以查找值是如何存储在它们中的。尝试使用echo $a_username;die;
打印它们,同样地打印另一个。
如果是数组,请尝试打印echo "<pre>";print_r$(a_username);
同时在模型中初始化$fetch_pass=""
;
答案 1 :(得分:0)
更改模型
public function password_fetch($username)
{
$fetch_pass = false;
$query=$this->db->select('emp_password')
->from('employee_info')
->where('emp_email',$username)
->get();
$result = $query->row();
if (isset($row) && ($row > 0)) {
$fetch_pass=$result->emp_password;
}
return $fetch_pass;
}
答案 2 :(得分:0)
你在做什么
return $fetch_pass = $result->emp_password;
不验证$result
实际上是否为对象。如果用户不存在,则$result
将不是对象。因此,尝试在emp_password
不是对象时获取$result
,会向您显示错误消息尝试获取非对象的属性。
请改为:
if (isset($row)) {
return $result->emp_password;
}
进一步参考:https://www.codeigniter.com/userguide3/database/results.html