• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Variable in SQL-Befehl speicher- und einsetzbar?

Status
Für weitere Antworten geschlossen.

muderseb

Neues Mitglied
Hallo zusammen,

bin noch blutiger PHP-Anfänger, kein Fachprogrammierer und baue daher auf eure Hilfe bei folgendem

Vorhaben: Mittels PHP möchte ich erreichen, dass zu jedem auf meiner Website erstellten Artikel automatisch eine entsprechende Kommentarsektion beigefügt wird. Dazu habe ich eine Datei [artikelII.php] erstellt, die auf zwei Tabellen in meiner MySQL-Datenbank zugreift, die ich über phpMyAdmin erstellt habe. In der ersten, sind die Artikel aufgelistet, in der zweiten Kommentare zu allen diesen Artikeln. In dieser zweiten Tabelle gibt es eine Spalte NEWS_ID. Da sich unter jedem Artikel ein kleines Formular zum Eingeben eines Kommentars befindet, kann ich über ein HTML-input-Tag, dass auf "hidden" gesetzt ist, jeweils die zu dem News-Artikel zugehörige ID festlegen, die beim Senden des Kommentars an die Kommentar-Tabelle meiner Datenbank auch einwandfrei übergeben wird. Wenn ich jedoch über einen SELECT...FROM...WHERE die jeweils gültigen (d.h. mit der entsprechenden NEWS_ID versehen) Kommentare aus dieser Tabelle auslesen möchte, kommt es zu folgendem

Problem: In einer Schleife sollen zunächst die bisherigen Artikel aufgelistet werden, um dabei in einer weiteren Schleife in der Schleife die jeweils passenden Kommentare auszuspucken. Daher habe ich den SELECT-Query für die Kommentartabelle wie folgt aufgebaut:

PHP:
// Daten aus Tabelle für Kommentare werden ausgewählt.
$sq2 =     "SELECT
                    Inhalt,
                    Autor,
                    Datum
                FROM
                    kommentare
                WHERE
                    NEWS_ID = '$mehrnews'";
Davor habe ich die Variable $mehrnews definiert als

PHP:
$mehrnews = $newsid++;
und diese wiederum mit der Zahl 1 belegt.

Die Idee ist nun, dass bei jedem Schleifendurchlauf, bei dem $sql2 zum Einsatz kommt, sich die Variable $mehrnews um 1 erhöht, so dass mit jedem hinzugefügten Artikel immer auch nur diejenigen Kommentare aufgeführt werden, welche die passende NEWS_ID besitzen.

Hier noch mal zur Erläuterung der entsprechende Code aus der Datei artikelII.php. Das Formular etc. funktioniert prima.

PHP:
// Hier wird der Startwert der NEWS_ID zur Verwendung im unten folgenden Formular festgelegt.

$newsid = 1;

// Daten aus Tabelle für Artikel werden ausgewählt
$sq1 = "SELECT
                    Titel,
                    Inhalt,
                    Autor
                FROM
                    Artikel";

$result1 = mysql_query($sq1) OR die(mysql_error());

// Daten aus Tabelle für Kommentare werden ausgewählt.
$sq2 =     "SELECT
                    Inhalt,
                    Autor,
                    Datum
                FROM
                    kommentare
                WHERE
                    NEWS_ID = '$mehrnews'";

$result2 = mysql_query($sq2) OR die(mysql_error());

// Ab hier wird dann die Website zusammengebaut.

            echo "<div id=\"Grundstruktur\">\n";
