2016-04-08 17 views
0

Ich habe eine Tabelle flagged_posts in meiner Datenbank genannt, und es hat die folgenden Spalten:angezeigten Link, wenn keine Zeile in der Datenbank vorhanden ist, sonst Text anzeigen

id 
thought_id 
flagged_by_id 

Was ich versuche zu tun, dass, wenn die Der angemeldete Benutzer hat den Post bereits markiert. Erlauben Sie ihm nicht, den Post erneut zu kennzeichnen, und ich versuche, dies zu erreichen, indem ich den Anker-Link entferne und ihn durch eine Nachricht ersetze.

Hier ist ein Ausschnitt aus meinem Code:

<?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>";     
} 
?> 

Also gehe ich davon bin als Conor angemeldet. Conor hat eine id von 8 (ID erhalten von users Tabelle). Conor kennzeichnet einen Post mit der ID 209 (gedanken_id erhalten aus der Tabelle user_thoughts). Also in meiner flagged posts Tabelle, werde ich die folgende Zeile sehen:

id: 1 
thought_id: 209 
flagged_by_id: 8 

Im Moment weder Link noch die Meldung erscheint. Wenn ich meine Abfrage ändere, dh $see_if_flagged_q2 = mysqli_query($connect, "SELECT * FROM flagged_posts "); (entfernt die WHERE-Klausel), bekomme ich die Nachricht Flagged viermal echo (weil es vier Zeilen in der flagged_posts Tabelle gibt und sie sind Echos in jedem Beitrag, auch diejenigen, die nicht markiert wurden durch den angemeldeten Benutzer

Update:.

Hier ist der aktualisierte Code zunächst:

  $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"; 
         } 

Mit dem oben der Link jetzt für alle Beiträge angezeigt wird, auch wenn sie markiert Ich habe Echo $flagged_post_by_id und '$ logged_in_user_id', die beide den Wert 12 zurückgeben (die ID von Conor aus der Tabelle users). Die Werte sind korrekt und die Anzahl der von $test_num zurückgegebenen Zeilen ist ebenfalls korrekt.

Antwort

1

Ok, hier ist eine Überarbeitung Ihres ursprünglichen Codes. Ich habe den Datenerfassungsteil nach vorne verschoben, also haben wir einen Setup-Abschnitt, bevor wir die while-Schleife über die Gedanken ausführen. Ich habe hier und da einen Variablennamen geändert. Im Grunde erstellen wir eine Liste von markierten Einträgen, und in der while-Schleife ist der Job einfacher. Wenn sich die aktuelle Zeilen-ID im Flaged_posts-Array befindet, wird sie markiert, andernfalls wird die Verknüpfung angezeigt.

// 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

Dies scheint teilweise zu funktionieren. Ich hatte einen "Gedanken" mit einer "ID" von "210", die vom angemeldeten Benutzer markiert wurde. Als ich zu diesem Gedanken ging, hieß es "Gekennzeichnet" und die nicht markierten, stellte den Link zur Verfügung, der genau was ist Ich will. Dann entschied ich mich jedoch, alle Zeilen in meiner 'flagged_posts'-Tabelle zu löschen, und ich sah dann undefinierte Variablenfehler in' $ flagged_posts' und 'in_array() erwartet, dass Parameter 2 array, null ist '. Grundsätzlich, wenn keine Zeilen in der 'flagged_posts'-Tabelle sind, bekomme ich die Fehler. Wenn es eine Zeile gibt, dann funktioniert der Code genau so, wie ich es möchte. Teil 1/2. – Freddy

+0

Ich habe manuell eine Zeile in die 'flagged_posts'-Tabelle eingefügt, mit der Angabe' thought_id' von '212' (die nicht existiert), wurde vom Benutzer mit der ID '12' (angemeldeter Benutzer) markiert. Und dann funktioniert der Code. Es scheint so, als müsste nur eine Zeile in der 'flagged_posts'-Tabelle existieren, um zu funktionieren. Teil 2/2. – Freddy

+0

Ah, ich habe es gerade nochmal getestet. Also bin ich als Conor angemeldet, der eine ID von 12 hat. Wenn die 'flagged_thougts' Tabelle keine Zeile hat, die eine' flagged_by_id' von 12 hat, dann werden die Fehler auf der Seite angezeigt. – Freddy

Verwandte Themen