password_verify()不起作用

时间:2015-04-03 16:11:20

标签: php hash mysqli passwords

//index.php
<html>
<head>
<!--utf html5 declareren-->
<link rel="stylesheet" type="text/css" href="style.css">
<link rel="stylesheet" type="text/css" href="cssreset.css">
</head>
<body>
<form action="login.php" method="POST">
username: <input type="text" name="usernamebox" required> <br>
password: <input type="password" name="passwordboxlogin" required> <br>
<input type="submit" value="Login">   
</form>

<form action="register.php">
    <input type="submit" value="Click here if you want to register">
</form>


</body>
</html>

//login.php

<?php
session_start();

error_reporting(E_ALL);



include ('connect.php');



$username = $_POST['usernamebox'];
$password = $_POST['passwordboxlogin'];
$_SESSION['usernamebox'] = $username;

//$db->query("SELECT * FROM `users` WHERE `username` = '$username'");
//
//$db->query("SELECT * FROM `users` WHERE `password` = '$password'"); 



//nieuw



$hash = "SELECT password FROM users WHERE username= '$username' ";



if (password_verify($password, $hash)) 
{
    echo 'Password is valid!';
    //header("Location: userpage.php");
} 
else 
{
    echo 'Invalid password.';
}






?>
<html>
<head>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>


</body>
</html>

我是一名IT学生,我似乎无法使这个password_verify()功能发挥作用。

我基本上试图将mysqli中的密码哈希与login.php中POST表单中给出的密码进行比较。密码已正确散列到我的数据库。

1 个答案:

答案 0 :(得分:0)

你的功能错了。您需要输入密码和散列密码,然后比较两者。你想要这样的东西:

$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

   if (password_verify('rasmuslerdorf', $hash)) {
      echo 'Password is valid!';
   } else {
      echo 'Invalid password.';
   }

首先,您必须查询数据库并获取哈希密码然后进行比较。在您的示例中,您正在散列实际的查询字符串本身。