使用会话使用php从sql表中提取数据

the*_*tro 9 php sql database session

我试图从我的sql表中提取数据,使用php唯一的会话ID,但是当我回显任何东西时,我只能得到用户所处的位置!

<?php
include 'core/init.php';
$user_info = $_SESSION['user_id'];
?>
<html>....
<h1><?php echo $user_info['firstname'];?>&nbsp<?php echo $user_info['firstname'];?> </h1>
Run Code Online (Sandbox Code Playgroud)

显示为:

5 5

如果我使用数据库中的第五个位置登录!

Tas*_*iwa 3

你得到 5 的原因是因为这段代码:

<?php echo $user_info['firstname'];?>
Run Code Online (Sandbox Code Playgroud)

$_SESSION['user_id'] 的值是 5。所以在赋值之后 $user_info 的值是 5。现在因为 $_SESSION['user_id'] 没有像您的意图那样设置为数组。结果是 $user_info 被视为字符串,并且 ['firstname'] 的计算结果为 [0]。如果您愿意,您可以将 ID 5 更新为 54 等。您将始终获得 ID 的第一个字符。

要纠正此问题,请尝试将 user_data 函数中 return 之前的最后 2 行更改为:

$data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE `user_id` = $user_id"));
$data = array_merge(array($user_id), $data);
return $data;

if (logged_in() === true) { 
    $user_data = user_data($_SESSION['user_id'], 'username', 'first_name', 'last_name',     'email');
    $user_data = user_data($session_user_id, 'user_id', 'username', 'first_name', 'last_name', 'email');
}
Run Code Online (Sandbox Code Playgroud)

到:

if (logged_in() === true) { 
    $user_data = user_data($_SESSION['user_id'], 'username', 'first_name', 'last_name', 'email');
    $_SESSION['user_id'] = $user_data;
}
Run Code Online (Sandbox Code Playgroud)