2017-08-03 74 views
1

我一直在努力在拉里烏爾曼的PHP和MySQL第4版login_ajax.php第15章的審查和追求部分,它說:驗證電子郵件和密碼輸入從MySQL數據庫通過PHP

修改login_ajax.php,使其使用數據庫確認登錄成功。

這是我到目前爲止已經試過,無論我做什麼,我得到的迴應似乎永遠是「不正確」,然後AJAX腳本從未登錄我

到目前爲止我的代碼:

<?php 

if (isset($_GET['email'], $_GET['password'])){ 

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

// Need a valid email address: 
if (filter_var($email, FILTER_VALIDATE_EMAIL)) { 

    // must match specific values: 
    // This values will be gotten from a database 

    require('../mysqli_connect.php'); 

    // retrieve from database 

    $q = "SELECT email, pass FROM users WHERE email = '$email'LIMIT 1"; 

    // run the query 
    $r = @mysqli_query($dbc, $q); 


    //$check_email = ""; 
    //$check_pass = ""; 

    /*while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { 

     $check_email = $row['email']; 
     $check_pass = $row['pass']; 

    }*/ // if the email and password match those in database 

    //if (($email == $check_email && $password == $check_pass)) { 
    if (mysqli_num_rows($r) > 0) { 

     echo 'CORRECT'; 


    } else { 

     echo 'INCORRECT'; 
    } 



    mysqli_close($dbc); 


    /* if(($_GET['email'] == '[email protected]') && ($_GET['password'] == 'testpass')){ 

      //Set a cookie, if you want, or start a session. 
      // indicate success: 
      echo 'CORRECT'; 

     }else{// mismatch 

      echo'INCORRECT'; 
     }*/ 
}else{ // invalid email 

    echo 'INVALID_EMAIL'; 
} 

}else{ // missing one of the two variables 

echo 'INCOMPLETE'; 

} 

它包含我不同的嘗試。

+5

在限制''$ email'LIMIT 1'之前需要空格';更好地使用prepare語句。'mysqli_query'前刪除'@' – Saty

+1

從'@ mysqli_query'中刪除'@'符號,以便您可以查看您的查詢何時出現錯誤 –

+0

另外,使用[密碼API](http://php.net/password)並停止使用簡單的測試密碼。 –

回答

1

你只檢查email但你也檢查password

如果email是正確的那麼userwrong password

登錄嘗試此查詢

$q = "SELECT email, pass FROM users WHERE email = '$email' and password = '$password' LIMIT 1"; 

space$emailLIMIT

之間

mysqli_query刪除@所以它給error更好understaning

+0

感謝您的密碼檢查headup,會補充說,腳本終於合作限制的建議和@ – gudchyld

0

你沒有顯示HTML,但我會嘗試用你給我回答。

  1. 添加一個空格'$email'LIMIT

    之間

  2. 確保在數據庫中有數據。

  3. 仔細檢查您在表單中設置name屬性的HTML,並確保它與$_GET[]名稱匹配。

2

首先,出於安全原因,我決不會使用GET來提交密碼。 若要檢查密碼是否正確,我建議使用php函數password_hash()password_verify()以非純文本格式存儲密碼。

但要回答您的來源問題:要查看您的查詢的錯誤,只需刪除查詢前面的「@」號。我還會在「LIMIT」語句之前添加一個空格。

如果它仍然無法正常工作,請嘗試獲取mysqli錯誤並將其發佈。

祝你好運:)

+0

剛剛聽到有關第一,password_hash()和password_verify()的函數,肯定會查找它們,感謝您的建議@MarvinX​​ – gudchyld

+0

感謝一百萬,它終於與您的建議,我對所有這些人來說都是新鮮事物,但要提供密碼安全性並嘗試@MarvinX​​ – gudchyld

+0

我很高興聽到它的工作!如果你沒有任何腳本問題,如果你把它標記爲xD,我會很高興 – MarvinX