Homepage selbermachen 7.852 Themen, 35.619 Beiträge

Frage an Xafford Zaphod Borlander Heinz_Malcher

Schnurbart / 21 Antworten / Baumansicht Nickles

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

bei Antwort benachrichtigen
Zaphod Schnurbart „Frage an Xafford Zaphod Borlander Heinz_Malcher“
Optionen
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 ...
bei Antwort benachrichtigen
Zaphod Nachtrag zu: „while zeile mysql_fetch_object result // Tabelle öffnen: echo zaehler 1 //dein...“
Optionen

... denk dir die "\\" weg - Code posten ist hier eine Wissenschaft für sich ;-(

bei Antwort benachrichtigen
Zaphod Nachtrag zu: „... denk dir die weg - Code posten ist hier eine Wissenschaft für sich - “
Optionen

.... wie mache ich hier denn einen Backslash? mache ich einen, wird er gefressen, escape ich ihn, habe ich zwei ;-(

bei Antwort benachrichtigen
wapjoe Zaphod „.... wie mache ich hier denn einen Backslash? mache ich einen, wird er...“
Optionen

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

bei Antwort benachrichtigen
xafford Schnurbart „Frage an Xafford Zaphod Borlander Heinz_Malcher“
Optionen

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.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
wapjoe Schnurbart „Frage an Xafford Zaphod Borlander Heinz_Malcher“
Optionen

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.]
bei Antwort benachrichtigen
Heinz_Malcher Schnurbart „Frage an Xafford Zaphod Borlander Heinz_Malcher“
Optionen

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.

bei Antwort benachrichtigen
Schnurbart Heinz_Malcher „euer code geht leider nicht“
Optionen

Stimmt, jetzt wird alles in einer Zeile gehauen, aber wo liegt denn der Fehler ??!!

bei Antwort benachrichtigen
Zaphod Heinz_Malcher „euer code geht leider nicht“
Optionen

... 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 ...

bei Antwort benachrichtigen
Schnurbart Zaphod „euer code geht leider nicht“
Optionen

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 :(

bei Antwort benachrichtigen
Schnurbart Zaphod „euer code geht leider nicht“
Optionen

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

bei Antwort benachrichtigen
Zaphod Schnurbart „nachtrag...“
Optionen

.... 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 ;-)

bei Antwort benachrichtigen
Borlander Schnurbart „Frage an Xafford Zaphod Borlander Heinz_Malcher“
Optionen

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
bei Antwort benachrichtigen
Borlander Nachtrag zu: „Will nun meinen Code auch noch mal zum besten geben - // Bildausgabe in 3...“
Optionen

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

bei Antwort benachrichtigen
xafford Schnurbart „Frage an Xafford Zaphod Borlander Heinz_Malcher“
Optionen

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.
Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher Schnurbart „Frage an Xafford Zaphod Borlander Heinz_Malcher“
Optionen

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.

bei Antwort benachrichtigen
xafford Heinz_Malcher „@Zaphod wg. i++“
Optionen

das geht schon, nur eben in der form $zaehler++; und nicht in der form $zaehler=$zaehler++;

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher xafford „@Zaphod wg. i++“
Optionen

Ouuhhhh ach so :( Sorry stimmt ja

bei Antwort benachrichtigen
xafford Heinz_Malcher „@Zaphod wg. i++“
Optionen

was übrigens auch geht (bei 1er schritten macht es zwar keinen sinn, aber eventuell bei 2, 3, ...) ist $zaehler+=1;

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher xafford „@Zaphod wg. i++“
Optionen

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

bei Antwort benachrichtigen
xafford Heinz_Malcher „@Zaphod wg. i++“
Optionen

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.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen