Problem mit einer "for" Schleife...

Björn

Mitglied
Hallo Forum,

ich hab das Problem das ich mir eine "for" Schleife gebastelt hab die mir für eine Ausgabe
von Formularen die Namen der einzelnen input Felder über ein Array um einen Zähler Wert erweitert.

Das Problem ist aber nun dass ich mir die Inhalte für das Formular bereits über "mysql_fetch_row" aus einer Datenbank hole. Dadurch existiert ja bereits schon sowas wie eine Schleife.
Da der Zähler bei jedem Durchlauf wieder bei 0 beginnt bleiben die Werte immer 0, sollen sich aber eigentlich immer um +1 erhöhen.
Schwer zu beschreiben aber ich häng mal den Code als Bsp. ran:

PHP:
$anz=mysql_num_rows($ergebnis);
while ($zeile=mysql_fetch_row($ergebnis)) {

for($i=0; $i<1; $i++) {

print ("Produkt: " . $zeile[1]");
print ("<input name="Produkt".($i)."\" class=\"text\" type=\"hidden\" value=\"$zeile[1]\" /> \n");
    
print ("Konfektion: " . $zeile[2] . "<br />");
print ("<input name=\"Konfektion".($i)."\" class=\"text\" type=\"hidden\" value=\"$zeile[2]\" /\n");
    
print ("id: " . $zeile[0] . "<br />");
print ("<input name=\"id".($i)."\" class=\"text\" type=\"hidden\" value=\"$zeile[0]\" /> \n");
    
print ("Preis: " . $zeile[3] . " &euro; (netto)<br />");
print ("<input name=\"Preis".($i)."\" class=\"text\" type=\"hidden\" value=\"$zeile[3]\" /> \n");
}
}

Die HTML Ausgabe sieht dann so aus:
HTML:
Produkt: Produktname<br />
<input name="Produkt0" class="text" type="hidden" value="Produktname" />

Konfektion: 1000 ml.<br />
<input name="Konfektion0" class="text" type="hidden" value="1000 ml." />

id: 07-001<br />
<input name="id0" class="text" type="hidden" value="07-001" />

Preis: 30,00 &euro; (netto)<br />
<input name="Preis0" class="text" type="hidden" value="30,00" />

Bitte St&uuml;ckzahl angeben:<br />
<input id="Stueckzahl" name="Stueckzahl0" type="text" value="1" /><br />

<!-- Und beim nächsten Durchlauf ist wieder alles auf Wert "0" -->

Produkt: Ein anderer Name<br />
<input name="Produkt0" class="text" type="hidden" value="Produktname" />

Konfektion: 1l.<br />
<input name="Konfektion0" class="text" type="hidden" value="1l." />

id: 07-002<br />
<input name="id0" class="text" type="hidden" value="07-002" />

Preis: 10,00 &euro; (netto)<br />
<input name="Preis0" class="text" type="hidden" value="10,00" />

Bitte St&uuml;ckzahl angeben:<br />
<input id="Stueckzahl" name="Stueckzahl0" type="text" value="1" /><br />

Kann mir jemand sagen wie ich das PHP Script dazu bringe das die Nummern
hinter den Namen aufsteigend sind? Also "Produkt0, Produkt1, Produkt2, usw...
Oh mann ich kapiers nicht.
;-(

b
 
Probier mal Folgendes:
PHP:
<?php

	…

	$i = 0;
	while( $zeile = mysql_fetch_row($ergebnis) ) {
		echo 'Produkt: '.$zeile[1].'<br />';
		echo '<input type="hidden" name="Produkt'.$i.'" value="'.htmlspecialchars($zeile[1]).'" />';
		echo 'Konfektion: '.$zeile[2].'<br />';
		echo '<input type="hidden" name="Konfektion'.$i.'" value="'.htmlspecialchars($zeile[2]).'" />';
		echo 'id: '.$zeile[0].'<br />';
		echo '<input type="hidden" name="id'.$i.'" value="'.htmlspecialchars($zeile[0]).'" />';
		echo 'Preis: '.$zeile[3].' &euro; (netto)<br />';
		echo '<input type="hidden" name="Preis'.$i.'" value="'.htmlspecialchars($zeile[3]).'" />';
		$i++;
	}

	…

?>
 
hmm, was hast du geändert?

1) $i = 0; über das "mysql_fetch_row" gesetzt
2) print duch echo ersetzt
3) .htmlspecialchars zur Konvertierung hinzugefügt

Mist, klappt immer noch nicht!
:-(
 
Wozu hast Du denn die For-Schleife innerhalb der While-Schleife?
Die While-Schleife blättert durch die Datensätze, innerhalb dieser Schleife (also pro Datensatz) gibst Du so oft daie Eingabefelder aus, wie es Datensätze gibt. Erst dann blätterst Du auf den nächsten Satz. Eigentlich müsstest Du i² (Anzahl Datensätze hoch zwei) Ausgabeblöcke kriegen.

Mein Lösungsvorschlag: Lass die For-Schleife weg.

Martin
 
;-)))))))))
Yuhu!!
Das wars, 1000 Dank!
Als nächstes möchte ich alles mitteels PHP in einer Mail versenden.
Ich hoffe das bekomme ich hin.
 
http://www.php-faq.de/q/q-string-print.html
echo() ist ein internes Sprachkonstrukt und gibt nichts zurück, print() ist eine Expression. Man kann print() also in Situationen benutzen, wo Expressions gefragt sind, z. B. $var ? print("...") : null;.

echo hat eine variable Argumentliste, dabei muss man aber auf die Klammern verzichten: echo $var1, $var2;. print() kann nur ein Argument haben und gibt immer 1 zurück.

Alternativ:
http://www.htmlite.com/php004.php
There is a slight difference between print and echo which would depend on how you want to use the outcome. Using the print method can return a true/false value. This may be helpful during a script execution of somesort. Echo does not return a value, but has been considered as a faster executed command. All this can get into a rather complicated discussion, so for now, you can just use whichever one you prefer.
 
Weitergehend gibt es noch Meinungen, die besagen, dass echo gegenüber print() einen leichten Geschwindigkeitsvorteil hat.
 
Zurück