Patrick95: MySQL-Daten in einer Tabelle ausgeben

Hallo zusammen!

Ich habe in einer MySQL-Datenbank die Spielerdaten eines Football-Teams aufgelistet (Name, Bild, Position, ...) und möchte diese nun für den Besucher unserer Webseite in einer kleinen Tabelle zunächst übersichtlich darstellen.
Das Ganze soll so aussehen, dass in einer Tabellenreihe 5 Tabellendatenfelder sind, und diese Datenfelder enthalten jeweils das Bild, darunter mit <br /> abgetrennt den Namen und darunter ebenfalls mit <br /> abgetrennt die Position. Zudem soll das noch schön alphabetisch geordnet sein.

Soweit eigentlich kein Problem, so sieht der Code aus:

<?php  
require_once ('configuration.php');  
$db_link = mysql_connect ( MYSQL_HOST,  
                           MYSQL_BENUTZER,  
                           MYSQL_KENNWORT );  
  
$db_sel = mysql_select_db( MYSQL_DATENBANK )  
   or die("Auswahl der Datenbank fehlgeschlagen");  
  
$sql = "SELECT * FROM players ORDER BY surname ";  
  
$db_erg = mysql_query( $sql );  
if ( ! $db_erg )  
{  
  die('Ungültige Abfrage: ' . mysql_error());  
}  
  
echo '<table border="1"><tr>';  
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))  
{  
  echo "<td><img src='". $zeile['image_thumb'] . "' /><br />". $zeile['firstname'] . " ". $zeile['surname'] ."<br />". $zeile['birthday'] . "</td>";  
}  
echo "</tr></table>";  
  
mysql_free_result( $db_erg );  
?>

Das Problem ist nun aber, dass eine Tabellenreihe nur 5 Tabellendatenfelder enthalten soll, und nach diesen 5 Feldern eine neue Reihe angefangen werden soll, bei der die Daten weiter nach dem Alphabet sortiert ausgelesen werden.

Könnt Ihr mir da einen Denkanstoß geben, wie ich das hinbekommen kann?

Vielen Dank im Voraus und mit lieben Grüßen

Patrick

  1. echo '<table border="1"><tr>';
    while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
    {
      echo "<td><img src='". $zeile['image_thumb'] . "' /><br />". $zeile['firstname'] . " ". $zeile['surname'] ."<br />". $zeile['birthday'] . "</td>";
    }
    echo "</tr></table>";

    Das Problem ist nun aber, dass eine Tabellenreihe nur 5 Tabellendatenfelder enthalten soll, und nach diesen 5 Feldern eine neue Reihe angefangen werden soll, bei der die Daten weiter nach dem Alphabet sortiert ausgelesen werden.

    Inwiefern ist das Dein Problem. Deine HTML-SAusgabe macht genau, was Du gescriptet hast.
    Du hast genau 1 Zeile (<tr>) gescriptet.

    Und genau das erhältst Du auch.

    Könnt Ihr mir da einen Denkanstoß geben, wie ich das hinbekommen kann?

    Ja. Scripte je eine Zeile je Eintrag.

    Gruß, Freak

    1. Könnt Ihr mir da einen Denkanstoß geben, wie ich das hinbekommen kann?

      Ja. Scripte je eine Zeile je Eintrag.

      Irgendwie verstehe ich deine Antwort nicht. Könntet Du das vielleicht etwas näher erläutern? Dass ich mit meinem Script nur eine TR rauskriege, ist mir klar - soweit war ich ja schon.

  2. Tach!

    Das Problem ist nun aber, dass eine Tabellenreihe nur 5 Tabellendatenfelder enthalten soll, und nach diesen 5 Feldern eine neue Reihe angefangen werden soll, bei der die Daten weiter nach dem Alphabet sortiert ausgelesen werden.

    Die Sortierung nach Alphabet macht bereits das DBMS aufgrund deiner Abfrage (ORDER BY). Du müsstest nun einfach mitzählen und nach jeweils 5 Ausgaben deine die alte Zeile abschließen und eine neue anfangen. Man kann auch einfach geradeaus hochzählen und eine Modulo-Division verwenden. Wenn der Rest 0 ist, sind jeweils 5 Datensätze bearbeitet worden.

    $db_link = mysql_connect ( MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT );

    Ob der Connect geklappt hat, interessiert dich nicht?

    $db_sel = mysql_select_db( MYSQL_DATENBANK )
       or die("Auswahl der Datenbank fehlgeschlagen");

    $sql = "SELECT * FROM players ORDER BY surname ";
    $db_erg = mysql_query( $sql );
    if ( ! $db_erg )
      die('Ungültige Abfrage: ' . mysql_error());

    Bist du sicher, dass du im Falle eines Falles ausschließlich deine normalen Besucher mit einem Script-Abbruch und einer mit technischen Details gespickten Fehlermeldung beglücken willst?

    mysql_free_result( $db_erg );

    Das Aufräumen ist unnötig, wenn dein Script nicht nachher noch lange Zeit läuft und der Speicher knapp ist. PHP räumt sowieso am Scriptende auf.

    dedlfix.

  3. Hi,

    Das Ganze soll so aussehen, dass in einer Tabellenreihe 5 Tabellendatenfelder sind

    Das ist aber ein Missbrauch der Tabelle als Darstellungselement.

    Warum machst du die Darstellung nicht gleich mit CSS?
    Daten in eine Liste packen, den List Items eine Breite geben und sie nebeneinander darstellen lassen (float/inline-block) – und per Weite der Liste regeln, wie viele nebeneinander dargestellt werden. (Oder das ggf. gleich dem verfügbaren Platz überlassen.)

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Warum machst du die Darstellung nicht gleich mit CSS?
      Daten in eine Liste packen, den List Items eine Breite geben und sie nebeneinander darstellen lassen (float/inline-block) – und per Weite der Liste regeln, wie viele nebeneinander dargestellt werden. (Oder das ggf. gleich dem verfügbaren Platz überlassen.)

      Meine Fresse, da hab ich wohl vor lauter Bäumen den Wald nicht mehr gesehen! Klar, einfacher geht's ja gar nicht! Danke für die total triviale Lösung! :)

    2. Warum machst du die Darstellung nicht gleich mit CSS?
      Daten in eine Liste packen, den List Items eine Breite geben und sie nebeneinander darstellen lassen (float/inline-block) – und per Weite der Liste regeln, wie viele nebeneinander dargestellt werden. (Oder das ggf. gleich dem verfügbaren Platz überlassen.)

      Eine Frage stellt sich aber doch noch: was meinst Du genau mit:

      List Items eine Breite geben und sie nebeneinander darstellen lassen

      ? Wie kann ich das realisieren?

      Grüße Patrick

      1. Hi,

        Eine Frage stellt sich aber doch noch: was meinst Du genau mit:

        List Items eine Breite geben und sie nebeneinander darstellen lassen
        ? Wie kann ich das realisieren?

        Mit dem Teil der Antwort, den du beim Zitieren weggekürzt hast …?

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?