Homepage selbermachen 7.851 Themen, 35.616 Beiträge

@xafford while schleife/ foreach schleife

T E S T E R / 1 Antworten / Flachansicht Nickles

Hi xafford, danke dass du mir erklärt hast, wie man die datensätze ausliest

eine frage habe ich aber noch.

H_M hat eine foreach schleife gepostet:

$result=mysql_query("SELECT * FROM test;");
$feld=mysql_fetch_row($result);
foreach ($feld as felder
print("$felder[0]$felder[1]");}


Diese liest aber nur eine Zeile aus.

Ich finde die while schleife von dir:


$result=mysql_query("SELECT * FROM test;");
while($feld=mysql_fetch_row($result)){
print("$feld[0]$feld[1]");}



  • Aber ich verstehe die while schleife gesamt vom prinzip her nicht, was genau tut sie, wie ist eine while schleife zu verstehen?

  • und wieso liest foreach nur jeweils eine zeile aus
bei Antwort benachrichtigen
xafford T E S T E R „@xafford while schleife/ foreach schleife“
Optionen

der grund für den unterschied ist relativ leicht erklärt, wobei der code den du oben erwähnt hast als erstes überhaupt nicht funktionieren dürfte, siondern einen fehlermeldung derart "undefined index 1 in xxx" liefern sollte.
die funktion mysql_fetch_row liefert ein array zurück, das aus den feldern eines datensatzes besteht und setzt gleichzeitig den internen pointer auf den nächsten datensatz. wenn du den datensatz zurückgeben willst mußt du nun entweder genau den feldindex angeben:
$wert[0] $wert[1], oder du mußt das array durchlaufen lassen foreach($wert as $value)
dies gilt allerdings imme rnur für den durch mysql_fetch_row zurückgelieferten datensatz. wenn du nun alle durchlaufen lassen willst brauchst du noch eine iteration durch alle im ergebnisbezeichner enthaltenen verweise auf gefundene datensätze (der ergebnisbezeichner ist $result=mysql_query();)
dies geht entweder über eine for-schleife, indem du vorher die anzahl der datensätze ausliest mit: $count=mysql_num_rows(); und dies als obergrenze für die iteration nimmst, oder eben einfacher mit einer while schleife.
als kurze erklärung wie eine schleife arbeitet.
schleifenbefehl(argument){funktionen}
die schleife wird solange ausgeführt, wie argument true ist.
mysql:_fetch_row setzt nach dem auslesen eines eintrages den pointer auf den nächsten datensatz und liefert true zurück, bei dem nächsten durchlauf wird der datensatz zurückgegeben an dem der pointer steht. ist der letzte datensatz gelesen und steht der pointer am ende, so wird beim nächsten durchlauf false zurückgeliefert und die iteration ist beendet.
somit wirkt die schleife folgendermaßen:
while(datensatz als array auslesen und pointer höher setzen){
geliefertes array durchlaufen und werte darstellen
}
wenn ich also nicht den gesamten ergebnisbezeichner $result durchlaufe wird mir mit mysql_fetch_row immer nur ein datensatz geliefert.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen