我正在重建登录页面。
我有原始的没有password_verify代码工作正常。
没有password_verify代码的原始代码:
$username = $_POST['username'];
$password = md5($_POST['password']);
if($username != "" && $password != "") {
try {
$query = "SELECT * FROM `admin` WHERE `u_name`=:username and `u_pass`=:pass";
$stmt = $db->prepare($query);
$stmt->bindParam('username', $username, PDO::PARAM_STR);
$stmt->bindValue('pass', $password, PDO::PARAM_STR);
$stmt->execute();
$count = $stmt->rowCount();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($count == 1 && !empty($row)) {
$_SESSION['sess_user_id'] = $row['aID'];
$_SESSION['sess_username'] = $row['u_name'];
echo "home.php";
} else {
echo "invalid";
}
} catch (PDOException $e) {
echo "Error : ".$e->getMessage();
}
} else {
echo "Both fields are required!";
}
但是我编辑并在下面添加了password_verify代码到原始代码,它将无法正常工作。
$username = $_POST['username'];
$password = $_POST["password"];
if($username != "" && $password != "") {
try {
$stmt = $db->prepare("SELECT * FROM admin WHERE u_name = :uname" );
$stmt->execute(array(':uname' => $_POST['username']));
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
if(count($row)>0) {
if (password_verify($password, $row['u_pass'])) {
$_SESSION['sess_user_id'] = $row['aID'];
$_SESSION['sess_username'] = $row['u_name'];
echo "home.php";
} else {
echo "invalid";
}
} catch (PDOException $e) {
echo "Error : ".$e->getMessage();
}
} else {
echo "Both fields are required!";
}
}
我仍然是PDO password_veryfy的初学者 我无法理解......
请您告诉我有什么问题/在哪里修理它?
我感谢你的帮助。
感谢您的时间。
答案 0 :(得分:0)
问题是当您使用$row
在新版本中获取fetchAll()
时,它是一个记录数组,您之后的行是结果中的第一个记录。所以你需要检查结果中的第一行......
if(count($row)>0) {
if (password_verify($password, $row[0]['u_pass'])) {
$_SESSION['sess_user_id'] = $row[0]['aID'];
$_SESSION['sess_username'] = $row[0]['u_name'];
echo "home.php";
} else {
echo "invalid";
}
在之前的版本中,您使用的是fetch()
,这是主要区别。
答案 1 :(得分:0)
fetchAll()
返回一个二维数组。由于表格中只有一行供用户使用,因此只需使用fetch()
,就像在原始代码中一样。
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row && password_verify($password, $row['u_pass'])) {
$_SESSION['sess_user_id'] = $row['aID'];
$_SESSION['sess_username'] = $row['u_name'];
echo "home.php";
} else {
echo "invalid";
}