如何根据会话显示用户的信用

时间:2011-01-16 01:22:07

标签: php mysql lamp

我正在开发一个简单的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 语句无效,但我希望它回显用户名和信用卡,其中当前会话用户名=存储在数据库中的用户名。

非常感谢你看一看 - 非常感谢。

4 个答案:

答案 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条件下),如果它是真的一次,它将永远是真的。无限循环城市。