我正在开发一个简单的LAMP应用程序,用户可以使用Paypal来记入他们的帐户。我怀疑这是一个简单的问题,但是花了很长时间尝试无济于事,并且会感激任何想法:
系统的用户管理系统使用会话正常工作,但我无法显示当前用户的信用。
但我一直在尝试以下方面:
$ result = mysql_query(“ SELECT *
来自用户
内部联合帐户
ON account.UserID = account.UserID
ORDER BY account.accountID“);
while($ _ SESSION ['Username'] = $ row ['Username']) { echo $ row ['Username']; echo $ row ['Credit']; }
我怀疑 while 语句无效,但我希望它回显用户名和信用卡,其中当前会话用户名=存储在数据库中的用户名。
非常感谢你看一看 - 非常感谢。
答案 0 :(得分:2)
好的,你的代码实际上有很多问题无法修复,因为你根本不了解php。
但是,让我解释一下,这样你就可以很好地理解你做错了什么:
首先,你的mysql语句是错误的。 你为什么加入一个领域呢?您将无法获得相应的用户< - >帐户行,因为用户实际上从未加入过 除此之外,如果你想获取一行(你只需要一行,因为你只想回显一个用户的数据,获取更多只是资源更重),告诉mysql这样做。一个简单的例子是“WHERE a =”b“LIMIT 1(仅选择a等于”b“的行,找到第一个后返回)。
现在,要从查询中读取内容,您需要获取相应的数据。
你可以使用mysql_fetch_assoc / mysql_fetch_array / mysql_fetch_object来做到这一点。
这看起来像这样:$data = mysql_fetch_array($query);
。
在这种情况下,您不需要使用while()
循环,因为您只有一行。只有当你想使用多行时才需要while循环。
您的其余代码是正确的,但您不需要两次调用echo。您只需使用“。”连接两个变量:echo $row['Username'].$row['Credit'];
。
如果要在中间插入空格,请将其与另一个点连接:echo $row['Username']." ".$row['Credit'];
。
答案 1 :(得分:1)
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
if ($row['Username'] == $_SESSION['Username'])
{
echo $row['Username'];
echo $row['Credit'];
break; // I believe username is unuque.
}
}
但是从表中只排一行要好得多:
$result = mysql_query("
SELECT *
FROM users
INNER JOIN account
ON account.UserID=users.UserID
WHERE Username ='".mysql_real_escape_string($_SESSION['Username'])."'" );
if ($result && $row = mysql_fetch_array($result, MYSQL_ASSOC))
{
echo .....
}
答案 2 :(得分:0)
您只有一个mysql结果,现在您必须将该信息作为关联数组(或对象)返回
while ($row = mysql_fetch_assoc($result)) {
if ($_SESSION['username'] == $row['Username']) {
echo $row['Username'];
echo $row['Credit'];
}
}
好像您使用$ _SESSION ['username']来检查网站上的用户身份验证,更好的方法是使用salted +哈希版本的用户名和可能的登录时间(从不包含密码)。
答案 3 :(得分:0)
对我而言,有一件事就是您的查询正在加入:
account.UserID=account.UserID
而不是:
account.UserID=user.ID
此外,这是不对的:
while($_SESSION['Username'] = $row['Username'] )
=
符号用于分配,而不是比较,因此您实际上将<{em}的值设置为$_SESSION['Username']
到$row['Username']
。然后,表达式被计算为布尔值(因为它在while条件下),如果它是真的一次,它将永远是真的。无限循环城市。