2017-02-27 96 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

相關問題