私は自宅で 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 :)