Mit Schleife Tabelle ausgeben

s_traichel

Grünschnabel
Hiho @ all
nun brauche auch ich mal Hilfe.
Ich bin nicht unbedingt das was man einen absoluten Neuling nennt und ich habe auch schon viel mit Datenbanken und PHP selbst realisiert.also wäre ich über einen einfachen Ansatz wie ich die Schleife verschachteln soll schon dankbar.
Hier nun also mein Problem:
Ich möchte zbsp. auf einer Seite sagen wir mal Bilder in einer Tabelle ausgeben ich lese
die anzahl der Datensätze aus mit dem mir bekannten Befehl dann bekomme ich zbsp 18 herraus nun teile ich diesen wert in zwei Teile einmal mit Modulo und einmal mit intval um den ganzwert zu bekommen.
ich möchte nun also in einer Table_row 5 Bilder ausgeben in den ersten 3 reihen funktioniert das auch schon super in der letzten Reihe in der er aber nur 3 anzeigen soll zeigt er 2 leere bilder an also die mit dem roten kreutz oben in der ecke.
Ich glaube ich habe schon alle möglichen verschachtelungen ausprobiert aber es funtzt nich
PHP:
$sql1="SELECT * FROM datei WHERE Datei_Eigentümer='".$username."'";
$result=mysql_query($sql1);
$zeilen=mysql_num_rows($result);
$rest=$zeilen % 5;
$ganzzahl=intval($zeilen/5);

echo $rest;
echo "<br>";
echo $ganzzahl;

echo "<div align='center'><b>Hier werden Die Dateien von: <p class='schriftrot'>".$username." </p>angezeigt. Wenn Sie zum Hauptmenü zurück wollen klicken Sie bitte <a href='start.php'>hier</a></b></div><br><br>";
        echo '<table border="1" align="center">';
         for($i=0;$i<($zeilen/5);$i++)
         {
              echo '<tr>';
                 for($x=0;$x<5;$x++)
                 {
                 $dateiausgabe=mysql_fetch_array($result);
                 echo '<td align="center">';
			if($dateiausgabe['Datei_Erweiterung']=='jpg'||$dateiausgabe['Datei_Erweiterung']=='jpeg'||$dateiausgabe['Datei_Erweiterung']=='png')
                 	{
                 	echo '<table>'
                 	.'<tr><td colspan="2" align="center"><a href="tabeleausgabe2.php?test='.$dateiausgabe['Datei_ID'].'" onclick="Popup(this.href); return false"><img src="'.$dateiausgabe['Datei_Thumb_Pfad'].'" width="50" height="50" border="0" alt=""></a></td><td>&nbsp;</td></tr>'
         		.'<tr><td align="center">'.$dateiausgabe['Datei_Name'].'</td></tr>'
         		.'</table></td>';
                 	}
                         else
                         {
                 	echo '<table>'
                 	.'<tr><td colspan="2" align="center"><img src="'.$dateiausgabe['Datei_Thumb_Pfad'].'" width="50" height="50" border="0" alt=""></td><td>&nbsp;</td></tr>'
         		.'<tr><td align="center">'.$dateiausgabe['Datei_Name'].'</td></tr>'
         		.'</table></td>';
                 	}
                  }
               echo '</tr>';

	}
         echo '</table>';


Über eine schnelle Hilfe würde ich mich sehr freuen ihr braucht auch nicht den ganzen code verändern ein Tip mit einer einfachen leeren tabellenerstellung würde mir schon reichen vielen Dank im Vorraus
 
Du benötigst dafür nicht 3 Schleifen. Eine while-Schleife würden genügen.

Ungefähr so:
PHP:
  $n = 0;

  echo "<table><tr>";

  while($dateiausgabe = mysql_fetch_assoc($result)){
    echo "<td>"
    echo .. bildausgabe und alles was dazu gehört
    echo "</td>";  
    $n++;
    
    if($n == 5) {
      echo "</tr><tr>";
      $n = 0;
    }
  }
 
  echo "</tr></td>";


Un warum wird erst bei der Augabe "geprüft", ob es sich um Bilddateien handelt?

Gruß soyo
 
Sowas schreibt man immer wieder.. aber die Lösung ist nicht ganz optimal da die Tabelle die rauskommt nie korrekt sein wird weil immer entweder zu wenig TD`s oder das ende nicht ganz gültig.

Besser währe die Lösung:

PHP:
<?
$n = 0;
echo '<table>';
while($dateiausgabe = mysql_fetch_assoc($result)){
    if($n%5 == 0) echo "<tr>\n";
    echo '<td>';
    echo '<img src="....">';
    echo '</td>';  
    if($n%5 == 4) echo "</tr>\n";
    $n++;
}
// mit Spacern auffüllen wenn Zeile noch nicht voll
if($n%5 != 0){
    for(;$n%5!=0;$n++)echo '<td>leerbild</td>';
    echo '</tr>';
}
echo "</table>";  
?>
 
Vielen Dank für eure Vorschläge
Die beide natürlich super sind.Da ich aber gestern abend noch eine Lösung haben muste habe ich mich nochmal durchgehangelt und eine einfache wenn auch nutzbare Version erstellt habe.Hier mal meine Lösung:
Wenn man hier die Zahl bei gesamt ändert sieht man das es funktioniert auch wenn an den Zellen selber vielleicht noch anpassungen nötig sind .
Danke Nochmal für eure Hilfe

PHP:
<?
$zähler=1;  // gesetzt nicht ändern
$gesamt=4; //Anzahl der Datensätze
$reihen=ceil($gesamt/5);
$anzahlbilder=$gesamt-$teil;

echo "<table border='1'>";

for($i=0;$i<$reihen;$i++)
{
 echo "<tr>";

 for ($x=0;$x<5;$x++)
 {
 	if($zähler<=$anzahlbilder)
         {
 	echo "<td>";
 	echo "Zähler".$zähler;
 	$zähler++;
 	echo "</td>";
         }
         else
         {
 	echo "<td>";
 	echo " Leer".$zähler;
 	$zähler++;
 	echo "</td>";
         }

 }
 echo "</tr>";

}
echo "</table>";
 
Mein Vorschlag: gib alles in einer ungeordneten Liste aus und formatiere diese anschließend mit CSS.
 
Eine ähnliche Idee hatte ich auch schon einmal. Jedoch bekam ich Probleme, als ich jede 2. Zeile einen andere Hintergrundfrabe zuweisen wollte.
Eventuell kann man dort mit einer Grafik als Hintergrund was erreichen, jedoch bin ich dann doch bei einer Tabelle geblieben.
 
Zurück