immer 3 Datensätze aus Datenbank nebeneinander anordnen...
Ben
- php
Hallo,
ich bin nach ewigem Rumprobieren wohl schon blind in dieser Sache.
Mein Anliegen ist es, die Datensätze meiner Datenbank so auszugeben, dass jeweils 3 Stück nebeneinander angezeigt werden. Mein Ansatz ist es, das ganze über eine for-Schleifen-Konstruktion zu lösen, die momentan so aussieht, jedoch nicht das gewünschte Ergebnis liefert:
$result = mysql_query($sql, $link);
for($i=0;$i<mysql_num_rows($result);$i++)
{
$ergebnis[$i]=mysql_fetch_array($result);
}
$anzahl = (count($ergebnis) + 1) / 3;
if($anzeige <= "1") {
$anzeige = "1"; }
for($i=0;$i<$anzahl;$i++)
{
echo " <tr>";
for($g=0;$g<3;$g++) {
echo "
<td width="24">".$ergebnis[$g][ID]."</td>
<td width="176">".$ergebnis[$g][name]."</td>
<td width="100"><a href="ausgabe.php?".$ergebnis[$g][name]."">Ansehen</a></td>
<td width="100"><a href="bearbeiten.php?".$ergebnis[$g][name]."">Bearbeiten</a></td>
<td width="150"><a href="delete.php?".$ergebnis[$g][name]."">Löschen</a></td>
";
}
Leider bin in nun ganz durcheinander und benötige eure Hilfe. Wäre wirklich nett, wenn mir jemand sagen könnte, wie ich das ganze umschreiben muss, um meine gewünschte Anordnung zu erhalten.
Vielen Dank im Voraus,
der etwas verwirrte Ben
Ich wuerde an der entsprechenden Stelle den <br>-Tag anbringen
(wenn ich Dich richtig verstanden habe...).
Atze
Hi Atze,
also mit nem <br> sehe ich keine wirkliche Möglichkeit. Es geht darum, dass, egal wie viele Einträge in der Datenbank stehen, immer 3 nebeneinander ausgegeben werden und dann die nächste Zeile angefangen wird. Wüsste nicht, wie ich das mit einem <br> lösen soll...?
Trotzdem danke und vielleicht hast du das ja jetzt besser verstanden (habe mich vielleicht etwas unklar ausgedrückt).
Viele Grüße,
Ben
Hallo!
dass jeweils 3 Stück nebeneinander angezeigt werden ...
Mal vom Prinzip her. Ich habe mal die Erklärung in Stichpunkten geschrieben.
$ds = array(1,2,3,4,5,6,7,8,9,10,11); // Datensätze
$spalte = 3; // Spalten
$zeile = 0; // Zeilezähler
for($i = 1; $i <= count($ds); $i++)
{
// zum Anfand <table> und <tr> schreiben
if($i == 1) { echo "<table border="1">\n<tr>\n"; }
// colspan ausrechnen
// - jede Zeile mit zählen (siehe $zeile++) plus die letzte
// - dann mal der Anzahl der Spalten;
// - das minus der Anzahl der Datensätze
// - die Anzahl der Datensätze für die letzte Zelle minus 1,
// - weil in der letzten Zelle das colspan kommt und
$colspan = ((($zeile+1)*$spalte)-count($ds)+1);
// nur für den letzten Datensatz hier rein, weil da kommt das colspan rein
// aber nur, wenn colspan > 1
// man könnte colspan=1 schreiben, aber ...
if($i == count($ds) AND $colspan > 1)
{
echo "<td colspan="" . $colspan . "">" . $i . "</td>\n";
}
// ansonsten Zelle ohne colspan
else
{
echo "<td>" . $i . "</td>\n";
}
// ist der modulo aus $i und $spalte = 0 => Zeilenumbruch
// der ist aber auch bei 9 Datensätzen und 3 spalten => 0
// also nur schreiben, wenn $i < anzahl Datensätze und modulo aus $i und $spalte => 0
if(($i % $spalte) == 0 AND $i < count($ds))
{
$zeile++;
echo "</tr>\n<tr>\n";
}
// ganz zum Schluss bei letzten Datensatz das letzte </tr> und </table>
// wenn $i gleich die Anzahl der Datensätze ist.
if($i == count($ds)) { echo "</tr>\n</table>\n"; }
}
Wenn Du noch Fragen dazu hast, frage!
MfG, André Laugks
L-Andre @ gmx.de
Hi André,
wow, vielen Dank. Gleich so eine ausführliche Beschreibung. Da werde ich mich mal (jetzt oder lieber morgen nach der Schule...?) genauer mit auseinandersetzen und dann gern auf dein Angebot zurückkommen, weitere Fragen zu stellen, falls es noch nötig ist.
Bin nämlich noch ziemlicher PHP und MySQL Newbie (merkt man wohl) und brauche noch ein Weilchen, um mich in deine Lösung einzulesen.
Ich danke dir auf jeden Fall sehr für deine Mühe. Finde ich großartig von dir. :)
Viele Grüße,
Ben
Hi André,
habe das ganze jetzt mal an mein Script angepasst. Es sieht schon ganz gut aus, jedoch gibt es noch kleine Fehler.
1. fehlte der erste Datensatz (das Array beginnt ja bei 0, nicht bei 1) > das habe ich versucht auszubessern. Nun wird dieser zwar angezeigt, aber allein in der ersten Zeile.
In der nächsten Zeile folgen wie gewünscht 3 Datensätze (2-4). Datensatz 5 folgt dann in der darauf folgenden Zeile. Auch dies ist ja beabsichtigt. Danach wird jedoch ein leerer Datensatz ausgegeben.. Das kann ich mir nicht wirklich erklären.
Das Script sieht nun so aus:
$result = mysql_query($sql, $link);
for($i=0;$i<mysql_num_rows($result);$i++)
{
$ergebnis[$i]=mysql_fetch_array($result);
}
$spalte = 3;
$zeile = 0;
for($i = 0; $i <= count($ergebnis); $i++)
{
if($i == 0) { echo "<table border="1">\n<tr>\n"; }
$colspan = ((($zeile+1)*$spalte)-count($ergebnis)+1);
if($i == count($ergebnis) AND $colspan > 1)
{
echo "<td width="24">".$ergebnis[$i][ID]."</td>
<td width="176">".$ergebnis[$i][name]."</td>
<td width="100"><a href="ausgabe.php?".$ergebnis[$i][name]."">Ansehen</a></td>
<td width="100"><a href="bearbeiten.php?".$ergebnis[$i][name]."">Bearbeiten</a></td>
<td width="150"><a href="delete.php?".$ergebnis[$i][name]."">Löschen</a></td>\n";
}
else
{
echo "<td width="24">".$ergebnis[$i][ID]."</td>
<td width="176">".$ergebnis[$i][name]."</td>
<td width="100"><a href="ausgabe.php?".$ergebnis[$i][name]."">Ansehen</a></td>
<td width="100"><a href="bearbeiten.php?".$ergebnis[$i][name]."">Bearbeiten</a></td>
<td width="150"><a href="delete.php?".$ergebnis[$i][name]."">Löschen</a></td>\n";
}
if(($i % $spalte) == 0 AND $i < count($ergebnis))
{
$zeile++;
echo "</tr>\n<tr>\n";
}
if($i == count($ergebnis)) { echo "</tr>\n</table>\n"; }
}
Hier wird also nach dem 5 (und eigentlich letzten) Datenbankeintrag noch ein <td> angelegt, wo dann die Links enthalten sind, jedoch keine daran gehängten Variablen.
ich hoffe, dass du einigermaßen verstehst, was ich meine. ist nicht immer ganz leicht, das so auszudrücken.. *g*
auf jeden fall vielen dank für deine hilfe,
ben
- fehlte der erste Datensatz (das Array beginnt ja bei 0, nicht bei 1) > das habe ich versucht auszubessern. Nun wird dieser zwar angezeigt, aber allein in der ersten Zeile.
Wenn Du $i auf 0 setzt, mußt Du überall count($ds)-1 rechnen. Im for() schreibst Du $i < count($ds). count() gibt die Anzahl Elemente des Arrays zurück, bei meinem Beispiel sollen die Datensätze die Elemente des Array sein. count() beginnt bei 1 und nicht bei 0. schreibst Du also $i=0, hast Du ein Durchlauf zu viel und der Rest stimmt dann auch nicht mehr.
Verwende ein while-Schleife und nehme eine Variabele zum zählen.
$spalte = 3;
$zeile = 0;
$i = 1; // am Ende der Schleife $i++
$result = mysql_query($sql, $link);
$count = mysql_num_rows($result) // Anzahl der Datensätze
while($row = mysql_fetch_array($result))
{
if($i == 1) { echo "<table border="1">\n<tr>\n"; }
$colspan = ((($zeile+1)*$spalte)-$count+1);
if($i == $count AND $colspan > 1)
{
echo "<td colspan="" . $colspan . "">" . $row['spalte'] . "</td>\n";
}
else
{
echo "<td>" . $row['spalte'] . "</td>\n";
}
if(($i % $spalte) == 0 AND $i < $count)
{
$zeile++;
echo "</tr>\n<tr>\n";
}
if($i == $count) { echo "</tr>\n</table>\n"; }
$i++;
}
MfG, André Laugks
L-Andre @ gmx.de
Hi André,
nach einigem rumprobieren mit deiner Lösung mit der while-Schleife konnte ich nun mein gewünschtes Ergebnis erzielen. :-)
Vielen, vielen Dank für deine Hilfe. Ohne dich wäre ich da wirklich aufgeschmissen gewesen.
Viele Grüße,
Ben