如果用户已登录,我想显示用户的全名。如果没有,则应显示“登录”文本。
这是我到目前为止所做的:
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";
}
}
有什么想法吗?
答案 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>';
<强>文档强>
isset
- http://php.net/manual/en/function.isset.php PDO
- http://www.php.net/manual/en/class.pdo.php PDO::prepare
- http://www.php.net/manual/en/pdo.prepare.php PDOStatement
- http://www.php.net/manual/en/class.pdostatement.php PDOStatement::execute
- http://www.php.net/manual/en/pdostatement.execute.php PDOStatement::fetchColumn
- http://www.php.net/manual/en/pdostatement.fetchcolumn.php mysql_query
已弃用! - http://php.net/manual/en/function.mysql-query.php SELECT
(请参阅WHERE
部分) - http://dev.mysql.com/doc/refman/5.0/en/select.html 答案 2 :(得分:-1)
您应该将查询更改为:
"SELECT * from user WHERE status = 'online' AND username = '" . mysql_real_escape_string($_SESSION['username']) . "'"
然后你不需要where循环。
你也应该使用mysqli而不是mysql。