Php 密码\u验证返回错误的帐户详细信息
My password_verify()总是提供错误的帐户详细信息,但这些详细信息是正确的。 我的片段:Php 密码\u验证返回错误的帐户详细信息,php,sql,security,passwords,Php,Sql,Security,Passwords,My password_verify()总是提供错误的帐户详细信息,但这些详细信息是正确的。 我的片段: include('Application/Bootstrap.php'); if(isset($_SESSION['username'])) { header('location: '.$config['website']['url'].'/me'); // Use this if the user HAS to login. } if (isset($_P
include('Application/Bootstrap.php');
if(isset($_SESSION['username'])) {
header('location: '.$config['website']['url'].'/me'); // Use this if the user HAS to login.
}
if (isset($_POST['submit'])) {
$username = $db->real_escape_string($_POST['username']);
$password = $db->real_escape_string($_POST['password']);
if (!$_POST['username'] || !$_POST['password']) {
echo 'Je moet een gebruikersnaam en wachtwoord invullen om in te loggen.';
}
else {
$check = $db->query("SELECT * FROM users WHERE username = '".$username."' and password = '".$password."'");
$row=mysqli_fetch_assoc($check);
if (password_verify($password, $row['password'])) { //I try $password AND $_POST['password']
$_SESSION['username'] = $_POST['username'];
header("Location: /me");
exit;
}
else {
// ALS HET NIET KLOPT!!!!
echo 'Je gegevens kloppen niet.'; }
}
}
有人能帮我吗?我已经搜索了整个互联网。但是我找不到它。我的数据库列varcher增加到255。如果你问我的登记簿是错的,那不是。片段:
$db->query("INSERT INTO users
(username,password,mail,auth_ticket,motto,ip_reg)
VALUES ('$username', '".password_hash($pw, PASSWORD_BCRYPT, $options)."', '$mail', '$ticket', '$motto', '$ip')") or die($db->error);
费用是10英镑
我希望有人能帮助我。您在SQL查询中第一次检查密码时,检查了两次密码:
$check = $db->query("SELECT * FROM users WHERE username = '".$username."' and password = '".$password."'");
|< remove this part >|
您正在存储散列密码,但请尝试将列
和password='“$password.”
与普通密码匹配。您只需使用$check=$db->query(“从username='“$username.”的用户中选择密码);
用于密码查询;但是为什么不使用绑定变量进行数据库查询呢?您还应该检查数据库查询是否实际返回了一个结果,即如果$row实际上是一个有效的结果,而不是false,那么我现在错了什么?@user3902511-错误是什么?是否检查了row变量v的内容ar_dump($row)
?您可以打开错误报告来查找其他问题,将此行放在文件错误报告(E_ALL);
的开头。如果我执行var_dump($row);I get:NULL Je gegevens kloppen niet.@user3902511-如果执行查询后,$row
为NULL,则数据库找不到与查询匹配的任何行。我用准备好的语句编写了一个示例(没有错误处理),请注意引号“”或调用real_escape_string()没有必要这样做。请确保$\u POST['password']
确实包含输入值,可能您的HTML包含具有不同名称的字段。
$stmt = $db->prepare('SELECT * FROM users WHERE username = ?');
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
...
if (password_verify($_POST['password'], $row['password']))
{
...
}
$result->close();