【发布时间】:2017-07-25 18:56:41
【问题描述】:
密码验证总是返回 false。我在这里看到了所有答案,但都没有帮助。密码字段是 varchar(255)。当我从数据库中 var_dump 密码时,它显示 string(60) 并且密码正确,但该函数仍然返回 false。 这是存储在数据库中的代码:
if(empty($_POST['pass'])) {
$passErr = "Password required!";
$errors[] = "Pass error";
} else {
$pass = test_input($_POST["pass"]);
if(!preg_match("/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/", $pass)) {
$passErr = "Password not well formed";
$errors[] = "Pass error";
} else {
$pass_hashed = password_hash($pass, PASSWORD_DEFAULT);
}
}
$hash_ver = md5(rand(0, 1000));
$status = "";
$stm = $conn->prepare("INSERT INTO user VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
$stm->bind_param("sssssssi", $id, $pass_hashed, $email, $fName, $lName, $hash_ver, $status, $id_role);
$stm->execute();
echo strlen($pass_hashed);
这是登录脚本的一部分
if(count($array) != 0) {
echo "<script>alert('Ima gresaka')</script>";
} else {
include('connectionFile/connection.php');
$stmt = $conn->prepare("SELECT `name`,`last_name`,`status_verif`,`email`,`password` FROM user WHERE `email`=?");
$stmt->bind_param("s", $email);
$stmt->execute();
if($res = $stmt->get_result()) {
$count = $res->num_rows;
if($count == 1) {
$row = $res->fetch_assoc();
$passwordb = $row['password'];
//echo "<p>".$passwordb."</p>";
$verify = password_verify($pass, $passwordb);
if($verify) {
echo "<script>alert('Password match')</script>";
} else {
var_dump($verify);
var_dump($passwordb);
echo "<script>alert('Password doesnt match')</script>";
}
} else {
echo "<script>alert('0 rows')</script>";
}
} else {
echo "<script>alert('No rows at all')</script>";
}
}
【问题讨论】:
-
你试过回显你的
$pass吗?打印效果是否如您所愿? -
这个方法有什么作用
test_input()?也许它正在添加/嵌入一些你不知道的东西。 -
您也不应该以任何方式操纵密码,这可能是造成这一切的原因。
-
请评论你的代码,Andrija,它会让你和其他人更容易理解你的代码。
-
我认为你没有出现在你的问题中。好吧,我会把这个留给你。某些东西正在操纵您的输入,您需要找出原因。您可以随时为未来的用户编辑您的帖子,祝您好运。
标签: php