IF语句表现不尽如人意

时间:2012-09-06 02:16:34

标签: php mysql

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

这是我到目前为止所做的:

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";
    }
}

有什么想法吗?

3 个答案:

答案 0 :(得分: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";
}

答案 1 :(得分: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>';

<强>文档

答案 2 :(得分:-1)

您应该将查询更改为:

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

然后你不需要where循环。

你也应该使用mysqli而不是mysql。