Freebee: Array erzeugt keine Spalten - warum?

Hi @all

bin grade dabei, mich mit PHP anzufreunden, da ich als alter "HTML'ler" ein Projekt übernommen habe und mich der Aufwand in Bezug auf die täglichen Änderungen zu nerven beginnt.

Mein Problem: ich habe ein Array definiert, welches die Daten aus einer MySQL-Tabelle auslesen und in 3 Spalten nebeneinander augeben soll - Datensatz für Datensatz. Statt des erwarteten Ergebnis schreibt er die Daten aber in Zeilen (anstelle Spalten). Könnt ihr mir helfen?

So SOLL es aussehen:

-----------------------------------------------
| Spalte 1     |  Spalte 2     |  Spalte 3    |
-----------------------------------------------
| Datensatz 1  |  Datensatz 2  |  Datensatz 3 |
-----------------------------------------------
| Datensatz 4  |  Datensatz 5  |  Datensatz 6 |
-----------------------------------------------

Und SO sieht es aus:

----------------
| Datensatz 1  |
----------------
| Datensatz 2  |
----------------
| Datensatz 3  |
----------------

Und das ist der Code:

<?php
$abfrage = "SELECT * FROM tiere WHERE Status NOT LIKE 'Vermittelt' ";
$ergebnis = mysql_query($abfrage) OR die(mysql_error());;

while($row = mysql_fetch_array($ergebnis)) {
 echo "<table border = 0 width = 180 colspan = 3>";
  echo "<tr>";
   echo "<td><font size = 1><b>".$row["Name"]." - ".$row["Alter"]." alt </b><br>".$row["Short_text"]."</td>";
  echo "</tr>";
 echo "</table>";
  }
?>

  1. Hi,

    warum benutzt du eigentlich soooo viele Tabellen, eine sollte doch reichen :-)

    Klaus!

  2. echo $begrüßung;

    Mein Problem: ich habe ein Array definiert, welches die Daten aus einer MySQL-Tabelle auslesen und in 3 Spalten nebeneinander augeben soll - Datensatz für Datensatz. Statt des erwarteten Ergebnis schreibt er die Daten aber in Zeilen (anstelle Spalten).

    Das ist in deinem Code so festgelegt. Wenn du möchtest, dass drei Tabellenzellen geschrieben werden sollen, und danach eine neue Zeile angefangen werden soll, dann musst du das auch entsprechend in Code gießen. Eine einfache Methode ist, bis drei mitzuzählen (das sollte dein Computer grad noch so hinbekommen, obwohl er mit 0 und 1 eigentlich nur zwei Zustände kennt :-) und dann die aktuelle Zeile beenden und eine neue anfangen und wieder von vorn bis drei zählen. Eine andere Methode ist, fortlaufend zu zählen und auf Teilbarkeit durch 3 zu prüfen (Stichwort: Modulo).

    Und dann gibt es noch die Sonderfälle zu beachten, wie

    • Tabellenanfang
    • letzte Zeile
    • letzte Zeile enthält weniger als 3 Datensätze

    (Jetzt frag aber nicht nach einer (Beispiel)lösung ohne vorher im Archiv nachgesehen zu haben.)

    echo "$verabschiedung $name";

  3. Hi,

    bin grade dabei, mich mit PHP anzufreunden, da ich als alter "HTML'ler" ein Projekt übernommen habe und mich der Aufwand in Bezug auf die täglichen Änderungen zu nerven beginnt.

    Kann es sein, dass "alter HTML'ler" etwas übertrieben ist? ;-)

    Und das ist der Code:

    <?php
    $abfrage = "SELECT * FROM tiere WHERE Status NOT LIKE 'Vermittelt' ";
    $ergebnis = mysql_query($abfrage) OR die(mysql_error());;

    while($row = mysql_fetch_array($ergebnis)) {
    echo "<table border = 0 width = 180 colspan = 3>";
      echo "<tr>";
       echo "<td><font size = 1><b>".$row["Name"]." - ".$row["Alter"]." alt </b><br>".$row["Short_text"]."</td>";
      echo "</tr>";
    echo "</table>";
      }
    ?>

    Hast du dir mal den Quellcode angeschaut, den du damit erzeugst?
    Da sind eine Menge Fehler drin.
    Zum Beispiel gehört colspan wenndann in <td> und nicht in <table> und
    du solltest statt "border = 0" "border='0'" schreiben und bei den anderen Attributen das gleiche.
    Außerdem willst du wohl nur eine Tabelle und nicht eine pro Schleifendurchlauf?
    Du darfst auch nur bei jedem dritten Durchlauf ein neues <tr> machen, wenn du drei Datensätze pro Zeile haben willst. Das geht mit modulo.
    Die Angaben zur Formatierung (z.B. das <b> oder <font>) solltest du dann noch in CSS auslagern.

    mfG,
    steckl

    1. hi,

      Kann es sein, dass "alter HTML'ler" etwas übertrieben ist? ;-)

      "Alt" könnte ja auch im Sinne von "senil" gemeint gewesen sein.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }