db daten in eine 3 spalten tab aufteilen !

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • db daten in eine 3 spalten tab aufteilen !

    ich lese aus einer db (adressen) daten aus diese ich dann nach dem alphabet

    A
    ....
    ....

    B
    ....
    ....

    C
    ....
    ....

    usw

    wenn ich das ganze so auslese stehen die daten alle in einer spalte nach unten !
    würde nun gern das ganze in ein tabelle mit 3 spalten packen und um eben
    nicht alles untereinander zu haben !

    kann mir da bitte jemand helfen !! ich sitz schon den halben tag und bekomme es
    nicht hin!

    PHP-Code:
        $sql "SELECT 
                    name,
                    street,
                    plz,
                    city,
                    fon,
                    fax,
                    webpage 
                  FROM 
                      veranstalter
              ORDER BY 
                      name ASC"
    ;
        
    $result mysql_query($sql);
        while(
    $row=mysql_fetch_object($result)) { 
        
    $name[]=$row->name;
        
    $street[]=$row->street;
        
    $plz[]=$row->plz;
        
    $city[]=$row->city;
        
    $fon[]=$row->fon;
        
    $fax[]=$row->fax;
        
    $webpage[]=$row->webpage;
        }

        
    $anzahl=count($name);
        for(
    $i=0$i<$anzahl$i++) {
            
    $erstes_zeichen=strtolower(substr($name[$i],0,1));
            if (
    $erstes_zeichen != $buchstabe) {
                
    $buchstabe=$erstes_zeichen;
                echo 
    "<span style=\"color:#FF3300;\"><b>".strtoupper($buchstabe)."</b></span><br />";
            }
        echo 
    "<span style=\"color:#333333;\">".$name[$i]."</span><br />";
        echo 
    "".$street[$i]."<br />";
        echo 
    "".$plz[$i]."&nbsp;".$city[$i]."<br />";
        echo 
    "".$fon[$i]."<br />";
        if(
    $fax[$i] == 0) {    echo ""; } else { echo "".$fax[$i]."<br />"; }
        if(
    $webpage[$i] == "") { echo ""; } else { echo "<span class=\"verweis\"<img src=\"roter_pfeil.gif\" /><a href=\"http://".$webpage[$i]."\" target=\"_blank\">".$webpage[$i]."</a></span><br />"; }
        echo 
    "<br />";



  • #2
    Den Ansatz hast Du schon selbst mit $anzahl gefunden.

    Pack die Ausgabe halt in 3 divs oder 3 Tabellenspalten.
    Die eröffnest du vor der Schleife, nach dem 1. dem 2. Drittel aller Elemente schließt Du die divs/ tds und beginnst die nächste.
    Wenn die Schleife ganz durch ist, schließe das Div / die Spalte+Zeile+Tabelle.
    /* Meine Lieblingsantwort: Read The Fucking Manual */

    Kommentar


    • #3
      Suchst Du sowas...

      PHP-Code:
      // unser Array 
      $x = array( "1""2""3""4""5""6""7""8""9""10");
      // wieviel haben wir denn ?
      $count count$x );
      // Anzahl der Spalten
      $spalten 5;
      // macht so und so viel Zeilen
      $zeilen = ( $count $spalten )?( ( $count - ( $count $spalten ) ) / $spalten ):$count $spalten;


      ##### Tabelle zeilenweise ausgeben #####

      echo "<table width=\"100%\">\n";
      // Zeile für Zeile
      for( $i 0;$i $zeilen; ++$i ) {
          echo 
      "\t<tr>\n"
          
      // Spalte für Spalte
          
      for( $ii 0;$ii $spalten; ++$ii ) {
              
      // wenns nichts mehr gibt, ein &nbsp;
              
      echo "\t\t<td>" . ( isset( $x[$i $spalten $ii] )?$x[$i $spalten $ii]:"&nbsp;" ) . "</td>\n";
          } 
          echo 
      "\t</tr>\n";

      echo 
      "</table>";

      echo 
      "<br><br>";
      ##### Tabelle spaltenweise ausgeben #####

      echo "<table width=\"100%\">\n";
      // Zeile für Zeile

      for( $i 0;$i $zeilen; ++$i ) {
          echo 
      "\t<tr>\n"
          
      // Spalte für Spalte
          
      for( $ii 0;$ii $spalten; ++$ii ) {
              
      // wenns nichts mehr gibt, ein &nbsp;
              
      echo "\t\t<td>" . ( isset( $x[$ii $zeilen $i] )?$x[$ii $zeilen $i]:"&nbsp;" ) . "</td>\n";
          } 
          echo 
      "\t</tr>\n";

      echo 
      "</table>"
      Grüße, Andi

      Kommentar


      • #4
        Oh, ich glaub ich habe dich falsch verstanden

        Mach doch eine Tabelle in einer While-Schleife. In die entsprechenden Felder printet Du dann die Werte.

        PHP-Code:
        <table width="100%" border="0" cellspacing="0" cellpadding="0">
        <? while(...){?>
          <tr>
            <td><? print $feld_1 ?></td>
            <td><? print $feld_2 ?></td>
            <td><? print $feld_3 ?></td>
          </tr>
        <? } ?>
        </table>

        Kommentar


        • #5
          jenau das habe ich dann auch schon probiert aber wollte eben nicht !

          ich habe dafür (wie du schon sagts dritteln) die $anzahl

          $teilen = $anzahl/3;

          dann eben noch runden round($teilen).

          nur bei dem abfragen ging das ganze nicht so wie ich es mir dachte und verhaue es dann immer wieder.

          wenn ich $teilen habe (gehen mal von 15 db einträge aus)

          müsste ich dann eben fragen ob $i = $teilen sind und wenn dann </td> nur wie dann weiter, bin schon ganz durch den wind !!

          Kommentar


          • #6
            andik2000

            ja nur dann wie, ich glaub ich stehe voll auf dem schlauch !

            ach und dein spruch unten ist genial !!

            Kommentar


            • #7
              Wieso holst Du das separat in ein Array? Ich gebe das immer so aus:

              <?
              $result = mysql_query("SELECT name, strasse, telefon FROM tabelle");
              ?>

              <table width="100%" border="0" cellspacing="0" cellpadding="0">
              <? while ($current = mysql_fetch_array($result)){ ?>
              __<tr>
              ____<td><? print $current['name'] ?></td>
              ____<td><? print $current['strasse'] ?></td>
              ____<td><? print $current['telefon'] ?></td>
              __</tr>
              <? } ?>
              </table>



              OffTopic:
              Den Spruch habe ich mal in einem anderen Forum gesehen und mußte ihn mir unbedingt aneignen :-)


              Grüße

              Kommentar


              • #8
                so wärs ja einfach

                ich hab eine datenbank mit adressen diese möchte ich ausgeben. das ganze wird dann noch nach dem alphabet geordnet und ein buchstabe davor gesetzt

                soo dann :

                A
                Adresse
                Adresse
                Adresse

                B
                Adresse
                Adresse
                Adresse

                ......

                M
                Mustermann
                Musterstr 18
                06844 Mustercity
                Telefon
                Telefax
                WWW

                Adresse

                usw

                sooo lese ich es dann aus der db, ein array brauch ich um dann das alles zuordnen zu können.

                wenn ich es eben dann so auslese habe ich eine sau sau lange liste die ich gern in 3 spalten darstellen möchte um es eben zu kürzen !!

                Kommentar


                • #9
                  Sortieren tust Du doch schon in deiner SQL-Abfrage. Warum noch mal sortieren?

                  Das mit dem Buchstaben bekommst Du dann so hin:

                  <table width="100%" border="0" cellspacing="0" cellpadding="0">
                  <? while ($current = mysql_fetch_array($result)){
                  $firstletter = substr(strtoupper($current['name']), 0, 1);
                  if($firstletter != $currletter) {
                  ?>
                  <tr>
                  <td colspan="3"><? print $firstletter ?></td>
                  </tr>
                  <? } ?>
                  <tr>
                  <td><? print $current['name'] ?></td>
                  <td><? print $current['strasse'] ?></td>
                  <td><? print $current['telefon'] ?></td>
                  </tr>
                  <?
                  $currletter = $firstletter;
                  } ?>
                  </table>


                  Was meinst Du mit der dreispaltigen Ausgabe?

                  Name1 Strasse1 Telefon1
                  Name2 Strasse2 Telefon2
                  Name3 Strasse3 Telefon3

                  oder

                  Name Name Name
                  Strasse Strasse Strasse
                  Telefon Telefon Telefon


                  Erster Fall ist ja da was ich die eben in der einfachen Tabelle gzeigt habe.
                  Letzteres entspricht dem Script, was ich dir zuerst gemailt habe.

                  Grüße

                  Kommentar


                  • #10
                    mit der spalten ausgabe meine ich das nicht so wie du !!

                    die adressen sollen so ausgegeben werden was ja auch so passiert:

                    Mustermann
                    Musterstr 18
                    06844 Mustercity
                    Telefon
                    Telefax
                    WWW

                    Mustermann
                    Musterstr 18
                    06844 Mustercity
                    Telefon
                    Telefax
                    WWW

                    Mustermann
                    Musterstr 18
                    06844 Mustercity
                    Telefon
                    Telefax
                    WWW

                    nur dann neben diesen drei noch drei und drei

                    adresse adressse adresse
                    adresse adressse adresse
                    adresse adressse adresse
                    adresse adressse adresse

                    es soll keine liste sein mit drei spalten !!

                    Kommentar


                    • #11
                      das mit dem array hast du recht ist quark, aber wieso leicht wenn es auch schwer geht !!

                      genau das problem hab ich immer bei sowas

                      Kommentar


                      • #12
                        Da ist genau das erste Script das richtige was ich gepostet hatte.
                        Schau dir das mal genau an, bzw. probiers mal aus.
                        Mit $spalten bestimmst Du die Anzahl der Spalten, bei dir dann eben 3.
                        Das Array kann auch mehrdimensional sein, welches dann Name, Str. Ort etc enthällt. Dass muß dann aber entsprechend in den Tabellenfeldern angegeben werden.
                        $x[$ii * $zeilen + $i][0]
                        $x[$ii * $zeilen + $i][1]
                        $x[$ii * $zeilen + $i][2]

                        u.s.w.

                        Probier mal mit rum.

                        Grüße

                        Kommentar


                        • #13
                          danke andi für die mühe und ich bin auch schon ein ganzes stück schlauer

                          ich hab mal dein erstes script richtig unter die lupe genommen und habs ausprobiert
                          im grunde ist es richtig und es geht aber es gibt ein haken !

                          wenn ich x adresse habe und jede hat auch unterschiedliche zeilen anzahl weil nicht jede adresse ein fax, webseite oder andere daten fehlen können und es mit dieser variante so ist das ich für jeden ausgelesenen adresse in der schleife auch eine tabelle zeile erstelle was dann zu dicken lücken in der darstellung kommt !

                          es sollte aber eigentlich einfacher sein und eben keine x tabellenzeilen sondern einfach 3 spalten oder div´s wo ich dann die adressen drin auslese.

                          ich versuche es weiter....

                          ich bin da nicht so der grosse experte aber ich bemühe mich es immer selbst hinzubekommen nur es braucht manchmal einfach zuviel zeit !

                          was ich nun wieder versucht hatte das ich eben mit count() die anzahl im array rauslese und diese dann durch 3 teile und dann runde ich auf eine ganze zahl (kann manchmal nicht immer rund sein)

                          dann möchte ich einfach sagen das wenn ich zb 15 adressen habe ich diese durch 3 sind 5 dann eben in der tabelle 1. spalte sage das ich die 5 adressen auflisten lasse und eine neue spalte erstelle und ab der 10 dann wieder ein spalte mit dem rest von weiteren 5 !!

                          Kommentar


                          • #14
                            Folgende Idee:

                            Wenn Du nicht weißt ob es ein Feld mit Fax etc. gibt, das mach doch eine Abfrage und hänge den Adress-String aneinander.
                            PHP-Code:
                            while(...){

                            $adresse  "";
                            if (
                            $current['name'] != ""){$adresse .= $current['name']."<br>";}
                            if (
                            $current['strasse'] != ""){$adresse .= $current['strasse']."<br>";}
                            if (
                            $current['telefon'] != ""){$adresse .= $current['telefon']."<br>";}
                            // u.s.w.

                            $adresse substr($adresse0, -4); // letztes <br> entfernen
                            $x[] = $adresse;


                            Auf diese Weise erzeugst Du das Array, welches dann tatsächlich nur Daten enthällt, die in der DB hinterlegt sind - ohne Lücken.
                            Klar?

                            Grüße
                            Zuletzt geändert von andik2000; 18.02.2004, 11:17.

                            Kommentar


                            • #15
                              *g*.. das ist doch auch nicht das problem, aber ich will die da nun nicht weiter mit stressen ich glaub ich drücke mich da jedes mal falsch aus !!

                              das mit fehlenden daten ist nicht das prob die kann ich abfragen und darstellen oder eben auch nicht ! wenn die adresse alle die gleichen daten hätten könnte ich das alles in spalten und reihen darstellen nur das ist nicht so und dann kommt sowas zustande wie
                              du auf der zeichnung unten siehst und nicht so sein kann weil die darstellung darunter leidet !!

                              ich habs mal aufgezeichnet

                              Kommentar

                              Lädt...
                              X