我从数据库获取密码,并使用“”(双引号)存储在$password
变量中。我想用{'(单引号)更改$password
变量值。我怎么能改变这个?当我使用静态值进行测试时,$password = '$2y$10$wFgLkiJbc7MQ0aY6H7bZwehm45CFlvpSBvZmHs9m8euqPmDlP0mIK';
没问题且密码有效。我的问题看起来像这个链接。
php password_hash and password_verify issues no match
如何解决$密码?
$password = $result['Password'];
这是我的代码:
$get_email = $_POST['email'];
$get_password = $_POST['password'];
$result = $conn->prepare("select * from user where Email='$get_email'");
$result->execute();
foreach ($result as $result) {
$id = $result['ID'];
$password = $result['Password'];
if (password_verify($get_password, $password)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
}
答案 0 :(得分:0)
当你使用双引号时,它将被用作变量,因为你的字符串中有'$',而当你使用单引号时它将被用作char
答案 1 :(得分:0)
目前我只能向你提出一个想法。 怎么样修改一下你的mysql查询? 像
这样的东西$conn->prepare("select * from user where Email='$get_email'" and `Password` = '$get_password');
如果此查询返回空结果,您可以显示“密码无效”。 不是很好的解决方案,但应该有效。
答案 2 :(得分:0)
我的代码遇到了同样的问题。我从数据库中检索哈希密码 ,然后使用password_verify()
根据输入的密码对其进行验证。为了使代码无问题,必须使用trim()
修剪从数据库中检索的哈希密码。示例代码:
public function verifylogin() {
//this is an array with user credentials from login form
$usercred = $this->input->post();
//this will check in user model and return password, etc. where name is equal to entered name
$userdb = $this->User_model->check($usercred);
$userdbpass = trim($userdb[0]['pass']); //trim is very critical !!!
//now we check if the text pass is equal to hashed one
if (password_verify($usercred['password'], $userdbpass)) {
$sess_data = array('login' => TRUE, 'username' => $usercred['username'], 'type' => $usercred['type']);
$this->session->set_userdata($sess_data);
redirect(base_url());
} else {
$this->session->set_flashdata('msg', 'Wrong Username or Password!');
//If no session, redirect to login page
redirect(base_url() . 'users/login');
}
}