Problem mit eigenem Newsskript - Variablen erstellen und anzeigen

userjules

Mitglied
Hallo Ihr lieben Helfer,

habe mit Mühe und Not eine Art CMS für ein Projekt in PHP gebastelt.
Viele Dinge funktionieren einwandfrei, aber nun stehe ich vor einem Problem, dass ich alleine nicht lösen kann.

Ich habe eine Tabelle in meiner MySQL Datenbank die Inhalte für die 'News' bereithält. Die Ausgabe funktioniert 'irgendwie', aber noch nicht so wie ich es mir vorstelle.

Mein konkretes Problem ist, dass ich noch nicht herausgefunden habe, wie ich Variablen richtig erstellen und strukturieren kann, sodass sie auch korrekt dargestellt werden.

Nehmen wir an, die Tabelle hat folgende Struktur (vereinfacht):

Datum
Ueberschrift
Nachrichtentext

Das Skript zur Ausgabe sieht folgendermaßen aus.
PHP:
<?php
    // Verbindung zur Datenbank herstellen
    require_once "dbconnect.php";

    // Tabelle erneut darstellen
    // SQL-Anfrage: Ergebnis ist eine vorhandene Tabelle
    $sql="SELECT Ueberschrift, Nachrichtentext FROM news ORDER BY id DESC LIMIT 10";

    // Anfrage ausführen
    $result=mysql_query($sql) or exit("Fehler im SQL-Kommando: $sql");

    // Tabelle in HTML darstellen
    echo "<table border=\"1\">\n";
    while ($row=mysql_fetch_row($result))
    {
        echo "<tr>";
        foreach ($row as $item)    // jedes Element $item der Zeile $row durchlaufen
            echo "<td>$item</td></tr>";
        echo "<tr><td>$row[2]</td>";
        echo "</tr>\n";
    }
    echo "</table>\n";
    ?>

Die Funktion beschränkt sich darauf, alle Inhalte der angegebenen Spalten 'nacheinander' auszugeben. Zuvor wird die Tabelle absteigend nach der ID sortiert und die Ausgabe auf 10 Datensätze beschränkt.

Ich möchte aber die Inhalte als Variablen einzeln ansprechen können um die Ausgabe vernünftig zu strukturieren.

Die Ausgabe soll dann etwa so aussehen (schematisch):
HTML:
<table width="650px" border="1" cellspacing="8px">
  <tr>
    <td>Ueberschrift1</td>
    <td>Datum1</td>
  </tr>
  <tr>
    <td>Bild(float), Nachrichtentext, evtl. Dateianhang</td>
  </tr>
  <tr>
    <td>Ueberschrift2</td>
    <td>Datum2</td>
  </tr>
  <tr>
    <td>Bild(float), Nachrichtentext, evtl. Dateianhang</td>
  </tr>
  <tr>
    <td>Ueberschrift3</td>
    <td>Datum</td>
  </tr>
  <tr>
    <td>Bild(float), Nachrichtentext, evtl. Dateianhang</td>
  </tr>
</table>

Wie kann ich die Daten aus der Datenbank in Variablen schreiben, sodass ich über <?php $Ueberschrift1 ?> ... <?php $Datum1 ?> ... <?php $Nachrichtentext1 ?> oder sowas darauf zugreifen kann. In der aktuellen Ausgabe (siehe Skript) wird einfach jedes Objekt der Zeile nacheinander ausgegeben.

Kann mir jemand helfen ?

Ich hoffe ich hab's verständlich formuliert.
Vielen, vielen Dank für eure Hilfe im Voraus ******
 
mysql_fetch_row() gibt ein numerisches Array zurück (Index ist ein Integer). Mit mysql_fetch_assoc() kannst du dir hingegen ein assoziatives Array holen. Du kannst dann mit

PHP:
$row["spaltenname"]

auf die einzelnen Spalten zugreifen.

PHP:
while ($row = mysql_fetch_assoc($result)) {
  echo "<tr>";
  echo "<td>" . $row["Ueberschrift"] . "</td>";
  echo "<td>" . $row["Datum"] . "</td>";
  echo "</tr>";
  
  // Inhalte ausgeben..
}
 
Hey Tim, du mal wieder. Vielen Dank auch für deine Hilfe bei meinen letzten 'Themen' !

OK, dass verstehe ich, aber wie greife ich denn dann auf jeweils die nächste Spalte zu ?
Werden die Spalten in dem Array hintereinander sortiert, sodass ich den Code nur für jede Spalte wiederholen muss ? Wird nach dem letzten Objekt einer Spalte automatisch das erste Objekt aus der nächsten Spalte ausgegeben ?
 
