2016-04-08 61 views
0

私はテーブルが私のデータベースに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によって返される行数も正しいです。

答えて

1

元に戻って元のコードを修正しました。私はデータ収集を前に進めました。そこで、私たちは思考のwhileループを実行する前にセットアップセクションを持っています。私はここで変数名を変更しました。基本的には、フラグが立てられたエントリのリストを作成し、whileループではその作業は簡単です。現在の行IDがflagged_posts配列にある場合はフラグが付けられ、それ以外の場合はリンクが表示されます。

// get the id of the current user 
$user_id_q = mysqli_query($connect, "SELECT id FROM users WHERE username = '$username'"); 
$getting_deets = mysqli_fetch_assoc($user_id_q); 
$logged_in_user_id = $getting_deets['id']; 

// build array of posts flagged by current user 
$flagged_posts_q = mysqli_query($connect, "SELECT thought_id FROM flagged_posts WHERE flagged_by_id = '$logged_in_user_id'"); 
$flagged_posts = array(); 
while ($row = mysqli_fetch_array($flagged_posts_q)) { 
    $flagged_posts[] = $row['thought_id']; 
} 

$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)) { 
    //You could just use $row['foo'] down below, and skip all this 
    /* 
    $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']; 
    */ 

    echo "<div class='more_options' style='float: right;'>"; 
     if (in_array($row['id'], $flagged_posts)){ 
      echo "Flagged"; 
     } else { 
      echo "<a href='/inc/flagged_post.php?id=".$row['id']."'> Flag </a>"; 
     } 
    echo "</div>";     
} 
+0

これは部分的に機能するようです。私はログインしたユーザーによってフラグが立てられた「id」の「210」の「思考」を持っていました。私がその考えに行ったとき、それは「フラグ付き」とフラグなしのものがリンクを提供しました。が欲しいです。しかし、私は 'flagged_posts'テーブル内のすべての行をクリアすることにしました。そして、' $ flagged_posts'で未定義の変数エラーを見て、 'in_array()はパラメータ2が配列、nullでは'を期待しています。基本的に、 'flagged_posts'テーブルに行がないときは、エラーが出ます。行がある場合、コードは正確にどのように動作しますか?パート1/2。 – Freddy

+0

私は手動で、 '212'の' thought_id'(存在しない)と '12'のユーザー(ログインしたユーザー)がフラグを立てている' flagged_posts'テーブルに行を挿入しました。そしてコードが動作します。動作させるには 'flagged_posts'テーブルに存在する行が必要なようです。パート2/2。 – Freddy

+0

ああ、私はちょうどもう一度テストしました。だから私は12のIDを持つConorとしてログインしています。 'flagged_thoughts'テーブルに' flagged_by_id'が12の行がない場合、そのページにエラーが表示されます。 – Freddy

関連する問題