if (mysql_num_rows($result1)) {
        while($row = mysql_fetch_assoc($result1)) {
            echo "<div class=\"Artikel\">\n";
            echo "<h1>\n";
            echo $row["Titel"];
            echo "</h1>\n";
            echo "<p>\n";
            echo $row["Inhalt"];
            echo "</p>\n";
            echo "<p>\n";
            echo $row["Autor"];
            echo "</p>\n";
            // Ab hier wird der jweilige Kommentarabschnitt eingebaut...        
            echo "<div class=\"comments\">\n";
            echo "<h1>\n";
            echo "Letzte Kommentare\n";
            echo "</h1>\n";
            if (mysql_num_rows($result2)) {
        while($row = mysql_fetch_assoc($result2)) {
            echo "<p>\n";
            echo $row["Inhalt"];
            echo "\n";
            echo "<br />\n";
            echo $row["Autor"];
            echo ", am ";
            echo $row["Datum"];
            echo "\n";
            echo "</p>\n";
        }
        mysql_data_seek ($result2, 0);
} else {
            echo "<p>Leider momentan kein Kommentar vorhanden.</p>\n";
        }
        // ...und hier das entsprechende Formular.
        echo    "<form action=\"formular.php\" method=\"post\">\n";
        echo      "<textarea class=\"Kommentarfeld\" name=\"Inhalt\" title=\"Hier können Sie Ihren eigenen Kommentar eingeben.\" cols=\"31\" rows=\"3\" ></textarea>\n";
        echo            "<input class=\"Name\" name=\"Autor\" title=\"Tragen Sie hier bitte Ihren Namen ein.\" type=\"text\" size=\"18\" maxlength=\"25\" value=\"Ihr Name\" />\n";
        echo      "<input class=\"Absende-Button\" type=\"submit\" value=\"Absenden\" title=\"Klicken Sie hier, um Ihren Kommentar abzusenden.\" />\n";
        echo      "<input class=\"News-ID\" type=\"hidden\" name=\"NEWS_ID\" value=\"";
        echo            $newsid;
        echo            "\" />\n";
        echo    "</form>\n";
        echo "</div>\n";
        // Ende des Kommentarabschnitts.
        $newsid++;        
        }
} else {
            echo "<p>Leider momentan kein Artikel vorhanden.<p>\n";
        }
        
            echo "</div>\n"; // Ende
            echo "</div>\n";        
            echo "</div>\n";        
?>
Vielleicht ist es ja nur ein dummer kleiner Fehler... jedenfalls hat er mich die letzten Tage gekostet, und nachdem ich bisher auch in Foren bei bereits vorhandenen Beiträgen nicht fündig geworden bin, hoffe ich auf den entscheidenden Tipp von euch.

Viele Grüße,
Sebastian
 
Du müsstest das Statement, welches die Kommentare zu einem Artikel ausliest innerhalb der while-Schleife die die Artikel ausliest ausführen. Also (kurz skizziert):

Code:
$sql = "artikel laden...";
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result))
{
?>Ausgabe von Artikel<?
$sql = "kommentare zum artikel $row["id"] laden ...";
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result))
{
?>Kommentare zum Artikel anzeigen<?
}
}
 
Hallo nochmal!

Erst mal danke für die hilfreiche Antwort. Ich war allerdings bisher in der Tat der Auffassung, ich würde das Auslesen der Kommentartabelle per While-Schleife innerhalb der Artikelschleife vollziehen (siehe meinen Code oben). Nach Abgleich mit Deiner Skizze habe ich leider nicht die Stelle gefunden, wo bei mir offenkundig ein Fehler liegt. Kannst Du (oder jemand anderes) mir da noch einmal Hilfestellung geben?

Beste Grüße,
Sebastian
 
