Schleife: Ergebnis zeichengetrennt in eine Klammer ausgeben

Schleife: Ergebnis zeichengetrennt in eine Klammer ausgeben

am 30.11.2004 16:30:28 von j_wenke

Hallo,
ich finde nicht den richtigen Ansatz:


Versuch A
.......................
onload=\"MM_preloadImages(";
$resultID2 = mysql_query($q);
while($vw2 = mysql_fetch_assoc($resultID2)) {
$wert2 = sprintf ($pic2path.$vw2['fname'].$format);
echo "'".$wert2."'";
$weiter = $vw2 >= 0;
switch(!$weiter) {
case 1:
print ")\">";
break;
default:
print ","; } }
.......................
Das funktioniert nicht, da die Schleife abgebrochen wird.?


Versuch B
.......................
onload=\"MM_preloadImages(";
$resultID2 = mysql_query($q);
while($vw2 = mysql_fetch_assoc($resultID2)) {
$wert2 = sprintf ($pic2path.$vw2['fname'].$format);
print "'".$wert2."'";
if($vw2 >= 0) {
print ",";
} else {
print ")\">";
} }
.......................

bisherige Versuche führten bis:
onload="MM_preloadImages('pic2/03.jpg','pic2/01.jpg',

und so bekomme ich es noch hin:
onload="MM_preloadImages('pic2/03.jpg','pic2/01.jpg',)"

so soll es sein:
onload="MM_preloadImages('pic2/03.jpg','pic2/01.jpg')"



Könntet ihr mir weiter helfen?
Was gibt es da für Möglichkeiten?


Danke, Gruß, Jörg

Re: Schleife: Ergebnis zeichengetrennt in eine Klammer ausgeben

am 30.11.2004 16:52:59 von Klaus Mueller

Du willst wohl sowas (grob):

....
onload=\"MM_preloadImages(";
....
$nextRow = 1;
while($vw2 = mysql_fetch_assoc($resultID2))
{
if ($nextRow)
{
print ", ";
}
$nextRow = 1;
$wert2 = sprintf ($pic2path.$vw2['fname'].$format);
print "'".$wert2."'";
}
print ")\">";
....

Im ersten durchlauf der Schleife wird das Komma nicht ausgegeben. Wenn ein
weiterer Wert ausgegeben werden soll, dann wird erst das Komma und dann der
Wert ausgegeben. Es wird also immer fuer den aktuellen Wert ermittelt, ob
ein Komma vorher benoetigt wird

Dein Problem ist, dass Du mit dem aktuellen Schleifendurchlauf entscheiden
willst, ob fuer den naechsten Durchlauf noch ein Komma benoetigt wird.

Verstaendlich?
Klaus

Re: Schleife: Ergebnis zeichengetrennt in eine Klammer ausgeben

am 30.11.2004 23:44:02 von j_wenke

