tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
377
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Elminster Elminster ist offline Grünschnabel
    Registriert seit
    Oct 2003
    Beiträge
    4
    Problem gelöst...

    Kurz zusammengefasst war das Problem, das Ergebnis einer SQL-Abfrage auf mehrere Spalten nebeneinander und Zeilen untereinander zu verteilen - Mini-Beispiel oben im Code zur Veranschaulichung

    Nicht ganz so komfortable wie in ASP mit Recordset.Next und Recordset.Previous, aber was soll's

    PHP-Code:
    <!-- ---------------  begin MULTI-COLUMNS-TABLE ---------------  -->
    <?php
    /* 
    Script zum erzeugen mehrer Spalten nebeneinander aus einer Abfrage
    bzw. einem Recordset.

    Bsp.:

             |  Spalte 1     |  Spalte 2     |   Spalte X
    -------------------------|---------------|---------------
    Zeile1   |  Toyota<br>   |  Honda<br>    |   Fiat<br>
             |  140 PS       |  50 PS        |   30 PS
             |  ...          |  ...          |   ...
    -------------------------|---------------|---------------
    Zeile2   |  BMW<br>      |  Mercedes<br> |   .....
             |  100 PS       |  10 PS        |
             |  ...          |  ...          |
    -------------------------|---------------|---------------
    Zeile3   |     ...       |  ...          |   ....

    */

    // SQL-Krams
    $sql "SELECT Stufen, PHP_Tauglichkeit FROM Planlos";
    $mc_result mysql_query($sql) or die("Couldn't execute query." );
    $num_rows mysql_num_rows($mc_result);

    // Die wichtigen Sachen
    $columns =3;        // Anzahl gewünschter Spalten (außer 1... )
    $i 0;                 // Counter
    // nächstgrößere Ganzzahl aus Division
    $rows ceil($num_rows $columns);
    // wieviel leere Zellen stehen am Ende?
    $emptyCells = ($rows*$columns) - $num_rows;

    // Wenn so wenig Datensätze da sind, dass sie alle in eine Reihe
    // passen, dann brauchen wir keine leeren Zellen am Ende (um 
    // HTML-Konform gleich viele Zellen wie Spalten zu haben)
    if ($rows 1) {
        
    $emptyCells = ($columns $emptyCells);
    }

    // Unsere Tabelle
    echo ("<table width=\"100%\">\n<tr>\n\t<th colspan=\"" $emptyCells "\">Server-Info</th>\n</tr>");

    // Jeden Datensatz abklappern und Zeilen schreiben
    while($row mysql_fetch_array($mc_result)) { 
        
    // Wenn wir noch einen Datensatz haben und alle Spalten der 
        // Zeile "voll" sind: Neue Zeile starten
        
    if($i != $rows && ($i%$columns == 0)) { 
            echo (
    "<tr>\n"); 
        }
      echo (
    "\t<td>");
      
    // HIER FOLGT DER ZELLENINHALT
        
    echo ("Deine Planlosigkeitsstufe: " .$row["Stufen"] . " ergibt deine PHP-tauglichkeit: " .$row["PHP_Tauglichkeit"]);
      
    // ENDE ZELLENINHALT
      
    echo ("\t</td>\n");
        
    // Wenn wir nicht beim ersten Datensatz sind und die letzte 
        // Spalte durchhaben, dann Zeile schließen
        
    if($i != && $i%$columns == 0) { 
            echo (
    "</tr>\n");
        
    // Nicht erster Datensatz UND es ist der letzter Datensatz UND 
        // leere Zellen >0<Spaltenzahl 
        // -> verbleibende Zellen schreiben und HTML-Konform sein...
        
    } elseif ($i != && $i+== $num_rows && $emptyCells != 0  && $emptyCells $columns) {
            echo (
    "\t<td colspan=\"" . ($emptyCells) . "\"></td>\n"); 
        }
        
        
    // Der i-te Datensatz ist durch... auf zum nächsten
        
    $i++;
    }

    // Schließen der Tabelle
    echo ("</tr>\n</table>\n");

    ?>
    <!-- ---------------  end MULTI-COLUMNS-TABLE ---------------  -->
    Geändert von Elminster (04.09.05 um 11:36 Uhr)
     

  2. #2
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    PHP-Code:
    while ($row=mysql_fetch_array($MyQuery)) 
    holt Dir ja in jedem Durchgang nur eine Reihe, daher musst Du bis zum naechsten Durchgang warten.
    Hast Du immer 4 Reihen, oder koennen das auch mehr sein?
    Wenn ja, wie geht es weiter?

    So?

    row1/col1 | row2/col1
    row3/col2 | row4/col2
    row5/col3 | row6/col3
    row7/col4 | row8/col4

    Oder wie?
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  3. #3
    Elminster Elminster ist offline Grünschnabel
    Registriert seit
    Oct 2003
    Beiträge
    4
    Zitat Zitat von reptiler
    [...] holt Dir ja in jedem Durchgang nur eine Reihe [...]
    Genau das ist quasi das Problem - ich bräuchte in jedem Durchgang 2 Reihen (so einfach kann man's formulieren ).

    Demnach ist deine Annahem auch richtig, dass die HTML-Zeilen unbestimmt fortgesetzt würden (also auch mehr als 4).
     

  4. #4
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Also es wird nicht so fortgesetzt wie ich geschrieben hab?
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  5. #5
    Elminster Elminster ist offline Grünschnabel
    Registriert seit
    Oct 2003
    Beiträge
    4
    Doch würde es

    Hmm, also hier der Test-Server mit ner Beispiel-Seite: http://enterforest.dyndns.org/Tobis/...hp?ffMapID=576

    Unter Server-Info soll halt in 2 Spalten nebeneinander 2 Server stehen (evtl. auch drei - dürfte an der Sache aber ja nicht viel ändern).

    Derzeit gibt es 10 Server und an dieser Stelle soll dynamisch angzeigt werden, welche Server den jeweiligen Inhalt bereitstellen.
     

  6. #6
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Dann koenntest Du vielleicht sowas nutzen:
    PHP-Code:
    $x=1;
    $col=1;
    echo 
    '<tr>';
    while (
    $row=mysql_fetch_array($MyQuery))
     {
      echo 
    '<td>'.$row['Spalte'.$col].'</td>';
      if (
    $x%2==0)
      {
       
    $col++;
       echo 
    '</tr><tr>';
      }
      
    $x++;
     }
    echo 
    '</tr>'
    Bin jetzt nicht sicher ob's laeuft. Ist spontan getippt, und das beim Telefonieren.
    Geändert von Dennis Wronka (03.09.05 um 10:09 Uhr)
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  7. #7
    Avatar von Irgendjemand_1
    Irgendjemand_1 Irgendjemand_1 ist offline Mitglied Platin
    Registriert seit
    Aug 2005
    Beiträge
    656
    Naja er will sicher auch wissen, wie das ganze funktioniert.
    Mit if ($x%2==0) fragt er ab, ob $x geteilt durch 2 gleich den Restwert 0 ergibt, sprich: ob $x teilbar durch 2 ist.

    Diese Bediengung wird also bei jedem 2. Schleifendurchlauf erfüllt.
    Aber was soll das $col machen?
    Wird nach jedem 2. mal eins erhöht. Für was?
     

  8. #8
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Um eine solche Ausgabe zu erreichen:
    row1/col1 | row2/col1
    row3/col2 | row4/col2
    row5/col3 | row6/col3
    row7/col4 | row8/col4
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  9. #9
    Avatar von Irgendjemand_1
    Irgendjemand_1 Irgendjemand_1 ist offline Mitglied Platin
    Registriert seit
    Aug 2005
    Beiträge
    656
    Achso
    Naja dein Teil müsste eigentlich schon klappen.
     

  10. #10
    Elminster Elminster ist offline Grünschnabel
    Registriert seit
    Oct 2003
    Beiträge
    4
    Vielen Dank für eure Antworten

    Nach ewiger Zeit und viel verlorenen Nerven hab ich's nu hingekriegt. Die Lösung hab ich an den Anfang des Beitrags gepackt - vielleicht kann's ja noch mal jemand brauchen (ich hab mich jedenfalls ziemlich totgesucht). Hab's auch etwas totkommentiert für den nächsten Laien meiner Gattung

    Cool wäre es natürlich, wenn man einfach den ganzen Code auslagern könnte und dann per include an beliebiger Stelle einfügen könnte um solche Tabellen zu schreiben. Vorm inlcude müßte man dann nur $mc_result und $columns initiieren und dann losschreiben.

    Also so:
    PHP-Code:
    $mc_result mysql_query($sql);
    $columns =3;

    // (alles bis zum Kommentar HIER FOLGT DER ZELLENINHALT)
    include multiCol_Top.inc  

    // Mein Zelleninhalt - also das was sich wirklich ändert
    echo ("Deine Planlosigkeitsstufe: " .$row["Stufen"] . " ergibt deine PHP-tauglichkeit: " .$row["PHP_Tauglichkeit"]);

    // (alles bis zum Kommentar ENDE ZELLENINHALT)
    include multiCol_Bottom.inc 
    aber leider ned, weil's mitten in nem While-Loop auseinandergerissen würde. Wenn da jemand noch nen simple Möglichkeit / "Trick" kennt...

    Wirklich geschnallt hab ich aber noch ned wie das mit dem mysql_fetch_array($result) . Wieso geht sowas nicht:

    PHP-Code:
    $row1 mysql_fetch_array($result)
    $row2 mysql_fetch_array($result
    Funktioniert diese Zuweisung wie bei nem Pointer (ned das ich wirklich wüßte worüber ich hier rede - nur schemenhaft)?

    @reptiler:
    Deine Lösung würde , wenn man nur eine Zeile pro Recordset schreiben wollte - wahrscheinlich habe ich deine Nachfrage da mißverstanden. Wie's gedacht war siehst du oben im Code

    @Irgendjemand_1:
    Das nennt man Modulo, aber danke für die Mühe einer Erläuterung
     

Ähnliche Themen

  1. ListIterator, next(), previous()
    Von MS-Tech im Forum Java
    Antworten: 1
    Letzter Beitrag: 14.11.08, 18:05
  2. "previous declaration of" trotz #ifndef
    Von dotti im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 15.11.07, 12:33
  3. Bildergalerie mit Next und Previous Button
    Von Crushmeifyoucan im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 06.08.04, 21:39
  4. seiten: previous - next
    Von kaits im Forum PHP
    Antworten: 3
    Letzter Beitrag: 18.12.02, 13:57
  5. morpheus previous : unable to connect
    Von Cstar im Forum Audiotechnik, Recording & Audio-Software
    Antworten: 2
    Letzter Beitrag: 10.04.02, 11:07