MySQL数组没有返回任何/ 1

时间:2013-08-16 17:30:47

标签: php mysql

我正在处理留言板,我刚刚启动它,现在正在处理登录功能。我有一个问题。每当我尝试获取数据时,它都会返回任何内容,或者返回“1”。鉴于我是将ISQL与PHP集成的新手,我不知道最新情况。如果你能帮我弄清楚我做错了什么就会很棒。

    $query = mysql_query("
    SELECT * FROM users WHERE username='$username'
");

while ($row = mysql_fetch_assoc($query)){
    $dbID = $row['id'];
    $dbUser = $row['username'];
    $dbPass = $row['password'];
}

if ($dbUser = $username && $dbPass = $password) {
    //if user and pass match do stuff
    $_SESSION['username'] = $dbUser;
    $_SESSION['id'] = $dbID;
    $_SESSION['ip'] = $_SERVER['HTTP_USER_AGENT'];
    header("Location: messageboard.php");
}
else {
    //if user and pass dont match do stuff
    $_SESSION['loginError'] = "Your username and password do not match";
    header("Location: login.php");
}

所有代码都返回 - ID: 用户名:1 IP:Mozilla / 5.0(Windows NT 6.2; WOW64)AppleWebKit / 537.36(KHTML,像Gecko)Chrome / 28.0.1500.95 Safari / 537.36

1 个答案:

答案 0 :(得分:0)

首先,正如andrewsi所述:$dbUser = $username && $dbPass = $password应使用==来比较值。

第二:像这样做非常脆弱。

首先,您似乎已将密码存储在“明文”中,因此您可以使用直接比较。不要这样做。存储(盐渍或胡椒)哈希,并将用户输入与该哈希进行比较!

第二:您正在使用WHILE-Loop(while ($row = mysql_fetch_assoc($query)){)来设置用户数据。这不是必需的,因为一个用户名应该只有一组数据。

第三:您在查询中使用$username。您的示例不包含$username的生成,但根据我在源代码中看到的内容,它很可能看起来像$username = $_POST["username"]

因此,此时,One可能能够以接收有效登录的方式修改输入的用户名,即使不是。 (SQL注入)。

转义用户输入(在将MySQL_real_escape_string()传递给SQL查询之前使用{{1}}。