我正在尝试用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/

10-11 07:18