我正在我的网站上实现一个朋友列表系统,我已经让它显示已经接受的朋友的名字(因此接受的值为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
?