【发布时间】:2013-08-16 17:30:46
【问题描述】:
我正在处理留言板,我刚刚开始,现在正在处理登录功能。我有一个问题。每当我尝试获取数据时,它要么什么都不返回,要么返回一个“1”。鉴于我是将 mySQL 与 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, like Gecko) Chrome/28.0.1500.95 Safari/537.36
【问题讨论】:
-
PSA:
mysql_*函数是 deprecated in PHP 5.5。不建议编写新代码,因为它会阻止您将来升级。相反,请使用 MySQLi 或 PDO 和 be a better PHP Developer。 -
if ($dbUser = $username && $dbPass = $password) {- 您应该使用==进行松散比较。=是赋值运算符。 -
另外,您的
while循环正在遍历整个结果集,而不仅仅是您想要的一行。因此,除非用户是最后一个用户,否则他们将无法登录。 -
我的 fetch 正在运行的查询仅在用户名等于表单确定的用户名的情况下。
-
@GeorgeColeman - 过失,就是这样。不过,这不会使
=和==的问题无效