试图从数据库中检索密码

时间:2014-11-29 20:59:04

标签: php mysql

我遇到了我的登录脚本问题,它无法从我提供的sql语句中成功提取密码数据。

要求用户输入他们的电子邮件&密码,

<p><strong>Email: </strong><input type= "text" name= "email"></p>
<p><strong>Password: </strong><input type= "password" name= "password"></p>

通过POST,我从表单中输入他们输入的内容并将其放入sql语句中。

$taremail = filter_input(INPUT_POST, 'email');
$tarpasswd = filter_input(INPUT_POST, 'password');

$sql = "SELECT email, password FROM members WHERE email = '".$taremail."'
        AND password = PASSWORD('".$tarpasswd."')";

最后,我检查数据库,看看他们输入的电子邮件和密码是否真的在数据库中。

$result = mysqli_query($con, $sql) or die(mysqli_error($con));

if(mysqli_num_rows($result) == 1){

    setcookie("auth", "1", time()+60*30, "/", "", 0); //create cookie for the logged in user    

    $display = "<h2>You have successfully logged in!</h2>
                <p>Click the link below to go to our main page</p>
                <a href=\"main.php\">Main Page</a></br>
                <a href=\"../login.html\">Log out</a>";
} else {
    $display = "<h2>This account is not registered!</br>
                Please make sure to register before trying to log in.</h2>
                <a href=\"../register.html\">Register here!</a>
                <a href=\"../login.html\">Login page</a>";
}

这或者返回给出的电子邮件和密码确实在数据库中,或者不是。很简单吧?

我的问题是它总是执行我的else{}声明,说我没有注册。

我应该注意,在我的注册页面中,他们提供的密码是通过PASSWORD()方法进行的,因此它在数据库中变成了哈希varchar ... letmein = * D37C49F9CBEFBF8B6F4

2 个答案:

答案 0 :(得分:1)

试试这个:

如果PASSWORD php函数然后在查询中调用此函数。

$sql = "SELECT email, password FROM members WHERE email = '".$taremail."'
        AND password = PASSWORD('$tarpasswd')";

答案 1 :(得分:1)

所以我正在为我设置的东西运行测试,我想我发现了问题。这令人沮丧。

http://dev.mysql.com/doc/refman/5.0/en/password-hashing.html

来自PASSWORD()函数的文档:

&#34;为了容纳更长的密码哈希值,用户表中的密码列此时已更改为41字节,即当前长度。&#34;

我的用户列中的密码字段只存储了25个字节,因此我的假密码的密码(&#39; asdfasdf&#39;正在屈服&#34; * 1B1A59A0792309FDE6F1A8681D2B58C4F2639156&#34;,但我的桌子只存储&#34; * 1B1A59A0792309FDE6F1A868&#34;由于缺乏存储空间。

我相信你能猜出比较这两者的结果。

这可能不是你的问题,但它可以帮助其他一些贫穷,破碎的个人。