2012-04-10 102 views
1

出於某種原因,我的PHP登錄腳本保持返回「無效的電子郵件/密碼組合」,但我知道我輸入正確的電子郵件地址和密碼。有沒有人看到我可能做錯了什麼?瞭解嵌套如果... Else語句

<?php 

$email= $_POST['email']; 
$password= $_POST['password']; 

if (!empty($email) && !empty($password)) { 

    $connect= mysqli_connect("localhost", "root", "", "si") or die('error connecting with the database'); 
    $query= "SELECT user_id, email, password FROM users WHERE email='$email' AND    
    password='$password'"; 
    $result= mysqli_query($connect, $query) or die('error with query'); 

    if (mysqli_num_rows($result) == 1) { 
     $row= mysqli_fetch_array($result); 
     setcookie('user_id', $row['user_id']); 
     echo "you are now logged in"; 
    } else { 
     echo "invalid username/password combination"; 
    } 

} else { 
    echo" you must fill out both username and password"; 
} 

?> 
+1

沒有好的縮進,很難理解你的代碼... – dqhendricks 2012-04-10 23:25:17

+0

@dqhendricks剛剛編輯它! :-) – 2012-04-10 23:25:37

+0

@dqhendricks它的源代碼很好,只是SO將標籤作爲4空格而不是標準8 – tobyodavies 2012-04-10 23:25:59

回答

1

照顧你得到那個時候mysqli_num_rows ($result)不等於1 ...我認爲你應該做的是驗證是否usernamepassword直接在數據庫中存在.....這是唯一合乎邏輯的理由在你的腳本爲什麼你應該得到invalid username/password combination

如果你還有另外一個問題,讓我知道

+0

這是(大部分)是true,但爲什麼會得到「無效的用戶名」消息?只有當他有超過1名用戶使用相同的密碼和電子郵件時,纔會發生這種情況...... – 2012-04-10 23:30:28

+0

它不能建議 - 能夠擁有超過1個用戶名和密碼,但是您可以嘗試'if(mysqli_num_rows($ result)> 0 )'只是爲了驗證這是錯誤形成的地方 – Baba 2012-04-10 23:34:13

2

我將其切換到說,

if (mysqli_num_rows($result) > 0) 

但除此之外,代碼看起來像它應該工作。你確定$ _POST變量包含你認爲應該包含的內容嗎?你確定這個用戶/合格組合存在於你的數據庫中嗎?

2

您的代碼看起來不錯。我會檢查以下內容:

確保查詢工作。我會迴應查詢並在您的數據庫程序中的數據庫上運行它,並查看結果。

確保你沒有與電子郵件/密碼組合超過1個用戶 - 它會雞姦了您的計數檢查。

檢查的詳細信息您的文章並確保他們是正確的,你必須在數據庫中(無雜散空格等)是什麼。

最後,你會更好正確縮進和佈置您的代碼,看看它是多麼容易在這裏讀到:http://codepad.org/DmtMuTpC

0

錯誤出現了,因爲有數據庫中的重複數據。