gpt4 book ai didi

php - PHP中的password_verify无法使用数据库

转载 作者:行者123 更新时间:2023-11-30 22:30:13 25 4
gpt4 key购买 nike

我正在尝试使用password_hash和password_verify函数使登录表单起作用,但由于某些语法错误,我无法验证密码。

以下是我的注册脚本

<?php
include("includes/connection.php");
if(isset($_POST['reg'])) {

//registration form
$u_email = mysqli_real_escape_string($con, $_POST['email']);
$u_pass = mysqli_real_escape_string($con, $_POST['password']);


$get_email = "SELECT * FROM user WHERE user_email='$u_email'";
$run_email = mysqli_query($con, $get_email);
$check = mysqli_num_rows($run_email);



if($check==0){


$hashed_pass = password_hash('u_pass', PASSWORD_BCRYPT, array('cost' => 10));

$insert = "insert into user (user_email, user_pass) values ('$u_email', '$hashed_pass')";

$run_insert = mysqli_query($con, $insert);

if($run_insert) {
echo "<script>alert('Registration Successful!')</script>";
}
else {
echo "<script>alert('Registration not Successful!')</script>";

}
}
else{

echo "Email already registered";
}

}


?>


以下是登录脚本

<?php

include("includes/connection.php");

if(isset($_POST['login'])) {

$u_email = mysqli_real_escape_string($con,$_POST['u_email']);
$u_pass = mysqli_real_escape_string($con,$_POST['u_pass']);

$get_user = "select user_pass from user where user_email='$u_email'";
if(password_verify($u_pass, $user_pass)){

$_SESSION['user_email']=$u_email;
echo "<script>alert('Login successfull')</script>";
}
else {
echo "<script>alert('Password or email is not correct!')</script>";
}

}
?>


即使登录详细信息正确,也仅显示(“密码或电子邮件不正确!”)。

最佳答案

您没有将用户密码传递到password_hash()函数中。第一个参数应该是密码,即$ _POST ['password']而不是'u_pass'。

$hashed_pass = password_hash($_POST['password'], PASSWORD_BCRYPT, array('cost' => 10));


还应注意SQL转义。您只应转义将要进入SQL字符串的字符串。在您的代码中,您不能在password_hash()中使用$ u_pass,因为您使用了mysqli_real_escape_string,因此不再是用户输入的字符串。

您的登录脚本也有一些错误。

if(password_verify($u_pass, $user_pass)){


$ u_pass已经通过mysqli_real_escape_string通过,所以不是用户输入的。此外,将不会定义$ user_pass,因为您尚未运行SQL并将user_pass分配给$ user_pass。

我建议您退后一步,在开发代码时不要使用密码哈希。使用存储在数据库中的普通密码进行操作。然后,您可以通过查看数据库来验证它是否正确保存了电子邮件/密码。工作正常后,添加密码哈希码。

关于php - PHP中的password_verify无法使用数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34065312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com