5を取得する理由は、このコードのためです。
<?php echo $user_info['firstname'];?>
$ _SESSION ['user_id']の値は5です。したがって、割り当て後の$ user_infoの値は5です。これは、$ _SESSION['user_id']が意図したとおりに配列に設定されていないためです。その結果、$ user_infoが文字列として取得され、['firstname']は[0]と評価されます。必要に応じて、ID5を54などに更新できます。IDの最初の文字は常に取得されます。
これを修正するには、user_data関数で戻る前の最後の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');
}
に:
if (logged_in() === true) {
$user_data = user_data($_SESSION['user_id'], 'username', 'first_name', 'last_name', 'email');
$_SESSION['user_id'] = $user_data;
}