2016-02-29 117 views
0

所以我相當新的PHP,但我試圖創建一個簡單的登錄系統。PHP登錄鹽不起作用

我現在所面臨的問題是,由於某種原因,第二個SQL語句失敗,或者什麼都不回饋。

這裏是我使用的代碼。

include 'dbConn.php'; 
if(isset($_POST['submit'])) 
{ 
    global $conn; 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    $saltSql = "SELECT salt FROM users WHERE email = '$username'"; 
    $saltRes = $conn->query($saltSql); 
    while($resRow = $saltRes->fetch_assoc()){ 
     $salt = $resRow['salt']; 
    } 
    $saltedHash = hash("sha512", ($password . $salt)); 
    $sql = "SELECT email, role, FROM users WHERE email = '$username' AND password = '$saltedHash'"; 
    $res = $conn->query($sql); 

    if($res->num_rows == 1) 
    { 
    //Logged in succesfully 
     echo "Logged in!"; 
    } 
    else 
    { 
     //Something went wrong 
     echo "Something went wrong"; 
    } 
    $conn->close(); 
} 

當我嘗試手動執行在phpMyAdmin第二個查詢我得到這個錯誤:#1064 - 你在你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行的'FROM users WHERE email ='username'AND password ='5111109d49bc1'附近使用正確的語法。

我真的很感謝這方面的幫助。

+0

你能添加錯誤信息嗎?這將有助於找到解決問題的辦法。 – AlexVogel

+0

也許會添加您收到的錯誤消息,這很可能是由於您的鹽可能導致SQL語法錯誤 – Panda

回答

2

您的問題似乎是這樣的:

$sql = "SELECT email, role, FROM users WHERE email = '$username' AND password = '$saltedHash'" 
--------------------------^ 

你有一個額外的逗號,導致崩潰的SQL查詢。刪除它,它的工作原理:

$sql = "SELECT email, role FROM users WHERE email = '$username' AND password = '$saltedHash'" 
+0

這確實是問題所在,不知道我是如何設法注意到這一點的。但非常感謝你! :) –

+0

'不知道我怎麼設法注意不到'。簡單:您沒有看到錯誤,或者在得到錯誤之後沒有閱讀日誌。解決問題的正確方法是首先看看有什麼問題。 –

+0

我確實沒有可見的錯誤。但正如我所說我對PHP相當陌生,所以調試對我來說仍然是一團糟。 –