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
4

2 に答える 2

1

最初の SQL クエリでは、同じ変数を 2 回使用してフィルタリングします。

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

これでは、期待した結果が得られない可能性があります。

print_r($row)データベースから期待される結果が得られるかどうかを確認するために追加して、クエリが希望どおりに実行されることを確認できます。

于 2013-07-31T12:28:07.583 に答える
0

ループ内のクエリではなく、1 つのクエリを使用することをお勧めします。

あなたは書ける:

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 が と等しくなかった場合は常に true になります$user_id。コードが少なく、バグが少ない。

編集:どこから入手してい$usernameますか?

于 2013-07-31T12:45:00.840 に答える