Schwuffi: Feld einer DB in mehspaltige Tabelle ausgeben

Hi,

ich hab in einer Datenbank (MySQL) eine Art Lexikon, d.h. Begriff und dazugehörige Erklärungen.

Jetzt möchte ich, alle Begriff mit dem selben Anfangsbuchstaben in einer vierspaltigen Tabelle zur Übersicht ausgeben (Anfangsbuchstabe ist in der DB hinterlegt). Wie kann ich dass denn bewerkstelligen?

Auslesen usw. ist ja kein Problem, aber wie bring ich dem ganzen bei, nach jedem vierten Begriff eine neue Zeile anzufangen?

Danke schonmal.

  1. Hallo

    Jetzt möchte ich, alle Begriff mit dem selben Anfangsbuchstaben in einer vierspaltigen Tabelle zur Übersicht ausgeben (Anfangsbuchstabe ist in der DB hinterlegt). Wie kann ich dass denn bewerkstelligen?

    Auslesen usw. ist ja kein Problem, aber wie bring ich dem ganzen bei, nach jedem vierten Begriff eine neue Zeile anzufangen?

    Mitzählen :-) Der Modulo-Operator hilft Dir dabei.

    Freundliche Grüße

    Vinzenz

    1. Hm,

      klappt - fast :)

      Aber im Moment bekomme ich nach 3 Worten einen neue Zeile!?

      <?php  
        
        $i=1;  
        
        echo  
        "<table border=\"1\" width=\"100%\">  
          <tr>  
            <td colspan=\"4\" align=\"left\"><b>A</b></td>  
          </tr>  
          <tr>";  
        
        $query = "SELECT * FROM lexikon";  
        $result = mysql_query($query);  
        while($row = mysql_fetch_object($result))  
          {  
          if(($i%4) == 0)  
            {  
            echo "</tr><tr>";  
            }  
          else  
            {  
            echo "<td><a href='$row->url'>$row->begriff</a></td>";  
            }  
       $i++;  
          }  
          echo "</tr></table>";  
      ?>
      

      Hab ich mich irgendwo verzählt? :)

      1. Hej,

        Aber im Moment bekomme ich nach 3 Worten einen neue Zeile!?

        Lass mich raten, du hast höchstens 6 Treffer?

        Hab ich mich irgendwo verzählt? :)

        Ja ;)

        <?php

        $i=1;

        ^--------Hier

        echo
          "<table border="1" width="100%">
            <tr>
              <td colspan="4" align="left"><b>A</b></td>
            </tr>
            <tr>";

        $query = "SELECT * FROM lexikon";
          $result = mysql_query($query);
          while($row = mysql_fetch_object($result))
            {
            if(($i%4) == 0)
              {
              echo "</tr><tr>";
              }
            else
              {
              echo "<td><a href='$row->url'>$row->begriff</a></td>";
              }
        $i++;
            }
            echo "</tr></table>";
        ?>

          
        Beste Grüße  
        Biesterfeld
        
        -- 
        Art.1: Et es wie et es  
        Art.2: Et kütt wie et kütt  
        Art.3: Et hätt noch immer jot jejange  
        [Das Kölsche Grundgesetz](http://isamhaddad.de/stuff/kgg.pdf)
        
        1. Hallo!

          Mal langsam. $i ist 1, dann erzeugst du eine Spalte1 $i ist 2, dann erzeugst du eine Spalte2 $i ist 3, dann erzeugst du eine Spalte3 $i ist 4, du erzeugst eine neue Zeile. Was gemerkt?

          So kommen wir hin.

          Grüße, Matze

          1. Hej,

            Was gemerkt?

            Ja, du auch?

            Beste Grüße
            Biesterfeld

            --
            Art.1: Et es wie et es
            Art.2: Et kütt wie et kütt
            Art.3: Et hätt noch immer jot jejange
            Das Kölsche Grundgesetz
            1. Hallo!

              Was gemerkt?

              Ja, du auch?

              Klar, aber ich sags keinem weiter ;)

              Grüße, Matze

              1. Sodalla, ein bisschen umgestellt und es läuft :)

                <?php  
                  
                  $i=1;  
                  
                  echo  
                  "<table border=\"1\" width=\"100%\">  
                    <tr>  
                      <td colspan=\"4\" align=\"left\"><b>A</b></td>  
                    </tr>  
                    <tr>";  
                  
                  $query = "SELECT * FROM lexikon";  
                  $result = mysql_query($query);  
                  while($row = mysql_fetch_object($result))  
                    {  
                    echo "<td><a href='$row->url'>$row->begriff</a></td>";  
                    if(($i%4) == 0)  
                      {  
                      echo "</tr><tr>";  
                      }  
                     $i++;  
                 }  
                    echo "</tr></table>";  
                ?>
                

                Jetzt darf ich nur noch das colspan in der letzten Zeile richtig berechnen, damit das auch eni ordentlicher Abschluss wird :)

                Also danke an der Stelle für die Hilfe, ich denke den Rest krieg ich dann auch noch hin.

          2. Hab grad festgestellt, dass immer Worte fehlen.

            Wenn ich i auf 0 setze, fehlt jedes 1., 6., 11., 16. ... Wort. Bei i =1 fehlt 5., 10., 15., ...

            Irgendwas ist da faul :)

            1. Hej,

              Hab grad festgestellt, dass immer Worte fehlen.

              Ja klar, seh ich aber auch erst jetzt. Du darfst natürlich für $i%4 == 0 nicht vergessen auch den Zellen-Inhalt zu schreiben. Und selbst dann stimmt noch ne Kleinigkeit nicht: Anstatt für $i%4 == 0 die Zeile abzuschließen solltest du dir überlegen sie lieber zu öffnen (zumindest du mit $i=0 beginnst).

              Beste Grüße
              Biesterfeld

              --
              Art.1: Et es wie et es
              Art.2: Et kütt wie et kütt
              Art.3: Et hätt noch immer jot jejange
              Das Kölsche Grundgesetz
            2. Hallo!

              Also erstmal "verschlimmbessern" wir den Code mal ein bisschen.

              Versuch:

              <table>
              <tr>
              <?PHP
              $cols = "0";
              while($lexikon = mysql_fetch_array(mysql_query("SELECT * FROM lexikon ORDER BY begriff"))){
              if($cols % 4){
              echo ('</tr><tr>');
              }else{
              echo ('<td><a href="').$$lexikon[ur].('">').$lexikon[begriff].('</a></td>');}
              </tr>
              </table>

              Grüße, Matze

              1. Hallo!

                Noch ein "?>" vor:

                </tr>
                </table>

                Sorry!

                Grüße, Matze

                1. Hallo!

                  Ich merk grad, dass ich für heut zu müde bin. Es heißt richtig $lexikon[url] und $cols++ fehlte auch noch.
                  Ich verabschiede mich für heut.

                  Sorry!

                  Grüße, Matze

              2. echo $begrüßung;

                Also erstmal "verschlimmbessern" wir den Code mal ein bisschen.

                Das ist dir gelungen.

                while($lexikon = mysql_fetch_array(mysql_query("SELECT * FROM lexikon ORDER BY begriff"))){

                Nein, so geht das nun gar nicht. Zuerst wir mysql_query ausgeführt, davon wird die erste Ergebniszeile abgeholt und $lexikon zugewiesen. Im nächsten Schleifendurchlauf wird die Query erneut ausgeführt und die erste Egebniszeile abgeholt und $lexikon zugewiesen. Im nächsten Schleifendurchlauf ... usw. usf. Beendet wird das ganze erst nach Ablauf der max_execution_time

                Es ist in kaum einem Fall sinnvoll, das Egebnis eines der mysql_*-Befehle direkt einem anderen zuzuweisen. Mitunter werden Fehlerzustände durch ein false als Rückgabewert bekanntgegeben. Auf dieses false sollte man angemessen reagieren und es nicht unbeachtet weiterreichen an Funktionen, die stattdessen lieber eine Ressourcenkennung haben möchten.

                if($cols % 4){

                Eine Modulo-Operation liefert den Rest der bei einer Division übrigbleibt. Bei 4 als zweitem Operanden liefert es 3x etwas, das als boolsches true gewertet wird und einmal als false.

                echo ('</tr><tr>');

                Die Zeile sollte doch nur einmal alle 4 Spalten gewechselt werden, oder?

                echo ('<td><a href="').$$lexikon[ur].('">').$lexikon[begriff].('</a></td>');}

                Das doppelte $$ ist sicher nur ein Tippfehler, aber die fehlenden Stringbegrenzer um ur(l) und begriff sind definitiv kein guter Stil: Why is $foo[bar] wrong?

                echo "$verabschiedung $name";

                1. Hallo!

                  Das ist dir gelungen.

                  Danke! ;)

                  while($lexikon = mysql_fetch_array(mysql_query("SELECT * FROM lexikon ORDER BY begriff"))){

                  Nein, so geht das nun gar nicht. (..)

                  Entschuldigug, ich benutz das selbst so nie, hab aber nicht drüber nachgedacht und war ziemlich tippfaul. Ein bisschen Schlaf tat gut. :)

                  if($cols % 4){

                  Eine Modulo-Operation liefert den Rest der bei einer Division übrigbleibt. Bei 4 als zweitem Operanden liefert es 3x etwas, das als boolsches true gewertet wird und einmal als false.

                  Aber so funktioniert es bei mir auch. Ich habe eine 8 zeilige Tabelle erstellt. (Allerdings mit 2 Spalten)

                  echo ('</tr><tr>');

                  Die Zeile sollte doch nur einmal alle 4 Spalten gewechselt werden, oder?

                  Stimmt, mein Fehler.

                  Das doppelte $$ ist sicher nur ein Tippfehler, aber die fehlenden Stringbegrenzer um ur(l) und begriff sind definitiv kein guter Stil: Why is $foo[bar wrong?]

                  Danke, wieder was gelernt. Das wusste ich noch nicht.

                  Grüße, Matze

                  1. echo $begrüßung;

                    if($cols % 4){

                    Eine Modulo-Operation liefert den Rest der bei einer Division übrigbleibt. Bei 4 als zweitem Operanden liefert es 3x etwas, das als boolsches true gewertet wird und einmal als false.

                    Aber so funktioniert es bei mir auch. Ich habe eine 8 zeilige Tabelle erstellt. (Allerdings mit 2 Spalten)

                    Bei zwei Spalten ist das nicht weiter schlimm. Hier wechselt sich "ja" und "nein" ständig ab. Aber bei 3 und mehr sollte man das schon genauer beachten, wo man den Zeilenumbruch hinschreibt.

                    echo "$verabschiedung $name";

      2. Hallo!

        Du musst $i nach </tr><tr> wieder auf 1 setzen wenn ich mich nicht irre.

        Grüße, Matze

        1. Hallo Matze,

          Du musst $i nach </tr><tr> wieder auf 1 setzen wenn ich mich nicht irre.

          Du irrst, was Sam Hawkens selten passiert ist, hihihi.
          Es ist überflüssig, wenn man den Modulo-Operator verwendet.

          Freundliche Grüße

          Vinzenz

      3. Hallo

        Aber im Moment bekomme ich nach 3 Worten einen neue Zeile!?

        Und wann bekommst Du die dritte Zeile?

        [code lang=php]<?php
          $i=1;
        Hab ich mich irgendwo verzählt? :)

        Fange mit 0 an zu zählen und alles wird gut.

        Freundliche Grüße

        Vinzenz

  2. Hallo!

    Du erstellst eine Tabelle, die Spalten gibst du in einer z.B. while() Schleife aus, dabei setzt du für jeden Durchlauf eine Variable um eins höher. Wenn du die gewünschte Spaltenzahl erreicht hast, in deinem Fall Variable geteilt durch 4, machst du eine neue Zeile.

    Wenn du das Forum-Archiv durchsuchst, ist sogar schon der fertige Code für eine 4x4 Tabelle gepostet.
    Wie du die, vielleicht auftretenden, leeren Felder am Ende auffüllst, wurde letztens in einem Post mit einem Kalender beschrieben.

    Grüße, Matze

    1. Wie du die, vielleicht auftretenden, leeren Felder am Ende auffüllst, wurde letztens in einem Post mit einem Kalender beschrieben.

      Da häng ich jetzt leider doch, kannst du mir vielleicht sagen, wo ich den Thread dazu finde? Meine Suche blieb erfolglos :)

      1. Hej,

        Wie du die, vielleicht auftretenden, leeren Felder am Ende auffüllst, wurde letztens in einem Post mit einem Kalender beschrieben.

        Da häng ich jetzt leider doch [...]

        Nachdem Deine SQL-Abfrage kein Ergebnis mehr liefert, füllst du noch solange mit leeren Zellen auf, bis $i%4 wieder 0 ergibt.

        Beste Grüße
        Biesterfeld

        --
        Art.1: Et es wie et es
        Art.2: Et kütt wie et kütt
        Art.3: Et hätt noch immer jot jejange
        Das Kölsche Grundgesetz
        1. Vielen dank euch zwei, habs jetzt also; ist ja eigentlich nicht so schwer - lediglich die Berechnung, wie viele Spalten jetzt zum Schluss übrig bleiben hat mich grad tatsächlich ne Stunde beschäftigt.

          Das ganze beginnt nun mit $i = 0 (vorher 1), da es sonst wohl nicht möglich ist, die Tabelle sauber abzuschließen (entweder ergibt sich ein überflüssiges <tr></tr> oder colspan lässt sich nicht für alle Fälle berechnen):

          <?php  
            
            $spalten = 4;  
            
            $i=0;  
            
            echo  
            "<table border=\"1\" width=\"100%\">  
              <tr>  
                <td colspan=\"$spalten\" align=\"left\"><b>A</b></td>  
              </tr>";  
            
            $query = "SELECT * FROM lexikon";  
            $result = mysql_query($query);  
            while($row = mysql_fetch_object($result))  
              {  
              if(($i%$spalten) == 0)  
              {  
              echo "</tr><tr>";  
              }  
              echo "<td><a href='$row->url'>$row->begriff</a></td>";  
              $i++;  
              }  
              if(($i%$spalten) == 0)  
              {  
              echo "</tr></table>";  
              }  
              echo "<td colspan=\"".($spalten-($i % $spalten))."\">&nbsp;</td>";  
          ?>
          
          1. Und in der letzten Zeile muss man natürlich die Tabelle auch noch schließen.

      2. Hallo!

        Nur der Vollständigkeit wegen.

        Wie du die, vielleicht auftretenden, leeren Felder am Ende auffüllst, wurde letztens in einem Post mit einem Kalender beschrieben.

        Da häng ich jetzt leider doch, kannst du mir vielleicht sagen, wo ich den Thread dazu finde? Meine Suche blieb erfolglos :)

        http://forum.de.selfhtml.org/archiv/2006/7/t133230/#m863125

        Grüße, Matze