PHP Datensätze in Tabelle horizontal u. vertikal ausgeben!

stit

Grünschnabel
Hallo Leute,
bin gerade dabei für unseren Verein eine Website zu erstellen und hänge jetzt an einem Problem fest. Und zwar möchte ich Datensätze, welche ich aus einer MySQL Datenbank herauslese in eine Tabelle ausgeben. Soweit so gut, jedoch sollten immer nur vier Datensätze nebeneinander in der Tabelle angezeigt werden und dann die nächsten 4 in einer neuen Zeile drunter usw.
Ich erstelle die Website mit Dreamweaver MX und habe bis jetzt den folgenen Code herausgezaubert:

PHP:
<form name="form1" method="post" action="">
                   <p align="center">&nbsp;</p>
            <p align="center">
              <?php do { ?>
              <img name="Platzhalter" src="Sponsoren/<?php echo $row_rs_sponsoren['Bild']; ?>" alt=""><?php } while ($row_rs_sponsoren = mysql_fetch_assoc($rs_sponsoren)); ?>
            </p>
  </form>

Jeglicher Versuch bis jetzt, irgendwie die Daten in eine Tabelle zu packen liefen schief. Ich denke dass man dies irgendwie mit einer Schleife richtig hinbekommt, aber ich steh im Moment total auf der Leitung.

Vielleicht kann mir ja jemand helfen.

Vielen Dank

lg
Thomas
 
und ich verstehe im Moment die Frage nicht

in dem Code den du gepostet hast sehe ich keine Tabelle

scheinbar willst duch auch irgenwelche Bilder anzeigen

hat das mit dem Formular eine Bewandnis ?

ich vermisse sowas
<table>
<tr><td> .....</td></tr>

usw...
 
Dein Problem fängt damit an, das du eine do-while verwendest, was in diesem Falle der falsche Weg ist. Eine while-Schleife ist hier notwendig. Und zwar aus dem Grund:

- do-while ist Fussgesteuert
- while ist Kopfgesteuert

Das bedeutet, beim ersten Durchlauf der do-while wird der Körper auf jeden Fall einmal ausgeführt. Die Variable $row_rs_sponsoren ist zu diesem Zeitpunkt jedoch noch nicht belegt.

Lösungsansatz deiner Anforderung:

- Gebe mittel echo zunächst einmal den Table-Tag und den Anfangs-Tag für eine Table-Row aus.
- Erzeuge eine Zähl-Variable, die mit 0 initialisiert wird.
- Verwende eine while-Schleife statt einer do-while-Schleife.
- Innerhalb des Schleifen-Körpers prüfst du, ob die Zähl-Variable noch keiner 3 ist.
> ist dem nicht so, gibst du den End-Tag sowie einen neuen Anfangs-Tag für eine Table-Row mittels echo aus und setzt die Zähl-Varialbe wieder auf 0 zurück.
> ist dem so, inkrementierst du die Zähl-Variable um eins.
- Immer noch im Schleifen-Körper gibst du das Bild mittels echo aus.
 
Oder divs nehmen die auf 25% breite setzten und floaten.

PHP:
<form name="form1" method="post" action="">
  <p>&nbsp;</p>
  <div>
    <?php while ($row = mysql_fetch_object($rs_sponsoren)) : ?>
      <div style="width:25%;float:left;text-align:center">
        <img name="Platzhalter" src="Sponsoren/<?php echo $row->Bild; ?>" alt="" />
      </div>
    <?php endwhile; ?>
    <div style="clear:left"></div>
  </div>
</form>
 
@napofis
vielen Dank für deinen Code, allerdings weiß ich mit dem Code bezüglich des Designs der Tabelle nicht viel anzufangen, da ich nicht möchte, dass die Bilder aneinanderkleben. Außerdem sieht das Ganze im IE anders aus als im Firefox.

@saftmeister
hab den Code jetzt folgendermaßen gelöst, wie du mir beschrieben hast, jetzt leuchtets mir selber ein *gg*.
Habe nur noch ein Problem und zwar zeigts mir nicht alle Datensätze an. Es fehlt jedesmal der Datensatz der am Anfang der Tabelle stehen sollte, also sprich bei 9 Datensätzen fehlt der 1te und 6te.

An was könnte dies noch liegen....?

PHP:
<form name="form1" method="post" action=""> 
	  
	   <?php 
	   
	   echo "<table align='center' width='400' border='1' cellpadding='0' cellspacing='10' bordercolor='#000000'>";
	   echo "<tr>";
	   
	   $zahl=0;
	   
	   while($row = mysql_fetch_object($rs_sponsoren))
	   {
	   
	   if($zahl<4)
	   {
	   echo "<td>";
	   echo "<img src='Sponsoren/$row->Bild'>";
	   echo "</td>";
	   $zahl++;
	   $zahler++;
	   }
	   else
	   {
	   echo "</tr>";
	   echo "<tr>";
	   $zahl=1;
	   $zahler++;
	   }
	   
	   }
	   
	   echo "</table>"
	   ?>
	 </form>
 
