1

我正在我的网站上实现一个朋友列表系统,我已经让它显示已接受的朋友姓名(因此接受的值为 1),当我访问虚拟帐户时,我可以看到他们的朋友,但是当我我以虚拟帐户登录,我也可以看到,我什至手动将数据库中的 user_id 更改为“1”,然后注销并登录,发现它只能使用 1 的 user_id,这是代码。它还不是 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
4

2 回答 2

1

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

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

这可能不会给您预期的结果。

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

于 2013-07-31T12:28:07.583 回答
0

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

你可以写:

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'"

也 skip if($_SESSION['user_id'] != $user_id),如果 session var 不等于 ,它总是正确的$user_id。更少的代码,更少的错误。

编辑:你从哪里得到$username

于 2013-07-31T12:45:00.840 回答