Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] 2 Tabellen abfragen mittels while

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] 2 Tabellen abfragen mittels while

    Der Titel ist vielleicht falsch gewählt, aber mir fällt kein besserer ein. Daher kommer ich gleich zum Thema.

    Ziel meines Projektes: Zu einer Nachricht seine Meinung sagen, wie Like oder dislike. Dies soll jeder User aber ein einziges Mal machen können. Da die User in einer Datenbank sind, kann ich deren id nehmen und diese in einer separaten Tabelle (voted) abspeichern. Beim laden der Startseite wird also diese Tabelle abgefragt und dementsprechend per if und echo der Link angezeigt oder nur ein Text mit: Du hast schon gestimmt.

    Ich Frage eine Tabelle ab:
    Da der Inhalt auf der Webseite generiert wird wird die erste Tabelle mittels while() Schleife abgefragt. Zu jeder Nachricht sollen also die Links zu Like dislike generiert werden, paralell zu jeder Nachricht, da sonst keine Logik besteht.

    Jedoch bekomme ich nur immer die letzte Nachricht mit Link aktiv oder eben nicht aktiv, den rest jedoch nicht. ( Bei 4 Nachrichten wird nur die letzte angezeigt)

    So sieht mein Code zu diesem Problem aus (Join habe ich auch ausprobiert, jedoch werden dann die Nachrichten * Anzahl Zeilen aus voted angezeigt und wenn keine Zeile in Voted dabei wird gar nichts angezeigt).

    PHP-Code:
    $abfrage "SELECT nachricht, name, vorname, datum, id, magich, magichnicht, benutzerid FROM nachricht ORDER BY id DESC";
    $ergebnis mysql_query($abfrage);
    while(
    $row mysql_fetch_object($ergebnis))
        { 

    $nachricht_nachricht $row->nachricht;
    $nachricht_name $row->name;
    $nachricht_vorname $row->vorname;
    $nachricht_datum date("d.m.Y H:i",$row->datum);
    $nachricht_id $row->id;
    $nachricht_magich $row->magich;
    $nachricht_magichnicht $row->magichnicht;
    $nachricht_benutzerid $row->benutzerid;

    echo 
    "<div id=\"nachrichten_freunde\"><div id=\"anmelden_align\">
    <table width=\"480px\">
    <tr>
    <td width=\"350px\">
    <span style=\"font-size:0.9em\">&raquo; <a href=\"profil.php?vorname=
    $nachricht_vorname&name=$nachricht_name\"> $nachricht_vorname $nachricht_name </a> meint:</span>
    </td>
    <td width=\"130px\">
    <span style=\"font-size:0.9em\">
    $nachricht_datum</span>
    </td>
    </tr>
    </table>
    </div><div id=\"nachrichten_align\">
    $nachricht_nachricht</div>
    <table width=\"480px\">
    <tr>"
    ;

    $abfrage "SELECT benutzeridvoted, nachrichtidvoted FROM voted WHERE benutzeridvoted = '$id' AND nachrichtidvoted = '$nachricht_id' ";
    $ergebnis mysql_query($abfrage);
    $row mysql_fetch_object($ergebnis);

    $voted_nachrichtid $row->nachrichtidvoted;
    $voted_benutzeridvoted $row->benutzeridvoted;

    if(
    $nachricht_id == "$voted_nachrichtidand $nachricht_benutzerid == "$id") { 
    echo 
    "
    <td width=\"380px\"><span style=\"font-size:0.7em\">&nbsp;&nbsp; 
    $nachricht_magich m&ouml;gen dies</a>,&nbsp; $nachricht_magichnicht m&ouml;gen dies nicht, du hast schon gestimmt</span></td>";
    }
    else{
    echo 
    "<td width=\"200px\"><span style=\"font-size:0.7em\">&nbsp;&nbsp; <a href=\"magich.php?id=$nachricht_id\"> $nachricht_magich m&ouml;gen dies</a>,&nbsp; <a href=\"magichnicht.php?id=$nachricht_id\"> $nachricht_magichicht m&ouml;gen dies nicht</a></span></td>";

    Kann mir jemand bei diesem Problem helfen?

  • #2
    Ich weiß nicht ob es so sinnvoll ist in der While-Schleife die Variable, die die Schleife verwendet, zu überschreiben.

    Des Weiteren würde ich dir immer empfehlen das ganze erst in ein Array zu speichern und danach auszugeben. Wird einfach übersichtlicher.

    Kommentar


    • #3
      Die Reihenfolge stimmt nicht. Du holst dir was aus der Datenbank und gibst es aus, danach verarbeitest du Werte, die werden aber nicht mehr ausgegeben.

      Stell den Code um, zuerst die Datenverarbeitung, danach erst das Auslesen der Inhalte und die Ausgabe. So stellst du sicher, das im Verarbeitungsfall nachfolgend auch die geänderten Daten ausgelesen werden.

      Trenne Code und HTML strikter... du kannst dein Problem lösen, in dem du oben einen großen Codeblock hast, der alles erledigt und im unteren Teil hast du nur noch HTML gespickt mit ein bischen PHP Code für die Ausgabe.

      Das Prinzip nennt sich EVA - Eingabe, Verarbeitung, Ausgabe.

      edit: ups.. da steht ja gar kein UPDATE
      ja in dem Fall stimmt trvlr's Tipp auffallend
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #4
        ich wusste dass ich irgendwas simples falsch gemacht habe, ich muss das ganze aber zu erst testen bevor dieser Beitrag abgeschlossen wird, danke für die Antwort!

        edit: Ich hatte wohl zu wenig schlaf in den letzten Tagen dass mir sowas nicht auffällt, hat super geklappt! Danke

        Kommentar

        Lädt...
        X