我正在做一些要发送的项目。但是现在我会坚持使用password_verify方法
//Login Existed User
if (isset($_POST['login'])) {
$email = mysqli_real_escape_string($con, $_POST['email']);
$password = mysqli_real_escape_string($con, $_POST['password']);
//$password = password_verify($con, $password);
$cmmnd = "SELECT * FROM user WHERE email = '$email' AND password ='$password'";
$run = mysqli_query($con, $cmmnd);
if ($run -> num_rows > 0) {
$data2 = $run -> fetch_array();
if (password_verify($password, $data2['password'])) {
header("Location: mainpage.php");
}
}else {
echo "<script>alert('ID or Password Are Wrong!');
window.location= 'user.php'</script>";
}
}
上面有用于登录的脚本。
这里注册码
if (isset($_POST['register'])) {
$fname = mysqli_real_escape_string($con, $_POST['fname']);
$remail = mysqli_real_escape_string($con, $_POST['remail']);
$rpswd = mysqli_real_escape_string($con, $_POST['rpswd']);
$hash = password_hash($rpswd, PASSWORD_DEFAULT);
$sql = "INSERT INTO `user` (`name`, `email`, `password`) VALUES ('$fname', '$remail','$rpswd')";
$data = mysqli_query($con, $sql);
header("Location: regist.php");
}
注册很好,但是现在我无法登录。非常感谢您的帮助。预先谢谢你
答案 0 :(得分:0)
首先,您需要调整注册脚本。切换到准备好的语句,然后将哈希而不是纯文本密码插入数据库中。
if (isset($_POST['register'])) {
$hash = password_hash($_POST['rpswd'], PASSWORD_DEFAULT);
$stmt = $con->prepare('INSERT INTO `user` (`name`, `email`, `password`) VALUES (?,?,?)');
$stmt->bind_param('sss', $_POST['fname'], $_POST['remail'], $hash);
$stmt->execute();
header("Location: regist.php");
exit; // always add after header("Location:
}
确保数据库中的密码字段为VARCHAR(255)
,字符集为utf8mb4
。另外,请确保您重定向到regist.php
的页面是正确的页面。
然后,您必须在登录页面上根据提供的电子邮件从数据库中获取单个字段password
。然后,可以使用该值(如果存在)来检查password_verify()
。如果哈希匹配,则可以重定向。如果不是,则显示一条消息。
//Login Existed User
if (isset($_POST['login'])) {
$stmt = $con->prepare('SELECT password FROM user WHERE email = ?');
$stmt->bind_param('s', $_POST['email']);
$stmt->execute();
$result = $stmt->get_result();
$data2 = $result->fetch_array();
if ($data2 && password_verify($_POST['password'], $data2['password'])) {
header("Location: mainpage.php");
exit;
}
// If the login was unssuccesful then display a message
echo "<script>alert('ID or Password Are Wrong!');
window.location= 'user.php'</script>";
}
答案 1 :(得分:-1)
注册时,您已经为密码生成了哈希值。但是,在登录页面中,您正在将原始密码传递给选择查询。