只有在用户id为1的情况下登录,才能查看好友列表


Can only see friends lists if logged in with user id of 1

我正在我的网站上实现一个朋友列表系统,我已经让它显示已经接受的朋友的名字(因此接受的值为1),当我访问虚拟帐户时,我可以看到他们的朋友,但当我以虚拟帐户登录时,我甚至手动将数据库中的user_id更改为"1",然后注销并登录,发现它只能在user_id为1的情况下工作,这是代码。此外,它还不是MYSQLI,这是我的下一步。

<h1>Friends</h1>
<?php
$user_id = user_id_from_username($username);
if($_SESSION['user_id'] == $user_id){
    $logged_user_id = $_SESSION['user_id'];
    $result = mysql_query("SELECT * FROM `friends` WHERE `friend_id`='{$logged_user_id}' AND `user_id`!='{$logged_user_id}' AND `accepted`='1'");
    while ($row = mysql_fetch_array($result)){  
        $friend_id = $row['user_id'];
        /*Get friend details*/
        $fetch_details = mysql_fetch_object(mysql_query("SELECT * FROM `users` WHERE `user_id`='{$friend_id}'"));
        echo $fetch_details->username;
        echo '<br/>';
    }
} 
else if($_SESSION['user_id'] != $user_id){
    $user_id = user_id_from_username($username);
    $logged_user_id = $user_id;
    $result = mysql_query("SELECT * FROM `friends` WHERE `user_id`='{$logged_user_id}' AND `friend_id`!='{$logged_user_id}' AND `accepted`='1'");
    while ($row = mysql_fetch_array($result)){  
        $friend_id = $row['friend_id'];
        /*Get friend details*/
        $fetch_details = mysql_fetch_object(mysql_query("SELECT * FROM `users` WHERE `user_id`='{$friend_id}'"));
        echo $fetch_details->username;
        echo '<br/>';
    }
}
?>

片剂

FRIENDS
id(AI)
user_id
friends_id
datemade
accepted(enum 0, 1)
USERS
user_id(AI)
username
profile
active

在您的第一个SQL查询中,您使用相同的变量两次进行过滤:

`friend_id`='{$logged_user_id}' AND `user_id`!='{$logged_user_id}'

这可能不会给你带来预期的结果。

您可以添加print_r($row)来检查您是否从数据库中获得了预期的结果,以确保您的查询按照您的意愿进行。

最好使用一个查询,而不是循环中的查询。

你可以写:

SELECT f.*, u.* FROM `friends` f LEFT JOIN `users` u ON (u.user_id = f.friend_id) WHERE f.`user_id`='{$logged_user_id}' AND f.`friend_id`!='{$logged_user_id}' AND f.`accepted`='1'"

同样跳过if($_SESSION['user_id'] != $user_id),如果会话var不等于$user_id,则始终为true。更少的代码,更少的错误。

编辑:你从哪里得到$username