2

如果用户已登录,我想显示用户的全名。如果没有,则应显示文本“登录”。

这是我到目前为止所拥有的:

session_start();

$session = $_SESSION['username'];

include "config.php";

$sql = mysql_query("SELECT * from user");    
while($d=mysql_fetch_array($sql))
{
    if($d['status']=='online' and $_SESSION['username'] == $d['username'])
    {
        $full_names = $d['full_name'];

        echo $full_names;
    }
    else
    {
        echo "Login";
    }
}

有任何想法吗?

4

3 回答 3

1

您应该使用 SQL WHERE(如@ThiefMaster 所述),但只是为了回答您的问题:

$full_names = false;
while($d=mysql_fetch_array($sql)) {
    if($d['status']=='online' and $_SESSION['username'] == $d['username']) {
        $full_names = $d['full_name'];

        echo $full_names;
    }
}

if(!$full_names) {
  echo "Login";
}
于 2012-09-06T02:20:35.630 回答
1

您可能希望存储 id,而不是将用户名存储在会话中。这不如WHERE在查询中使用语句将结果限制为单行(即相关用户)重要。这很重要,因为随着用户数据库大小的增加,此查询将变得越来越低效。通过一些简单的逻辑,您可以防止未来的问题并在平衡中拥有更强大的架构。

另一个重要注意事项,mysql_* 功能已被弃用,您不应该使用它们。您需要开始使用 PDO 再怎么强调也不为过。并不难弄清楚(不再是mysql_*功能!),您不妨现在就开始使用它——很快,mysql_*将完全不可用。您的代码将停止工作,或者您将被困在一个充满已知安全漏洞的旧 PHP 版本上。

在引用 中的键之前$_SESSION,您应该检查以确保它存在。

session_start();
$session_identifier = isset($_SESSION['username']) ? $_SESSION['username'] : false;
$user_name = false;
if ($session_identifier) {
    $pdo = new PDO("mysql:host=localhost;dbname=database", '-username-', '-password-');
    $sql = '
        SELECT 
            full_name 
        FROM 
            users 
        WHERE 
            username = ":username"
    ';
    $statement = $pdo->prepare($sql);
    if($statement->execute(array(':username'=>$session_identifier)))
        $user_name = $statement->fetchColumn();
}

...然后你可以这样做:

if ($user_name)
    print 'Welcome, '.$user_name;
else
    print '<a href="login.php">Login</a>';

文档

于 2012-09-06T02:46:02.980 回答
-1

您应该将查询更改为:

"SELECT * from user WHERE status = 'online' AND username = '" . mysql_real_escape_string($_SESSION['username']) . "'"

然后你不需要 where 循环。

您还应该使用 mysqli 而不是 mysql。

于 2012-09-06T02:36:23.397 回答