我可以在页面中登录,但是如果我与其他帐户具有相同的密码,我的问题,我将无法登录,请你们告诉我问题是什么,如果您不介意帮助我,我真的很感激
,我是初学者非常感谢。$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'];
}
您在某处有一个重复的帐户。
请注意,您的 SQL 将选择具有给定名称和密码对的所有用户,但仅当查询结果只有一行时,它才会进行身份验证。更仔细地看看这个:
if (mysql_num_rows($login) == 1) {
所以,我的建议是:使用相等或更大的比较(>=
),并消除重复项。删除已经存在的重复,并想出一种方法来避免创建重复的名称和密码对。
在您的表中,username
应该是 UNIQUE 以避免这种重复问题,因此请尝试修改您的表格并删除重复的用户名。
您正在使用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'];
}
答案,但是...
使您的用户名和电子邮件字段在数据库中是唯一的,并在添加新成员时使用插入忽略。这将防止重复。
加密您的密码!
不要将 mysql 用于数据库连接,因为它已贬值。使用 PDO 或 mysqli。
除非必要,否则不要使用 SELECT *。在这种情况下,选择
username
就足够了。加密您的密码!
切勿将纯文本密码存储在数据库中 - 这是非常不安全的。至少,执行以下操作来保护你的用户(和你自己)
$password = $_POST['password'];
$password = sha1($password);
这将使您免于很多头痛:)
编辑以反映Arjan的评论。
您只需要从用户名匹配的表中选择所有用户名(因为用户名通常是唯一的),然后在您有行后检查密码是否匹配。
如果它们匹配,则分配会话变量。
这种方式比从数组中获取用户名和密码(错误包)更好。
旁注:如果您将密码存储在数据库中,出于安全原因,它们应该被"散列"加密,而不是原始数据