我遇到了我的登录脚本问题,它无法从我提供的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
答案 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;由于缺乏存储空间。
我相信你能猜出比较这两者的结果。
这可能不是你的问题,但它可以帮助其他一些贫穷,破碎的个人。