Hallo Klaus,
....
>Verstaendlich?
....
Das Ärgernis (Komma) steht jetzt am Anfang :-(
Ja, verständlich schon - theoretisch schön.
Versucht habe ichs, komme aber auf keinen
passenden Wert für $nextRow??
Müßte bzw. könnte der nicht eigentlich "durchzählen"?
Dann könnte man ab Wert 1 Kommatas ausgeben?

Danke, Grüße, Jörg

C. in Probe
........................
onload=\"MM_preloadImages(";
$resultID2 = @mysql_query($q);
$nextRow = mysql_num_rows($resultID2);
while($vw2 = mysql_fetch_assoc($resultID2))
{
if ($nextRow)
{
print ", ";
}
$wert2 = sprintf ($pic2path.$vw2['fname'].$format);
print "'".$wert2."'";
}
print ")\">";
........................

gibt das aus:
onload="MM_preloadImages(, 'pic2/03.jpg','pic2/01.jpg')"

Re: Schleife: Ergebnis zeichengetrennt in eine Klammer ausgeben

am 01.12.2004 00:33:12 von Klaus Mueller

j wenke wrote:
> .......................
> onload=\"MM_preloadImages(";
> $resultID2 = @mysql_query($q);
> $nextRow = mysql_num_rows($resultID2);
> while($vw2 = mysql_fetch_assoc($resultID2))
> {
> if ($nextRow)
> {
> print ", ";
> }
> $wert2 = sprintf ($pic2path.$vw2['fname'].$format);
> print "'".$wert2."'";
> }
> print ")\">";
> .......................

Nein, $nextRow soll NICHT mysql_num_rows() sein. Ich hab nur was geaendert
und vergessen. Das erste $nextRow = 1 ausserhalb der Schleife muss "$nextRow
= 0" heissen. Und auch so da stehen. Also nicht durchzaehlen.

Das ist einfach "nur" ein Flag, welches gesetzt wird, nachdem die Schleife
einmal durchlaufen wurde. Damit wird AB dem zweiten Durchlauf immer ein
Komma vor der Ausgabe des eigentlichen Wertes gemacht.

Klaus

Re: Schleife: Ergebnis zeichengetrennt in eine Klammer ausgeben

am 01.12.2004 14:58:08 von j_wenke

Hallo Klaus,

es funktioniert!
Ich habe beim anfänglichen Probieren übersehen, dass
ich auch mal die if-Bedingung veränderte (nR > 1) :-(

Beim ersten Durchlauf wird aufgrund nR = 0 kein Komma
gesetzt (if ist neg.). Dann bekommt nR = 1 und "die
Abfrage bewegt sich innerhalb der Schleife": es gibt
Kommatas. Und dann gibts kein Result mehr und es kommt zum
Abbruch bzw. Ende der Schleife und - keinem weiteren Komma.

Ungewohnt war für mich, dass vor der
Wert-, die Kommafrage bearbeitet wird - also diese
"Schleifenmechanik".

Danke, Grüße, Jörg

Re: Schleife: Ergebnis zeichengetrennt in eine Klammer ausgeben

am 01.12.2004 16:52:02 von Jens Kirchheimer

Klaus Mueller wrote:
> $nextRow = 1;
> [...]
> if ($nextRow)
> {
> print ", ";
> }
> $nextRow = 1;

Das mit der 1 am Anfang hast du ja schon bemerkt, aber if( $nextRow) ist
ein boolischer Vergleich. Prüft also auf true/false. $nextRow = 1 oder
auch $nextRow = 0 macht aus $nextRow aber einen Integer.
Ich weiss, PHP hat mit Typen nix am Hut, aber das heisst ja nicht, daß
es evtl. doch recht sinnvoll ist ;)
nen $nextRow = true; ... $nextRow = false; oder aber nen
if( $nextRow > 0) wäre doch auch drin oder?

Oder seh ich das komplett falsch?

~Jens

Re: Schleife: Ergebnis zeichengetrennt in eine Klammer ausgeben

am 01.12.2004 16:57:23 von Klaus Mueller

Jens Kirchheimer wrote:
>
> Oder seh ich das komplett falsch?

Ne, sicher nicht. Ich habs nur so aus dem Hut gezaubert. Hab mich da einfach
ne ganze Weile nicht mehr mit beschaeftigt. Das true/false waere sicher
sauberer und verstaendlicher beim lesen.

Klaus

Re: Schleife: Ergebnis zeichengetrennt in eine Klammer ausgeben

am 02.12.2004 07:09:27 von do.not.REMOVETHAT

j wenke schrieb:

[Krampf]

> bisherige Versuche führten bis:
> onload="MM_preloadImages('pic2/03.jpg','pic2/01.jpg',
>
> und so bekomme ich es noch hin:
> onload="MM_preloadImages('pic2/03.jpg','pic2/01.jpg',)"
>
> so soll es sein:
> onload="MM_preloadImages('pic2/03.jpg','pic2/01.jpg')"


$pics=array();
while ($vw2=fetch()){
$pics[]=$pic2path.$vw2['fname'].$format;
}
$imagelist="'" . implode("','",$pics) . "'";

?>

onload="XX_prilotimitsches(''";


Ich habe in meiner persönlich zusammengekleisterten Datenbankklasse nich
ein "multifetch" drinne, welches "multiget" heisst. Dann ist das ein
Einzeiler:

echo "onload=\"mmpi('".implode("','",$db->multiget())."')\"";



Grüße, Matthias

Re: Schleife: Ergebnis zeichengetrennt in eine Klammer ausgeben

am 02.12.2004 07:10:53 von do.not.REMOVETHAT

j wenke schrieb:

[Krampf]

> bisherige Versuche führten bis:
> onload="MM_preloadImages('pic2/03.jpg','pic2/01.jpg',
>
> und so bekomme ich es noch hin:
> onload="MM_preloadImages('pic2/03.jpg','pic2/01.jpg',)"
>
> so soll es sein:
> onload="MM_preloadImages('pic2/03.jpg','pic2/01.jpg')"


$pics=array();
while ($vw2=fetch()){
$pics[]=$pic2path.$vw2['fname'].$format;
}
$imagelist="'" . implode("','",$pics) . "'";

?>

onload="XX_prilotimitsches(''";

Grüße, Matthias