我试图在PHP / MySQLi中构建登录验证系统。 {AJ}请求/ jQuery正在发送_POST
数据,但我尽可能简化了代码,即使没有不必要的数据也可以模拟查询。为简化起见,我还省略了字符串验证器(FILTER_SANITIZE_STRING
等)
代码(简化)如下所示:
$email = "mymail@mail.com";
$haslo = "averyhardpassword12345";
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$output = json_encode(array('type'=>'error', 'text' => 'Email address is not valid.'));
die($output);
}
if(strlen($haslo)<3 || strlen($haslo)>20){
$output = json_encode(array('type'=>'error', 'text' => 'Password must have between 3 and 20 characters.'));
die($output);
}
$mysqli = new mysqli("localhost", "myDbUsername", "myDbPW", "myDbName");
$usercheckquery = "SELECT * FROM users WHERE email='$email'";
$result = $mysqli->query($usercheckquery);
while($row = mysqli_fetch_assoc($result))
$emailbaza = $row['email'];
$haslobaza = $row['haslo'];
echo $haslobaza;
echo $emailbaza;
if (password_verify($haslo, $haslobaza) && $email == $emailbaza && !empty($data)) {
$output = json_encode(array('type'=>'message', 'text' => 'Zalogowano...'));
die($output);
} else {
$output = json_encode(array('type'=>'error', 'text' => 'Podany email lub hasło są nieprawidłowe.'));
die($output);
}
问题是 - 我无法找出此代码的错误。我的最终if
语句永远不会返回true,我也发现我可以echo
$row['email']
,但是当我echo
$row['haslo']
时,它什么也没有返回
希望有人能告诉我哪里犯了错误。
编辑:
哦,haslo
保存在haslo
列的数据库中,并通过password_hash($haslo, PASSWORD_BCRYPT);
生成。 Haslo
列为varchar(255)
。
答案 0 :(得分:3)
你的while循环需要大括号来包含你对$row
否则$ row最终将返回null,$ haslobaza也将为null(此时会抛出索引错误)
while($row = mysqli_fetch_assoc($result))
{
$emailbaza = $row['email'];
$haslobaza = $row['haslo'];
}