0

私は自宅で PHP PDO を独学するプロジェクトに取り組んでいます。私のプロジェクトは、基本的なバージョンの twitter をゼロから作成することです。しかし、私は立ち往生しています。私がやりたいことは、うまくできるユーザーのリスト(ID順)を表示することですが、そのユーザーのリストの横に、現在ログインしているユーザーがその人をフォローしているかどうかを表示したいので、それらをフォローまたはフォロー解除するためのリンク。私が見る限り、これは本当に配列と foreach ループに関する質問です。

データベース内の関連する 2 つのテーブルは次のようになります (サンプル データを含む)。

ユーザー:
ID | ユーザー名
1 | ジョシュ
2 | サム
3 | ジェーン

以下:
user_id | follower_id
2 | 1
3 | 1

たとえば、現在ログインしているユーザー Josh (ID 1) は、Sam (ID 2) をフォローしています。次のデータベース行は、follower_id 1、user_id 2 となります。

すべてのユーザーの ID とユーザー名を表示する 2 つの関数と、現在ログインしているユーザーがフォローしているユーザーを表示する関数を作成しました。どうぞ:

    function show_users(){
        $sql = "select id, username from users order by id";
        $stmt = $GLOBALS['db']->prepare($sql);
        $stmt->execute();
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);        
        return $result;
    }

    function check_follow($userid){
        $sql= "SELECT DISTINCT user_id FROM following WHERE follower_id = '$userid' ";
        $stmt = $GLOBALS['db']->prepare($sql);
        $stmt->execute();
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $result;
    }

ID 順に並べられたユーザーのリストを表示したいだけの場合、これはすべて正常に機能します。

しかし、私がやりたいのは、ユーザーのリストの横に、その人をフォローしているかどうかを示す列を表示し、「フォロー」または「フォロー解除」へのリンクを提供することです。

現在、私のページの関連部分は次のようになっています。

<?php

$userid = $_SESSION['user']['id'];
$following = check_follow($userid);
$rows = show_users();

?> 

<h1>Follow list</h1> 
<table> 
    <tr> 
        <th>id</th> 
        <th>Username</th>
        <th>Follow status</th> 
    </tr> 
<?php foreach($rows as $row): ?> 
    <tr> 
        <td><?php echo $row['id']; ?></td> 
        <td><?php echo $row['username']; ?></td>
        <td><?php 
            if (in_array($following, $rows)){
                echo "<a href='#'>unfollow</a>";
            }else{
                echo "<a href='#'>follow</a>"; } ?>
    </td> 
    </tr> 
    <?php endforeach; ?> 
</table>

すべてが正常に機能します (私がフォローしている/フォローしていないショーを除く)。一部の人には「フォロー」リンクが表示されず、他の人には「フォロー解除」リンクが表示されません!

私はこれに何時間も費やしました。配列、foreach、in_array、PDO fetch ステートメント、およびさまざまなデータの出力に関するチュートリアルを読みましたが、どれも役に立ちません。そこにあるもののほとんどが非pdoであることも役に立ちません。

SOS :)

4

2 に答える 2