Hi, ich habe kein Plan, wie ich jetzt trotz Wapjoes und Borlanders Bemühungen eine begrenzte Anzahl an Bildern in ene Reihe bekomme. Die Frage tauchte vor kurzem schonmal auf, jaaa ich ab im Archiv geblättert :o) aber da stand nur ein Hinweis von zaphod, man solle noch eine 2. Schleife verwenden. Aber wie mache ich der schleife das klar, dass sie bis 3 zählen soll und dann die nächsten 3 zeigen soll? Sorry, habe mir hier gestern alles in meinem hirn zerbrochen was geht.
Hier mal mein code
$db=mysql_connect(“”,””,””);
mysql_select_db(“datenbank”,$db);
$result=mysql_query(“select * from tabelle”,$db);
gesamt_zeilen=mysql_num_rows($result);
print’<table border=”1”><tr>’;
while($zeile=mysql_fetch_object($result))
{
echo”<ttd>zeile->spalte<t/td>
<ttd>zeile->spalte<t/td>
<ttd>zeile->spalte<t/td>”;
}
print’<t/tr><t/table>’;
(Hoffe, der cde wird nicht vrehackstückelt)
Heinz_Malcher hat mir den Vorschlag gemacht, einfach 3 Bilder/Texte in jeder tabelle zu speichern, das ist mir aber zu umstänclich ausserdem würd ich gern das prinzip verstehen.
Ich brauche den nötigen Denkanstoss, ansonsten ist mir das Prinzip klar
Homepage selbermachen 7.852 Themen, 35.619 Beiträge
while($zeile=mysql_fetch_object($result))
{
// Tabelle öffnen:
echo \"<table><tr>\";
$zaehler = 1;
//dein Code, soweit ich ihn entziffert habe:
//Bilder einfügen:
$db=mysql_connect(...,...,...);
mysql_select_db(\“datenbank\”,$db);
$result=mysql_query(\“select * from tabelle\”,$db);
gesamt_zeilen=mysql_num_rows($result);
while($zeile=mysql_fetch_object($result))
{
// Hier komm jetzt der Trick:
//wenn sich der Zähler durch 3 teilen lässt
//(bei jedem dritten Bild), mache eine neue Zeile:
if (($zähler % 3) == 0)
{
echo \"</tr><tr>\";
}
echo\”<td>\".zeile->spalte.\"</td>\";
// Jetzt noch nach einer Spalte Zähler hochsetzen:
$zaehler = $zaehler++:
}
//Tabelle schließen
echo \"</tr></table>\";
}
... untested + ohne Gewähr, sollte aber so gehen ...
... denk dir die "\\" weg - Code posten ist hier eine Wissenschaft für sich ;-(
.... wie mache ich hier denn einen Backslash? mache ich einen, wird er gefressen, escape ich ihn, habe ich zwei ;-(
hi Zaphod!
Wenn du einen backslash machst, wird der nicht in der Vorschau angezeigt, aber im Posting!
Machst du zwei, kriegst du in der Vorschau einen und im Posting 2!
Test: \ \\ \ \\
cu
wapjoe
ja, zaphod´s lösung sollte so funktionieren. die einfachste lösung sollte der modulus (%) sein. ist der zähler ohne rest durch die anzahl der elemente, die du in einer zeile haben willst +1 teilbar, so muß eine neue zeile beginnen. das einzige was noch fahlt, ist ein weg der dafür sorgt eine valide html-tabelle daraus zu bekommen, sonst kann es passieren, daß plätzlich eine reihe mit nur einer zelle am ende auftaucht, die dann das layout der tabelle zerstört.
Hi Schnurbart!
Auch wenn ich nicht gefragt bin, aber ich hab das script von Zaphod etwas verändert:
Warum soll in der Schleife, jedesmal eine neue Tabelle aufgemacht werden?!
// Tabelle öffnen:
echo "<table><tr>";
while($zeile=mysql_fetch_object($result))
{
$zaehler = 1;
//dein Code, soweit ich ihn entziffert habe:
//Bilder einfügen:
$db=mysql_connect(...,...,...);
mysql_select_db(“datenbank”,$db);
$result=mysql_query(“select * from tabelle”,$db);
gesamt_zeilen=mysql_num_rows($result);
while($zeile=mysql_fetch_object($result))
{
echo”<td>".zeile->spalte."</td>";
// Hier komm jetzt der Trick:
//wenn sich der Zähler durch 3 teilen lässt
//(bei jedem dritten Bild), mache eine neue Zeile:
if (($zähler % 3) == 0)
{
echo "</tr><tr>";
}
// Jetzt noch nach einer Spalte Zähler hochsetzen:
$zaehler = $zaehler++:
}
}
//Tabelle schließen
echo "</tr></table>";
Sorry, wenn das gestern sehr verwirrend rüber kam, aber ich kann das nicht im chat machen!
Ich hoffe mal, daß das script korrekt angezeigt wird...
cu
wapjoe
PS: hatte noch nen fehler gefunden, daher bearbeitet!
[Diese Nachricht wurde nachträglich bearbeitet.]
Kleine anmerkung meinerseits:
auch wenn schnurbart mein code zu umständlich war, mit limit x,y zu arbeiten und dann y =3 als konstante zu belassen und x entsprechend zu erhöhen...
euer code geht nicht, testet ihn selbst mal, abgesehen von den kleinen syntaxfehlern bringt die schleife irgendwie nichts. sie bricht nicht um nach 3 erzeugten bildern.
Stimmt, jetzt wird alles in einer Zeile gehauen, aber wo liegt denn der Fehler ??!!
... Heinz, die _muss_ nach drei Bildern umbrechen - da steckt noch ein Vertipper drin, oder die Zählariable wurde bei deinem Testcode nicht oder nicht richtig initialisiert oder aber nicht hochgezählt... Alle drei Durchläufe rennt der in die if-Bedingung und fabriziert eine neue Tablerow - das ist im Prinzip idiotensicher ...
Hallo zaphod, zwar weiss ich jetzt nit, ob du einen anderen code meinst, den heiz da hat, aber ich hab den hier ausprobiert, abgesehen von den genannten normalen syntaxvertippern, zieht er echt alles in eine zeile: sieht so aus:
test1...text2...text3.....
naja, statt vertikal eben horizontal. könnt ihr euch den code nochmal ansehen bitte? heinz hat mir eine variante geschrieben, die absolut unmöglich ist, auch wenns funktioniert, sorry, aber ich muss in heinz variante 4 mal aus der db neue dateninfos holen :(
achso ja und ich hab auch schon rumgespielt mit der $zaehler variable etc. aber es will nicht klappen, es ist halt irgendwie so, wie als wenn die if schleiffe garnich greifft
.... so, Hauptfehler war, dass $zaehler++ nicht geht - ist c-Code ;-(.
Dann muss man $zaehler mit 0 initialisieren, sonst hat die erste Zele nur zwei Zellen.
Funktionierender Code zum anschauen hier und das Ergebnis hier ;-)
Will nun meinen Code auch noch mal zum besten geben ;-)
// Bildausgabe in 3 Spalten aus mit einer DB
// [...] Datenbankverbindung herstellen und Abfragen
echo '<table><tr>'; // Tabelle öffnen
\$counter = 0; // Zähler initialisieren
while (\$row = mysql_fetch_irgendwas(\$result))
{
echo '<td> %IMG% </td>'; // Bild ausgeben
\$counter++; // Zähler incrementieren
if (\$counter % 3 == 0)
echo '</tr><td>'; // nach 3 Bildern, neue Zeile
}
// fehlende Zellen ausgeben
str_repeat('<td></td>', 3 - \$counter % 3);
echo '</tr></table>'; // Tabelle schließen
// [...] Datenbankverbindung schließen
@Zaphod & wapjoe:
Warum zählt Ihr erst die Zeilen, wenn Ihr den Wert später nicht mehr benutzt?
Auch Eure verschschtelten Schleifen kann ich nicht ganz nachvollziehen, wäre schön wenn Ihr das nochmal erläutern könntet.
CU Borlander
Hab das bisher nicht getestet, ist also ohne Gewähr.
Die "\" vor dem "$" gehören da eigentlich nicht mit rein. Müsste also so aussehen:
// Bildausgabe in 3 Spalten aus mit einer DB
// [...] Datenbankverbindung herstellen und Abfragen
echo '<table><tr>'; // Tabelle öffnen
$counter = 0; // Zähler initialisieren
while ($row = mysql_fetch_irgendwas($result))
{
echo '<td> %IMG% </td>'; // Bild ausgeben
$counter++; // Zähler incrementieren
if ($counter % 3 == 0)
echo '</tr><td>'; // nach 3 Bildern, neue Zeile
}
// fehlende Zellen ausgeben
str_repeat('<td></td>', 3 - $counter % 3);
echo '</tr></table>'; // Tabelle schließen
// [...] Datenbankverbindung schließen
okay, wenn schon alle dran war´n, dann will ich auch meinen
senf abgeben ;o)...
versuche es mal mit folgender funktion:
function format_table($args,$items)
{
echo "<table border=1>";
for($i=0;$i<count($args);$i++)
{
if($i%$items==0)
{
echo "<tr>";
}
echo "<td>$args[$i]</td>";
if($i==count($args)-1)
{
while($i%$items!=$items-1)
{
echo "<td> </td>";
$i++;
}
}
if($i%$items==$items-1)
{
echo "</tr>";
}
}
echo "</table>";
}
ist jetzt zwar nicht direkt auf deinen anwendungsfall ausgerichtet
geht aber auch, wenn du die bilder (oder was auch immer) als array übergibst, zusammen mit der anzahl der elemente, die pro zeile angezeigt werden sollen.
ps:
$args muß ein array sein, $items die anzahl der anzuzeigenden elemente.
Dein Code denke ich, ist sehr effektiv. allerdings habe ich mir heute mal mein erstes PHP BUch gekauft :) dort gleich mal reingelesen: Seltsamerweise wird dort erklärt, dass der Befehl i++; so funktionieren sollte:
$i == 1;
$i++;
echo $i;
//Ausgabe ... 2
Ich kenne kein C oder C++
Aber mich würde interessieren, wieso das nicht geht.
das geht schon, nur eben in der form $zaehler++; und nicht in der form $zaehler=$zaehler++;
Ouuhhhh ach so :( Sorry stimmt ja
was übrigens auch geht (bei 1er schritten macht es zwar keinen sinn, aber eventuell bei 2, 3, ...) ist $zaehler+=1;
ist aber prinzipiell egal ob nun ++$zaehler oder $zaehler++
wenn man ihn nicht sofort ausgeben will oder? also z.b. nur den zaehler um 1 erhöhen will
das ++ kann sowohl vor oder auch nach der variablen stehen, hat jedoch unterschiedliche auswirkungen:
schreibe ich folgenden ausdruck
$i=0;
echo $i++;
was denkst du kommt dabei als ausgabe raus?
nein, es wird nicht 1 ausgegeben, sondern 0...
schreibe ich nun
$i=0;
echo ++$i;
was wird jetzt ausgegeben? richtig, 1.
klarer wird es bei folgendem ausdruck
$i=0;
echo $i++;
echo "<br />".$i;
ausgegeben wird
0
1
wird nun der unterschied klar?
falls nein:
steht das inkrement vor der variablen, so wird zuerst inkrementiert und dann ausgeführt, steht das inkrement nach der variablen, so wird erst ausgeführt, anschließend inkrementiert.