Michael: Wie Tabelle aufbauen mit fester Anzahl Spalten pro Zeile

Hallo zusammen,

ich steh' auf dem Schlauch.
Es geht um eine mySQL Abfrage, in der Ergebnisse als HTML-Tabelle ausgegeben werden soll. Klappt auch soweit - einzeilig.
Wie bitte definiere ich dass pro 5 gefundener Objekte eine neue Zeile (<tr> </tr>) mit den nächsten 5 Feldern (<td> </td>) aufgebaut wird?

Aktuell mache ich es mit

$prod_notsold = mysql_query('SELECT name_file, name_de, cat  FROM  products where sold=0')  or die (mysql_error());

for ($i=0;$i<mysql_num_rows($prod_notsold);$i++)
 {
  $ergebnis[$i]=mysql_fetch_array($prod_notsold);
 }
...

for($i=0;$i<count($ergebnis);$i++)
 {
  echo "<td><a href...>hier das ganze gedoens</a></td>" ;
 }

So solls aussehen: http://www.herzensart.com/portfolio/de/art/start.html

Das ist doch echt nicht schwierig, aber ich sitze hier seit ca. 2 Stunden daran :)

Danke & Gruß,

Michael

  1. Hi,

    Es geht um eine mySQL Abfrage, in der Ergebnisse als HTML-Tabelle ausgegeben werden soll. Klappt auch soweit - einzeilig.

    pro Datensatz sollte eine Tabellenzeile ausgegeben werden. Andernfalls ist zweifelhaft, dass ein <table>-Element zu rechtfertigen ist.

    Wie bitte definiere ich dass pro 5 gefundener Objekte eine neue Zeile (<tr> </tr>) mit den nächsten 5 Feldern (<td> </td>) aufgebaut wird?

    Das klingt so, als wäre jedes gefundene Objekt gleichwertig; damit ist eine Aufzeilung in unterschiedliche Spalten nicht mehr sinnvoll. Du hast ganz offenbar eine Liste von Elementen. Verwende also <ul> oder <ol> und formatiere die List-Items Deinen Wünschen entsprechend.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo,

      Wie bitte definiere ich dass pro 5 gefundener Objekte eine neue Zeile (<tr> </tr>) mit den nächsten 5 Feldern (<td> </td>) aufgebaut wird?

      Das klingt so, als wäre jedes gefundene Objekt gleichwertig; damit ist eine Aufzeilung in unterschiedliche Spalten nicht mehr sinnvoll. Du hast ganz offenbar eine Liste von Elementen. Verwende also <ul> oder <ol> und formatiere die List-Items Deinen Wünschen entsprechend.

      Ja, das wäre längerfristig sinnvoll. Aktuell soll's aber bei einer Tabelle bleiben, da hängt einiges Layout von ab.

      Habe es mit Vinzenz' Tipp gelöst.

      Danke & Gruß,

      Michael

  2. Hallo

    Es geht um eine mySQL Abfrage, in der Ergebnisse als HTML-Tabelle ausgegeben werden soll. Klappt auch soweit - einzeilig.
    Wie bitte definiere ich dass pro 5 gefundener Objekte eine neue Zeile (<tr> </tr>) mit den nächsten 5 Feldern (<td> </td>) aufgebaut wird?

    Der Modulo-Operator hilft Dir dabei, gehe wie folgt vor (Anzahl der Spalten beliebig):

    Beginne Tabelle
    Initialisiere Zähler mit 0
    Gewünschte Spaltenzahl ist 5

    Solange Ergebnisse vorhanden sind
        Erhöhe Wert des Zählers um 1
        Wenn Zähler Modulo "Gewünschte Spaltenzahl" 1 ergibt
            Beginne Zeile
        Ende Wenn
        Schreibe Zelle mit Inhalt
        Wenn Zähler Modulo "Gewünschte Spaltenzahl" 0 ergibt
            Beende Zeile
        Ende Wenn
    Ende Solange

    Wenn Zähler Modulo "Gewünschte Spaltenanzahl" > 0 ist
        Angefangene Zeile mit leeren Zellen auffüllen bis gewünschte
        Spaltenzahl erreicht ist
        Beende Zeile
    Ende Wenn

    Beende Tabelle

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      Der Modulo-Operator hilft Dir dabei, gehe wie folgt vor (Anzahl der Spalten beliebig):

      Beginne Tabelle

      »»

      ...

      Wenn Zähler Modulo "Gewünschte Spaltenanzahl" > 0 ist
          Angefangene Zeile mit leeren Zellen auffüllen bis gewünschte
          Spaltenzahl erreicht ist
          Beende Zeile
      Ende Wenn

      Beende Tabelle

      Super, Modulo kenne ich schon, kam aber nicht drauf. Klappt super, den letzten Abschnitt habe ich aber mit while erledigt.

      Danke für den Tipp!

      Viele Grüße,

      Michael