PHP登录不工作。使用密码进行验证,似乎会导致一些问题
我不知道为什么它不起作用 Login.phpPHP登录不工作。使用密码进行验证,似乎会导致一些问题,php,forms,mysqli,submit,password-hash,Php,Forms,Mysqli,Submit,Password Hash,我不知道为什么它不起作用 Login.php $email = $_POST['email]; $password = $_POST['password]; $validEmail = filter_var($email, FILTER_VALIDATE_EMAIL); $getpassword = $connect->query("SELECT password FROM users WHERE email = '$validEmail'"); $row = $getpassword
$email = $_POST['email];
$password = $_POST['password];
$validEmail = filter_var($email, FILTER_VALIDATE_EMAIL);
$getpassword = $connect->query("SELECT password FROM users WHERE email = '$validEmail'");
$row = $getpassword->fetch_assoc();
所有这些都很好。我得到了电子邮件连接的密码,这样我就可以“验证”密码
$passVarify = password_varify($password, $row['password']);
当我尝试“echo”out或在“$passVerify”上使用“var_dump”/“print_r”时,它只显示数字“1”?
在验证密码后,我运行另一个查询,以便获得“userid”和“privileges”。我需要“解除锁定”或再次将密码设置为“正常”,以便可以进行下面的查询
$result = $objConnection->query("SELECT userid, privileges FROM users WHERE email = '$validEmail' && password = '$passVarify'");
下面的代码似乎没有接收到查询?只是因为某些原因它不起作用
if($result->num_rows > 0) {
$row = $result->fetch_assoc();
$userid = $_SESSION['userid'] = $row['userid'];
$privileges = $_SESSION['privileges'] = $row['privileges'];
}
有什么好主意吗?因为我一直在绞尽脑汁想弄明白为什么第一个“查询”有效而第二个无效 你让自己的生活很艰难 首先,密码验证()的结果为真或假,即验证或未验证。它不会解除密码的锁定。应该没有任何东西可以解除散列的哈希 另外,从数据库中获取数据不需要进行两次单独的调用 您也不需要将电子邮件地址从POST数组复制到标量变量中 因此,对于您的代码来说,这将是一个更简单的流程 此外,您实际上不需要过滤用户输入的密码。如果不正确,
验证密码()
将失败,这就是您需要知道的全部内容
$result = $connect->query("SELECT userid, privilages, password
FROM users
WHERE email = '{$_POST['email']}'");
$user = $result->fetch_assoc();
if ( ! password_verify($_POST['password'], $user['password']) ) {
// show the password error screen
exit;
} else {
// save all the SELECTED user info into a sub array of SESSION
// to be used later
$_SESSION['user'] = $user;
}
您应该真正使用参数化查询,而不是将POST变量注入查询中
password\u verify
返回true或false,其他不返回。如果您已经确认一切正常,则不需要使用WHERE子句的密码。您可以不只是获取一列,而是获取所有需要的列,并在凭据正确时设置所需内容,否则将打印错误和/或重定向。您正在使用密码\u哈希/验证
:很好。您正在将用户提供的值注入到SQL查询中:糟糕……谢谢:)我知道有很多事情我应该/可以做得更好,但我已经很久没有做过程序员了。所以现在,我在做我几年前做的事。我想学习PDO和OOP,因为我听过和读过,它应该是一种“更简单”和更好的方法?如果我错了,请纠正我。再次感谢,你没有错。但您当前的代码似乎使用的是MYSQLI,而不是PDO
$stmt= $connect->query("SELECT userid, privilages, password
FROM users
WHERE email = ?");
$stmt->bind_param("s", $_POST['email']);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_array(MYSQLI_ASSOC);