【发布时间】:2015-01-28 04:45:42
【问题描述】:
我的登录脚本存在问题,它无法从我提供的 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
【问题讨论】:
-
先把
== 1改成> 0。 -
不,我不认为它是加密的,而是散列的,因此无法解密。
-
您能否验证该电子邮件的记录是否存在?
-
使用 phpmyadmin?我现在打开表格,里面有 3 个不同的值。当我注册用户时,它也会更新到数据库中。 @kdogisthebest
-
在你的 PHP 代码
echo $sql中确定。然后在 phpMyAdmin 中运行它,看看它说了什么。