2014-06-24 49 views
0

我想檢查用戶輸入的用戶名和密碼是否與使用PDO的數據庫中的條目匹配,但由於某種原因似乎無法使其工作。如何檢查用戶名和密碼匹配

數據庫表稱爲user_info,我試圖從中獲取用戶名和密碼的行分別爲usernamepass。我並不完全確定如何檢查用戶輸入的信息是否與數據庫條目相匹配,然後根據是否返回true或false來決定將它們發送到何處。

此外,我明顯得到了先決條件,如包括連接到數據庫的文件,我知道誰的信息是正確的。

我曾在if ($username)等黑暗中刺過,但顯然這是不正確的。

HTML

  <form method="post"> 
       <label for="username2">Username</label> 
       <input type="text" name="username"> 
       <label for="password">Password</label> 
       <input type="text" name="password"> 
       <input type="submit" value="Login" name="login"> 
      </form> 

PHP

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

       try { 

        $result = $db->prepare("SELECT * FROM user_info WHERE username = :user AND pass = :pass"); 
        $result->bindParam(':user', $username); 
        $result->bindParam(':pass', $password); 
        $result->execute(); 
        $rows = $result->fetch(PDO::FETCH_NUM); 
       } 

       catch (Exception $e) { 
        echo "Could not retrieve data from database"; 
        exit(); 
       } 

       if ($username == "test" && $password == "test") { 
        $_SESSION['username'] = $username; 
        redirect('/add-property.php'); 
       } else { 
        if (isset($_POST['login'])) { 
         echo "Username or password incorrect"; 
        } 
       } 
+0

@ The Peanut Gallery:我不是精英主義者,但我認爲我會通過回答這個問題來做更多的傷害。對這段代碼的所有錯誤的解釋也不符合規則和準則。 – r3wt

+0

@ r3wt你是指根據我的代碼或我的整體代碼來檢查用戶名嗎?我顯然不使用純文本的密碼,它只是一個測試目的的佔位符。 –

+0

1.當您只需要行數時,請勿選擇*。理想情況下,無論如何你都要選擇每一列,因爲這樣更好。選擇表格中最簡單的一列,例如user_id,以使事情保持輕鬆高效。 2.如果isset($ _ POST ['login'])應該是if!empty($ _ POST),則不需要用表單名稱覆蓋您的發佈請求。它應該只有2-3個查詢字符串,用戶名和密碼以及可選的csrf標記。 3.使用password_hash和password_verify進行密碼散列。請不要推出自己的。 4.在測試過程中回顯異常情況。 (續) – r3wt

回答

0

要找到你的錯誤,在代碼中添加此代碼,而不是漁獲:

catch (PDOException $e) { 
    echo "Could not retrieve data from database ".$e->getMessage; 
    exit(); 
} 

你也可以得到你的查詢刺痛以確保它是這樣的:

echo $db->queryString; 
1

您可以做的是在數據庫中查找用戶,然後從查詢中返回行。在比較用戶給出的用於驗證的密碼和查詢返回的密碼後,將它們返回到他們需要去的地方。

+0

我已經修改了這個代碼,現在允許我正確地進行身份驗證。這是正確的方式去做,或者我做錯了什麼(雖然我仍然得到所需的結果)?注意:我只更改''test''作爲'$ rows' - 'if($ username = $ rows && $ password = $ rows){$ _SESSION ['username'] = $ username;重定向('/ add-property.php');} else {if(isset($ _ POST ['login'])){echo「用戶名或密碼不正確」; }}' –

+0

沒有必要檢查用戶名,因爲你已經在搜索它了嗎?但基本上是耶。 – Daemedeor

+0

好點,謝謝。 –

0

看來($username == $rows && $password == $rows)是我需要更改代碼才能正確驗證用戶名和密碼。