我正在尝试用PHP/MySQLi构建登录验证系统。_POST
数据是由AJAX请求/jQuery发送的,但是我已经尽可能地简化了代码,使您能够模拟查询,即使没有不必要的数据。为了简化,我还省略了字符串验证器(FILTER_SANITIZE_STRING
等)
代码(简化)如下:
$email = "[email protected]";
$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
列的db中,并通过password_hash($haslo, PASSWORD_BCRYPT);
生成。Haslo
列是varchar(255)
。 最佳答案
while循环需要大括号来包含$row
的所有用法
否则,$row最终将返回null,$haslobaza也将为null(此时将抛出索引错误)
while($row = mysqli_fetch_assoc($result))
{
$emailbaza = $row['email'];
$haslobaza = $row['haslo'];
}
关于php - PHP/MYSQL-只能显示行中的一个元素,可能有问题吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45522391/