2

我可以在页面上登录,但是如果我与其他帐户的密码相同,我将无法登录我是初学者,非常感谢。

$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'];
}
4

5 回答 5

4

在你的表中username应该是唯一的以避免重复的问题,所以尝试修改你的表并删除重复的用户名。

于 2013-09-06T22:09:38.557 回答
4

您在某处有一个重复的帐户。

请注意,您的 SQL 正在选择具有给定名称和密码对的所有用户,但只有在查询结果只有一行时才会进行身份验证。更仔细地看一下:

if (mysql_num_rows($login) == 1) {

所以,我的建议是:使用相等或更大的比较(>=),并消除重复。删除已经存在的欺骗,并想出一种方法来避免创建重复的名称和密码对。

于 2013-09-06T22:07:53.787 回答
2

您正在使用mysql_num_rows($login) == 1,即使您有两个使用相同密码的不同帐户,它也应该可以工作。可能您有两个具有相同登录名和密码的帐户。console.log(mysql_num_rows($login))在查询后使用 a 并查看它可能返回多行。

像这样:

$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'];
}
于 2013-09-06T22:11:40.137 回答
1

这不是答案,但...

  1. 使您的用户名和电子邮件字段在您的数据库中唯一,并在添加新成员时使用 INSERT IGNORE。这将防止重复。

  2. 加密您的密码!

  3. 不要将 mysql 用于数据库连接,因为它已贬值。使用 PDO 或 mysqli。

  4. 除非必须,否则不要使用 SELECT *。在这种情况下,SELECTusername就足够了。

  5. 加密您的密码!

永远不要将纯文本密码存储在数据库中——这是非常不安全的。至少,请执行以下操作以保护您的用户(和您自己)

$password = $_POST['password'];
$password = sha1($password);

这将使您免于很多麻烦:)

编辑以反映 Arjan 的评论。

于 2013-09-06T22:17:26.697 回答
0

您只需要从用户名匹配的表中选择所有内容(因为用户名通常是唯一的),然后在获得行后检查密码是否匹配。

如果它们匹配,则分配会话变量。

这种方式会比从数组中获取用户名和密码更好(错误的情况下)。

旁注:如果您将密码存储在数据库中,出于安全原因,它们应该被加密“散列”而不是原始数据

于 2013-09-06T22:09:22.377 回答