ui, Tabs bringen viel Lesbarkeit.
Zweites Ui: Wozu ein Formular?

Hier mal dein Code formatiert, damit man auch versteht was ab geht
PHP:
       echo "<table align='center' width='400' border='1' cellpadding='0' cellspacing='10' bordercolor='#000000'>";
       echo "<tr>";
       
       $zahl=0;      
       while($row = mysql_fetch_object($rs_sponsoren)){
	       if($zahl<4){
		       echo "<td>";
		       echo "<img src='Sponsoren/$row->Bild'>";
		       echo "</td>";
		       $zahl++;
		       $zahler++;
		   }else{
		       echo "</tr>";
		       echo "<tr>";
		       $zahl=1;
		       $zahler++;
	       }       
       }
       
       echo "</table>"
Wie man sieht, wird der 4te Datensatz nie ausgegeben, weil er in den else-Teil kommt und dort keine Ausgabe stattfindet.
Zudem beginnst du mit dem Zähler auf 0, beim zurücksetzen im Else-Teil setzt du ihn nur noch auf 1. Ergo werden ab da nur noch 3 Einträge pro Zeile ausgegeben und nicht mehr 4 wie am Anfang

PHP:
	$spalte = 0;
	$zeile = 0; 
	while($row = mysql_fetch_object($rs_sponsoren)){
		$bilder[$zeile][$spalte] = "<td><img src='Sponsoren/$row->Bild'></td>";
		//Zähler eins erhöhen und wenn das Ende der Zeile erreicht wird, Zähler zuürcksetzen
		if($spalte++ == 4){
			$spalte = 0;
			$zeile++;
		}
	}
	//Ausgabe:
	echo "<table align='center' width='400' border='1' cellpadding='0' cellspacing='10' bordercolor='#000000'>";
	foreach($bilder as $zeile){
		//Den letzten Array ggf mit leehren Feldern aufüllen
		if(($cnt = count($zeile)) < 4){
			$zeile = $zeile + array_fill($cnt, 4-$cnt, '<td />');
		}
		//Jede zeile Ausgeben
		echo '<tr>'.implode('', $zeile).'</tr>';
	}
	echo '</table>';
 
@napofis
vielen Dank für deinen Code, allerdings weiß ich mit dem Code bezüglich des Designs der Tabelle nicht viel anzufangen, da ich nicht möchte, dass die Bilder aneinanderkleben. Außerdem sieht das Ganze im IE anders aus als im Firefox.

Mein Beispiel erfordert auch etwas mehr CSS Kenntnisse aber mit Tabellen geht es genauso einfach ohne viel zu rechnen wenn man die Tabellenzellen mit zählt und prüft ob der Zähler durch 4 Teilbar ist und keinen Rest ergibt.

PHP:
<form name="form1" method="post" action="">
  <p>&nbsp;</p>
  <table>
    <tbody>
      <tr>
      <?php 
      $n=0;
      while ($row = mysql_fetch_object($rs_sponsoren)) : 
      if(($n++%4)==0 && $n!=0) echo '</tr><tr>';
      ?>
        <td><img name="Platzhalter" src="Sponsoren/<?php echo $row->Bild; ?>" alt="" /></td>
      <?php endwhile; ?>
      </tr>
    </tbody>
  </table>
</form>
 
Zuletzt bearbeitet:
So jetzt hab ichs selber noch hinbekommen. Danke für die Tipps und aus Fehlerbeheben *gg*

Hier der Code.

PHP:
<?php 
	   
	   echo "<table align='center' width='400' border='0' cellpadding='1' cellspacing='10' bordercolor='FCF9F1'>";
	   echo "<tr>";
	   
	   $zahl=0;
	   
	   while($row = mysql_fetch_object($rs_sponsoren))
	   {
	   
	   if($zahl<4)
	   {
	   echo "<td bgcolor='#000000'>";
	   echo "<img src='Sponsoren/$row->Bild'>";
	   echo "</td>";
	   $zahl++;
	   }
	   else
	   {
	   echo "</tr>";
	   echo "<tr>";
	   echo "<td bgcolor='#000000'>";
	   echo "<img src='Sponsoren/$row->Bild'>";
	   echo "</td>";
	   $zahl=1;
	   }
	   
	   }
	   
	   echo "</table>"
	   ?>
 
Zurück