私はテーブルが私のデータベースにflagged_posts
と呼ばれていて、それは次の列があります。そうでない場合は、テキスト表示、リンクを表示
id
thought_id
flagged_by_id
私は何をしようとしていることですが、もしログインしているユーザーがすでに投稿にフラグを立てている場合は、投稿に再びフラグを立てられないようにしてください。アンカーリンクを削除し、メッセージで置き換えてこれを達成しようとしています。ここで
は、私のコードの抜粋です:
<?php
$query = mysqli_query($connect, "SELECT * FROM user_thoughts WHERE added_by='$user' AND shared ='yes' "."ORDER BY id DESC LIMIT {$start}, {$limit}");
while ($row = mysqli_fetch_array($query)) {
$thought_id = $row['id'];
$message_content = $row['message'];
$date_of_msg = $row['post_details'];
$thoughts_by = $row['added_by'];
$attachent = $row['attachment'];
$shared = $row['shared'];
// getting the id of the user who is logged in.
$see_if_flagged_q = mysqli_query($connect, "SELECT id FROM users WHERE username = '$username'");
$getting_deets = mysqli_fetch_assoc ($see_if_flagged_q);
$logged_in_user_id = $getting_deets ['id'];
echo "
<div class='more_options' style='float: right;'>";
$see_if_flagged_q2 = mysqli_query($connect, "SELECT * FROM flagged_posts WHERE flagged_by_id ='$logged_in_user_id' ");
while ($getting_deets2 = mysqli_fetch_assoc ($see_if_flagged_q2)){
$flagged_post_by_id = $getting_deets2 ['flagged_by_id'];
// If the user logged in has not flagged the post, i.e. there is no data in the database ..
// .. which says their user id has flagged this thought_id.. then display the link...
if ($logged_in_user_id == $flagged_post_by_id){
echo "<a href='/inc/flagged_post.php?id=$thought_id'> Flag </a>";
}
// if there is data stating this user has flagged this thought_id, then echo a message
if ($logged_in_user_id != $flagged_post_by_id) {
echo "Flagged";
}
}
echo " </div>";
}
?>
だから私はConor
としてログインしていますと仮定します。 Conorはid
が8です(idはusers
テーブルから取得)。 Conorはidが209(think_idはuser_thoughts
テーブルから取得)のポストにフラグを立てます。だから私のflagged posts
の表に、私は次の行が表示されます:現時点で
id: 1
thought_id: 209
flagged_by_id: 8
を、どちらのリンクもメッセージが表示されています。私がクエリを変更した場合は、のメッセージが4回返されます(flagged_posts
テーブルに4行あり、すべての投稿にエコーが記録されているため、フラグが設定されていないものもあります) 。ログインしているユーザー
アップデートによって:
ここではまず、すべての更新されたコードです:上記で
$see_if_flagged_q2 = mysqli_query($connect, "SELECT * FROM flagged_posts WHERE flagged_by_id = '$logged_in_user_id'");
$test_num = mysqli_num_rows ($see_if_flagged_q2);
$getting_deets2 = mysqli_fetch_assoc ($see_if_flagged_q2);
$flagged_post_by_id = $getting_deets2['flagged_by_id'];
if ($flagged_post_by_id == $logged_in_user_id){
echo "<a href='/inc/flagged_post.php?id=$thought_id'> Flag </a>";
echo $test_num;
}
if ($flagged_post_by_id != $logged_in_user_id) {
echo "Flagged";
}
は、リンクは、彼らがしている場合でも、現在すべての記事のために表示されます私は両方のecho'dを持っている$flagged_post_by_id
と '$ logged_in_user_id'は両方とも12の値を返します(users
テーブルのConorのID)。値は正しく、$test_num
によって返される行数も正しいです。
これは部分的に機能するようです。私はログインしたユーザーによってフラグが立てられた「id」の「210」の「思考」を持っていました。私がその考えに行ったとき、それは「フラグ付き」とフラグなしのものがリンクを提供しました。が欲しいです。しかし、私は 'flagged_posts'テーブル内のすべての行をクリアすることにしました。そして、' $ flagged_posts'で未定義の変数エラーを見て、 'in_array()はパラメータ2が配列、nullでは'を期待しています。基本的に、 'flagged_posts'テーブルに行がないときは、エラーが出ます。行がある場合、コードは正確にどのように動作しますか?パート1/2。 – Freddy
私は手動で、 '212'の' thought_id'(存在しない)と '12'のユーザー(ログインしたユーザー)がフラグを立てている' flagged_posts'テーブルに行を挿入しました。そしてコードが動作します。動作させるには 'flagged_posts'テーブルに存在する行が必要なようです。パート2/2。 – Freddy
ああ、私はちょうどもう一度テストしました。だから私は12のIDを持つConorとしてログインしています。 'flagged_thoughts'テーブルに' flagged_by_id'が12の行がない場合、そのページにエラーが表示されます。 – Freddy