PHP / MYSQL - 只能显示行中的一个元素,可能会出现问题吗?

时间:2017-08-05 13:21:00

标签: php mysql mysqli

我试图在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)

1 个答案:

答案 0 :(得分:3)

你的while循环需要大括号来包含你对$row

的所有用法

否则$ row最终将返回null,$ haslobaza也将为null(此时会抛出索引错误

while($row = mysqli_fetch_assoc($result))
{
  $emailbaza = $row['email'];
  $haslobaza = $row['haslo'];
}