$row["Ueberschrift"] ist die Spalte Ueberschrift. Tims Code ist für eine ganze Zeile.
PHP:
while ($row = mysql_fetch_assoc($result)) {
  echo "<tr>";
  echo "  <td>{$row['Ueberschrift']}</td>";
  echo "  <td>{$row['Datum']}</td>";
  echo "</tr>";
  // Inhalte ausgeben..
  echo "<tr>";
  echo "  <td colspan='2'>{$row['Nachrichtentext']}</td>";
  echo "</tr>";
  
}
 
Danke Waslaw !

Ich begreifs aber noch nicht so ganz. Muss ich den Code für die nächste Nachricht einfach wiederholen ?
Ich möchte zum Beispiel auch noch einen Dateinamen für ein Bild ausgeben und dieses mit einem 'float' versehen.

Kann ich es also so machen ...?
PHP:
<?php
while ($row = mysql_fetch_assoc($result)) {
  //Erste Nachricht
  echo "<tr>";
  echo "  <td>{$row['Ueberschrift']}</td>";
  echo "  <td>{$row['Datum']}</td>";
  echo "</tr>";
  // Inhalte ausgeben..
  echo "<tr>";
  echo "  <td colspan='2'><img src="{$row['Bilddatei']}" width="50" alt="bild" style="float:{$row['float']}" />{$row['Nachrichtentext']}</td>";
  echo "</tr>";
  
  //Zweite Nachricht
  echo "<tr>";
  echo "  <td>{$row['Ueberschrift']}</td>";
  echo "  <td>{$row['Datum']}</td>";
  echo "</tr>";
  // Inhalte ausgeben..
  echo "<tr>";
  echo "  <td colspan='2'><img src="{$row['Bilddatei']}" width="50" alt="bild" style="float:{$row['float']}" />{$row['Nachrichtentext']}</td>";
  echo "</tr>";
  
  //Dritte Nachricht usw.
  
}  
?>

Danke für jede Hilfe !
 
Jedes mal wenn mysql_fetch_assoc() (oder mysql_fetch_row() oder ähnliche) aufgerufen wird, wird der nächste Datensatz der Ergebnismenge zurückgegeben. Ist kein Datensatz mehr vorhanden, bekommt man "false" zurück und dadurch wird die Schleife abgebrochen. $row ist also in einem Schleifendurchgang immer der aktuelle Datensatz.
 
Es ist genauso wie Tim das schreibt. Auf dein Beispiel angewendet sieht es dann so aus
PHP:
<?php
    // Verbindung zur Datenbank herstellen
    require_once "dbconnect.php";

    // Tabelle erneut darstellen
    // SQL-Anfrage: Ergebnis ist eine vorhandene Tabelle
    $sql="SELECT Ueberschrift, Nachrichtentext FROM news ORDER BY id DESC LIMIT 10";

    // Anfrage ausführen
    $result=mysql_query($sql) or exit("Fehler im SQL-Kommando: $sql");

    // Tabelle in HTML darstellen
    echo "<table border=\"1\">\n";
    while ($row = mysql_fetch_assoc($result)) {
          echo "<tr>";
          echo "  <td>{$row['Ueberschrift']}</td>";
          echo "  <td>{$row['Datum']}</td>";
          echo "</tr>";
          echo "<tr>";
          echo "  <td colspan='2'>{$row['Nachrichtentext']}</td>";
          echo "</tr>";
    }  
    echo "</table>\n";
    ?>
 
Ihr seid die Allerallercoolsten ! Vielen Dank !
Ich werd jetzt mal ein wenig rumprobieren und mal schauen ob ich's hinbekomme.
Wenn ich euch richtig verstanden habe, muss ich also für jede 'nächste' Nachricht (Spalte) die Schleife 'neu starten' !?

Wenn ich Fragen habe, werd ich sie wieder hier posten und hoffe euch dann wieder hier anzutreffen.
Danke nochmal bis hierhin !
 
Nein. Die Schleife geht selber weiter. Eben, eine Schleife. Die geht selber solange durch bis mmysql_fetch_assoc() keine Daten mehr liefert (in deinem Fall max. die 10 mal die du per LIMIT definiert hast).

Mach dich doch im Internet mal schlau über Schleifen. Sie sind ein sehr wichtiger Grundstein für fastr jede Programmierung. Wenn du die nicht verstehst, fehlt dir etwas sehr wichtiges.
 
Werde ich tun ! Ich lerne eh jeden Tag etwas neues. Bin recht fit in HTML und CSS, aber PHP ist noch ziemlich fremd. Ist recht mühsam sich da reinzuarbeiten. Geht halt nur Stück für Stück und Lösungen für konkrete Probleme such ich halt eher 'on demand'.
Ich werd' dranbleiben und hoffe eines Tages selber hier mal helfen zu können !
Ich suche noch ein gutes Nachschlagewerk um die Grundlagen mal richtig gründlich durchzuarbeiten. Habt Ihr nen Tipp ?

Danke !
 

Neue Beiträge

Zurück