我可以在页面登录但是我的问题如果我和其他帐户有相同的密码我将无法登录请你们能告诉我这是什么问题如果你不介意帮助我真的很感激我很喜欢初学者。
$login = mysql_query("SELECT * FROM usertable WHERE (username = '" . mysql_real_escape_string($_POST['username']) . "') and (password = '" . mysql_real_escape_string($_POST['password']) . "')");
if (mysql_num_rows($login) == 1){
$_SESSION['username'] = $_POST['username'];
}
答案 0 :(得分:4)
您某处有重复的帐户。
请注意,您的SQL正在选择具有给定名称和密码对的所有用户,但只会在查询结果只有一行时进行身份验证。仔细看看这个:
if (mysql_num_rows($login) == 1) {
所以,我的建议是:使用相等或更大的比较(>=
),并消除重复。删除已存在的欺骗,并提出一种避免创建重复的名称和密码对的方法。
答案 1 :(得分:4)
在您的表username
中应该 UNIQUE 以避免此重复问题,因此请尝试修改您的表并删除重复的用户名。
答案 2 :(得分:2)
您正在使用mysql_num_rows($login) == 1
,即使您有两个具有相同密码的不同帐户,它也应该有效。可能你有两个帐户使用相同的登录名和密码。在查询后使用console.log(mysql_num_rows($login))
,看看它可能返回多行。
像这样:
$login = mysql_query("SELECT * FROM usertable WHERE (username = '" .
mysql_real_escape_string($_POST['username']) . "') and (password = '" . mysql_real_escape_string($_POST['password']) . "')");
console.log(mysql_num_rows($login));
if (mysql_num_rows($login) == 1){
$_SESSION['username'] = $_POST['username'];
}
答案 3 :(得分:1)
这不是答案,而是......
在您的数据库中使用您的用户名和电子邮件字段UNIQUE,并在添加新成员时使用INSERT IGNORE。这样可以防止重复。
加密密码!
不要将mysql用于数据库连接,因为它已被折旧。使用PDO或mysqli。
除非必须,否则请勿使用SELECT *。在这种情况下,SELECT username
就足够了。
加密密码!
永远不要将纯文本密码存储在数据库中 - 这是非常不安全的。至少,请执行以下操作以保护您的用户(以及您自己)
$password = $_POST['password'];
$password = sha1($password);
这样可以避免很多麻烦:)
编辑以反映Arjan的评论。
答案 4 :(得分:0)
您只需要从用户名匹配的表中选择所有内容(因为用户名通常是唯一的),然后在检查行以查看密码是否匹配。
如果匹配,则分配会话变量。
这种方式比从阵列中获取用户名和密码更好(包含错误)。
备注:如果您在数据库中存储密码,出于安全原因,它们应加密'哈希'而不是原始数据