2016-02-29 51 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相当陌生,所以调试对我来说仍然是一团糟。 –