0

データベースから行を取得する友達ページがあります。現在のユーザーの友達のみを表示したいのですが、クエリから現在のユーザーのみが返されます。

データベーステーブル:

ここに画像の説明を入力してください

現在のコード:

function getFriends($user_id, $sqli_con) {
    $user_id = mysqli_escape_string($sqli_con, strip_tags($user_id));

    $results = $sqli_con->query("SELECT * FROM friends WHERE receiver_id = '$user_id' AND accepted = '1' OR sender_id = '$user_id' AND accepted = '1'");

    if($results->num_rows > 0) {

        while($row = $results->fetch_array(MYSQLI_ASSOC)) {
            if($row['receiver_id'] === $user_id || $row['sender_id'] === $user_id) {

            } else {
                $username_stmt = $sqli_con->prepare("SELECT id, username FROM members WHERE id = {$row['receiver_id']} OR id = {$row['sender_id']}");
                $username_stmt->execute();
                $username_stmt->store_result();
                $username_stmt->bind_result($id, $username);
                $username_stmt->fetch();
                $username_stmt->close();
                $results->free();

                return "

                    <div id='friend'>
                        <a href='profile.php?id=".$id."'><img src='". getProfileImagePath($id, $sqli_con) . "' /></a>
                        <a href='profile.php?id=".$id."'>". $username . "</a>
                    </div>

                ";
            }

        }

    } else {
        $results->free();
        return "You don't have any friends yet! :( Why not search for some?";
    }
}

現在、結果は返されませんが、ユーザーIDチェックを取得すると、現在のユーザーのみが返されます。

編集:私はそれを機能させました、解決策:

function getFriends($user_id, $sqli_con) {
    $user_id = mysqli_escape_string($sqli_con, strip_tags($user_id));

    $results = $sqli_con->query("SELECT * FROM friends WHERE (receiver_id = '$user_id' OR sender_id = '$user_id') AND accepted = '1'");

    if($results->num_rows > 0) {

        while($row = $results->fetch_array(MYSQLI_ASSOC)) {
            if($row['sender_id'] !== $user_id) {
                $username_stmt = $sqli_con->prepare("SELECT username FROM members WHERE id = {$row['sender_id']}");
                $username_stmt->execute();
                $username_stmt->store_result();
                $username_stmt->bind_result($username);
                $username_stmt->fetch();
                $username_stmt->close();

                echo "

                    <div id='friend'>
                        <a href='profile.php?id=".$row['sender_id']."'><img src='". getProfileImagePath($row['sender_id'], $sqli_con) . "' /></a>
                        <a href='profile.php?id=".$row['sender_id']."'>". $username . "</a>
                    </div>

                ";
            }
            if($row['receiver_id'] !== $user_id) {
                $username_stmt = $sqli_con->prepare("SELECT username FROM members WHERE id = {$row['receiver_id']}");
                $username_stmt->execute();
                $username_stmt->store_result();
                $username_stmt->bind_result($username);
                $username_stmt->fetch();
                $username_stmt->close();

                echo "

                    <div id='friend'>
                        <a href='profile.php?id=".$row['receiver_id']."'><img src='". getProfileImagePath($row['receiver_id'], $sqli_con) . "' /></a>
                        <a href='profile.php?id=".$row['receiver_id']."'>". $username . "</a>
                    </div>

                ";
            }
        }

    } else {
        $results->free();
        return "You don't have any friends yet! :( Why not search for some?";
    }
}

きれいではありませんが、それで十分です。助けてくれてありがとう(複数のエントリでテストされ、動作します)

4

2 に答える 2

0

$user_id結果のレコードセットには常に存在しませんか?

レコードを無視する代わりに$user_id、結果セットからすべてを処理する必要があります。レコード内の他のIDを抽出すると、他の列に友達IDが表示されます。

また、レコードセット内の複数のレコードに対するLimの提案を実装します。

于 2013-01-21T11:41:13.027 に答える
0

ループ内から戻ってきました。次のようなものを試してください:

$result_string = '';
// the loop definition here
$result_string .= "<div id='friend'>
                        <a href='profile.php?id=".$id."'><img src='". getProfileImagePath($id, $sqli_con) . "' /></a>
                        <a href='profile.php?id=".$id."'>". $username . "</a>
                   </div>";
// closing the loop
return $result_string;
于 2013-01-21T11:32:54.340 に答える