我正在为我的网站创建一个登录系统,但我没有得到太多的运气。我散列了这样的密码$pw = password_hash($pw, PASSWORD_BCRYPT, array('cost' => 14));
,我被告知必须使用password_verify检查登录表上的密码,然后再次检查,但我不明白我必须做什么。有人可以请一步一步解释我必须做什么吗?PHP登录系统
GLOBAL $username;
GLOBAL $pw;
if (empty($_POST["username"])) {
echo"fill in username to sign in";
} else {
if (empty($_POST["pw"])) {
echo"fill in password to sign in";
} else {
//check if form is submitted
if (isset($_POST['signin'])) {
$username = mysqli_real_escape_string($conn, $_POST['username']);
$pw = mysqli_real_escape_string($conn, $_POST['pw']);
$valid = password_validate($password, $hash);
$sql = mysqli_query($conn, "SELECT * FROM users WHERE username = '" . $username. "' and pw = '" . $pw. "'");
if ($row = mysqli_fetch_array($sql)) {
// if insert checked as successful echo username and password saved successfully
echo "successfully logged in";
} else {
$errormsg = "Incorrect username or Password!!!";
}
}
}
}
功能是'password_verify()','不password_validate()'。另外,你从哪里得到'$ hash'?你将变量定义为'$ pw',但试图用它作为'$ password'。 – Qirel
你不会选择'WHERE' PW是你的哈希.. password_hash每次都会创建一个新的盐。不,您从数据库中检索散列并根据原始密码输入进行测试。 –
转义用户名和密码会导致更改用户输入的值。使用准备的参数化查询 – RiggsFolly