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