2017-02-27 97 views
0

我从数据库中这样如果没有匹配的行

while ($row = mysqli_fetch_array($select_user_query)){ 
    $userId = $row ['id']; 
    $check_email = $row ['userEmail']; 
    $check_password = $row ['userPassword']; 
} 

获取数据,然后我比较,如果输入的细节匹配从数据库中取出的详细信息如何验证数据。

if ($email === $check_email || $hashed_password === $check_password) { 

    // header ("Location:../dashboard.php"); 
    echo "success"; 

} else { 

    // header ("Location: ../signup.php"); 
    echo "failed"; 
} 

但问题是,如果输入的电子邮件地址不存在于数据库中,则返回错误

注意:未定义的变量:check_email在 C:\ xampp2 \ htdocs中\诚实\ includes \ login_process.php on line 37

但是,如果电子邮件存在,则返回成功。

所以问题是,这里最好的做法是什么?如果它是空的,我应该将默认值设置为$check_email吗?从查询来

+2

'$ row'将返回FALSE,如果没有这样的行...'如果($行&& $ email === $ check_email && $ hashed_pa​​ssword === $ check_password)' – Phil

+0

@菲尔是的,它的工作。谢谢,你可以发布这个答案,并解释你是否不介意 –

+0

你也意识到如果你的语句中有多行,这只会检查结果集中的最后一个。 – Phil

回答

1

假设userEmail是独一无二的,你的表被命名为“USER_TABLE”和$conn是你mysqli连接/例如,您可以检查是否有匹配的行这样的...

$stmt = $conn->prepare(
    'SELECT `id` FROM `user_table` WHERE `userEmail` = ? AND `userPassword` = ? LIMIT 1'); 
$stmt->bind_param('ss', $email, $hashed_password); 
$stmt->execute(); 

$stmt->bind_result($userId); 
if ($stmt->fetch()) { 
    echo 'success'; 
    // $userId is also set to the result `id` now 
} else { 
    echo 'failed'; 
} 
1

check_email参数为空,所以你需要将其分配给另一个变量之前做一个空检查,即

$check_email = $row['userEmail'] != null ? $row['userEmail'] : ''; 
+0

这只会触发未知的索引错误,而不是 – Phil

+1

实际上,它不。如果userEmail行存在,它将获得从查询返回的值 – Mat

+0

如果没有行,那么'$ row'将是'false',并且绝对不会有'userEmail'索引 – Phil

相关问题