Code:
[COLOR=#0000bb]$sq2 [/COLOR][COLOR=#007700]=     [/COLOR][COLOR=#dd0000]"SELECT
                    Inhalt,
                    Autor,
                    Datum
                FROM
                    kommentare
                WHERE
                    NEWS_ID = '".$mehrnews."'"[/COLOR][COLOR=#007700];
[/COLOR]


Innerhalb von einfachen Anführungszeichen werden variablen nicht ersetzt.
 
Hallo,

nochmals danke für diesen nächsten Hinweis. Leider führt der immer noch nicht zum gewünschten Ergebnis *solangsamamverzweifelnbin*.

Wenn ich artikelII.php ausgebe, werden nur die Kommentare mit der NEWS_ID = 1 geladen, obwohl auch einer mit 2 vorhanden ist in der entsprechenden Tabelle. Ulkigerweise lässt sich die dieselbe Variable gut innerhalb des Formulars anwenden, wo sie tatsächlich die jeweils richtige NEWS_ID mit anhängt, die auch ihren Weg in die Tabelle findet - nur leider wird eben alles über 1 nicht ausgegeben.

Hier noch mal der leicht veränderte Code der Datei im Ganzen:

PHP:
<?php

// Hier wird der Startwert der NEWS_ID zur Verwendung im unten folgenden Formular festgelegt.

$newsid = 1;

// Daten aus Tabelle für Artikel werden ausgewählt
$sq1 = "SELECT
                    Titel,
                    Inhalt,
                    Autor
                FROM
                    Artikel";

$result1 = mysql_query($sq1) OR die(mysql_error());

// Daten aus Tabelle für Kommentare werden ausgewählt.
$sq2 =     "SELECT
                    Inhalt,
                    Autor,
                    Datum
                FROM
                    kommentare
                WHERE
                    NEWS_ID = '".$newsid++."'";

$result2 = mysql_query($sq2) OR die(mysql_error());

// Ab hier wird dann die Website zusammengebaut.

            echo "<div id=\"Grundstruktur\">\n";
if (mysql_num_rows($result1)) {
        while($row = mysql_fetch_assoc($result1)) {
            echo "<div class=\"Artikel\">\n";
            echo "<h1>\n";
            echo $row["Titel"];
            echo "</h1>\n";
            echo "<p>\n";
            echo $row["Inhalt"];
            echo "</p>\n";
            echo "<p>\n";
            echo $row["Autor"];
            echo "</p>\n";
            // Ab hier wird der jweilige Kommentarabschnitt eingebaut...        
            echo "<div class=\"comments\">\n";
            echo "<h1>\n";
            echo "Letzte Kommentare\n";
            echo "</h1>\n";
            if (mysql_num_rows($result2)) {
        while($row = mysql_fetch_assoc($result2)) {
            echo "<p>\n";
            echo $row["Inhalt"];
            echo "\n";
            echo "<br />\n";
            echo $row["Autor"];
            echo ", am ";
            echo $row["Datum"];
            echo "\n";
            echo "</p>\n";
        }
        mysql_data_seek ($result2, 0);
} else {
            echo "<p>Leider momentan kein Kommentar vorhanden.</p>\n";
        }
        // ...und hier das entsprechende Formular.
        echo    "<form action=\"formular.php\" method=\"post\">\n";
        echo      "<textarea class=\"Kommentarfeld\" name=\"Inhalt\" title=\"Hier können Sie Ihren eigenen Kommentar eingeben.\" cols=\"31\" rows=\"3\" ></textarea>\n";
        echo            "<input class=\"Name\" name=\"Autor\" title=\"Tragen Sie hier bitte Ihren Namen ein.\" type=\"text\" size=\"18\" maxlength=\"25\" value=\"Ihr Name\" />\n";
        echo      "<input class=\"Absende-Button\" type=\"submit\" value=\"Absenden\" title=\"Klicken Sie hier, um Ihren Kommentar abzusenden.\" />\n";
        echo      "<input class=\"News-ID\" type=\"hidden\" name=\"NEWS_ID\" value=\"";
        echo            $newsid++ - 1;
        echo            "\" />\n";
        echo    "</form>\n";
        echo "</div>\n";
        // Ende des Kommentarabschnitts.        
        }
} else {
            echo "<p>Leider momentan kein Artikel vorhanden.<p>\n";
        }
        
            echo "</div>\n"; // Ende
            echo "</div>\n";        
            echo "</div>\n";        
?>
In der Hoffnung auf den erlösenden Tipp,
Sebastian
 
:roll: Den Tipp gab ich schonmal, jetz änder ich mal direkt in deinem Code ...

Code:
   <?php

// Hier wird der Startwert der NEWS_ID zur Verwendung im unten folgenden Formular festgelegt.

$newsid = 1;

// Daten aus Tabelle für Artikel werden ausgewählt
$sq1 = "SELECT
                    Titel,
                    Inhalt,
                    Autor
ID
                FROM
                    Artikel";

$result1 = mysql_query($sq1) OR die(mysql_error());

// Ab hier wird dann die Website zusammengebaut.

            echo "<div id=\"Grundstruktur\">\n";
if (mysql_num_rows($result1)) {
        while($row = mysql_fetch_assoc($result1)) {
            echo "<div class=\"Artikel\">\n";
            echo "<h1>\n";
            echo $row["Titel"];
            echo "</h1>\n";
            echo "<p>\n";
            echo $row["Inhalt"];
            echo "</p>\n";
            echo "<p>\n";
            echo $row["Autor"];
            echo "</p>\n";
            // Ab hier wird der jweilige Kommentarabschnitt eingebaut...        
// Daten aus Tabelle für Kommentare werden ausgewählt.
$sq2 =     "SELECT
                    Inhalt,
                    Autor,
                    Datum
                FROM
                    kommentare
                WHERE
                    NEWS_ID = '".$row['ID']."'";
$result2 = mysql_query($sq2) OR die(mysql_error());
            echo "<div class=\"comments\">\n";
            echo "<h1>\n";
            echo "Letzte Kommentare\n";
            echo "</h1>\n";
            if (mysql_num_rows($result2)) {
        while($row = mysql_fetch_assoc($result2)) {
            echo "<p>\n";
            echo $row["Inhalt"];
            echo "\n";
            echo "<br />\n";
            echo $row["Autor"];
            echo ", am ";
            echo $row["Datum"];
            echo "\n";
            echo "</p>\n";
        }
        mysql_data_seek ($result2, 0);
} else {
            echo "<p>Leider momentan kein Kommentar vorhanden.</p>\n";
        }
        // ...und hier das entsprechende Formular.
        echo    "<form action=\"formular.php\" method=\"post\">\n";
        echo      "<textarea class=\"Kommentarfeld\" name=\"Inhalt\" title=\"Hier können Sie Ihren eigenen Kommentar eingeben.\" cols=\"31\" rows=\"3\" ></textarea>\n";
        echo            "<input class=\"Name\" name=\"Autor\" title=\"Tragen Sie hier bitte Ihren Namen ein.\" type=\"text\" size=\"18\" maxlength=\"25\" value=\"Ihr Name\" />\n";
        echo      "<input class=\"Absende-Button\" type=\"submit\" value=\"Absenden\" title=\"Klicken Sie hier, um Ihren Kommentar abzusenden.\" />\n";
        echo      "<input class=\"News-ID\" type=\"hidden\" name=\"NEWS_ID\" value=\"";
        echo            $newsid++ - 1;
        echo            "\" />\n";
        echo    "</form>\n";
        echo "</div>\n";
        // Ende des Kommentarabschnitts.        
        }
} else {
            echo "<p>Leider momentan kein Artikel vorhanden.<p>\n";
        }
        
            echo "</div>\n"; // Ende
            echo "</div>\n";        
            echo "</div>\n";        
?>

Wichtig ist die Verknüpfung über die ID der News.
 
Hallo threadi,

ok, jetzt habe ich's kapiert ;-)

Ich wusste gar nicht, dass man im Select-Befehl auch ein Element eines Arrays, der aus einer anderen Tabelle gebildet wurde, verwenden kann... Und wieder etwas gelernt!

Vielen Dank für Deine Hilfe!

Viele Grüße,
Sebastian
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben