Schleifen zusammenfassen?

Fips

Grünschnabel
Hi@all,

also weis ja nich ob das irgendwie möglich ist was ich vorhabe. Habe in meinem Script mehrere Funktionen die die selbe schleife haben. Und zwar diese hier:
Code:
$r = $db->select("SELECT * from main WHERE id='$id'");
 	foreach ($r as $row) { 
		$id = $row[0];
 		$box_id = $row[1];
 		$con_id = $row[2];
 		$article_id = $row[3];
 		$article_no = $row[4];
 		$article = $row[5];
 		$designation = $row[6];
 		$condition = $row[7];
 		$worth = $row[8];
 		$stock = $row[9];
 		$existence = $row[10];
 		$origin = $row[11];
 		$man = $row[12];
 		$mod = $row[13];
 		$sn = $row[14];
 		$img_b = $row[15];
 		$img_s = $row[16];
 		$zub = $row[17];
 		$masse = $row[18];
 		$status = $row[19];
 	}
...
// verschiedene Ausgabedesigns

Kann man die schleife jetzt irgendwie zentralzusammenfssaen so das jede function darauf zugreifen kann und dann natürlich die ganzen variablen bekommt um sie in die verschiedenen Designs einzubinden?

Hab schonmal versucht die Schleife in eine eigene Funktion zu packen... aber irgendwie klappt das mit dem returnen von mehreren Variablen nicht.

Danke für eure Hilfe

MfG
Fips
 
Fips hat gesagt.:
Hab schonmal versucht die Schleife in eine eigene Funktion zu packen... aber irgendwie klappt das mit dem returnen von mehreren Variablen nicht.
Du könntest die ganzen Variablen in ein Array packen und dann dieses Array zurückgeben lassen.

greetz
daddz
 
daddz hat gesagt.:
Du könntest die ganzen Variablen in ein Array packen und dann dieses Array zurückgeben lassen.

greetz
daddz
ähh für was sollte ich dann die Schleife auslagern? Wenn ich ein Array zurückgebe muss ich es ja wieder auslesen... Dann kann ich auch gleich die eigentliche Schleife in der Funktion lassen. Dachte nur ich könnte halt bissl Code sparen indem ich die Schleife zusammenfasse...

MfG
Fips

Edit: ahh sorry jetzt hab ich erst verstanden... bin heut nich so schnell :)
 
Wenn mit [phpf]mysql_fetch_assoc[/phpf] arbeitest, kannst Du $row zurückgeben und erhältst ein assoziatives Array. Wenn Du die Felder in Deinem Select explizit erwähnst, weisst Du auch, welchen Arrayindex sie dann haben, ohne in die DB schauen zu müssen. Gefällt Dir der Name des Feldes nicht oder hältst Du ihn zwar in der DB für toll, im PHP aber für ungeeignet, kannst Du auch einen Aliasnamen mit "Feldname AS Aliasname" im Query angeben.
Edit: wenn Du dieses assoziative Array dann in [phpf]extract[/phpf] reinschmeißt erhältst Du mit einer Anweisung die Variablen.

Gruß hpvw
 
Zuletzt bearbeitet:
Also meine SQL-Klasse arbeitet mit mysql_fetch_array... Versteh die ganze sache immer noch nicht... Steh heute irgendwie aufm Schlauch

MfG
Fips
 
PHP:
$r = $db->select("SELECT id,boxid AS box_id,conid AS con_id,.......,status  from main WHERE id='$id'");
//Daten in der DB-Klasse mit fetch_assoc, statt fetch_array auslesen!
 	foreach ($r as $row) { 
            extract($row);
            echo $id." ".$box_id;
 	}
 
PHP:
$res = $db->execute("SELECT * from main WHERE id='$id'");
 	$row = mysql_fetch_assoc($res);
 	extract($row);
//... Ausgabe der Variablen im Design

hab das jetzt mal so gemacht und es scheint zu funktionieren... Kann doch jetzt eigentlich in meiner Klasse die Select Anweisung in mysql_fetch_assoc umändern und dann alle Select Anweisungen so ausführen
PHP:
$res = $db->select("SELECT * from main WHERE id='$id'");
 	extract($row);
//... Ausgabe der Variablen im Design

Oder?

MfG und Danke für die Hilfe
Fips
 
Ja kannst Du.
EDIT: Doch nicht, Du hast die Schleife, die alle Zeilen ausliest vergessen. Wenn ich das Ergebnis von DB->select aus Deinem ersten Post richtig interpretiere, gibt dieses ein zweidimensionales Array zurück. Durch die erste Array-Ebene musst Du immer noch von Hand mit foreach ($r as $row) durch. Extract ersetzt alle Zeilen zwischen den geschweiften Klammern, vorausgesetzt natürlich, Du arbeitest mit fetch_assoc. /EDIT

Ich persönlich würde ohnehin immer mit mysql_fetch_assoc arbeiten, da dann die Arrayindizes immer den Feldern bzw. Aliasfeldern entsprechen. Der Zugriff auf die Feldnummern birgt immer die Gefahr, dass man bei einer Änderung im Query evtl. den gesamten Quellcode neuschreiben muss.
Wenn man die Feldnamen nicht kennt, kann man ja auch bei mysql_fetch_assoc mit foreach durch das Zeilenarray wandern (und dabei gleich die Feldnamen erfahren).
 
Zuletzt bearbeitet:
hpvw hat gesagt.:
Ja kannst Du.
Ich persönlich würde ohnehin immer mit mysql_fetch_assoc arbeiten, da dann die Arrayindizes immer den Feldern bzw. Aliasfeldern entsprechen. Der Zugriff auf die Feldnummern birgt immer die Gefahr, dass man bei einer Änderung im Query evtl. den gesamten Quellcode neuschreiben muss.
Wenn man die Feldnamen nicht kennt, kann man ja auch bei mysql_fetch_assoc mit foreach durch das Zeilenarray wandern (und dabei gleich die Feldnamen erfahren).

Ja werd das jetzt mal umstellen... Hatte ne fertige SQL-Klasse genommen aber hab mir da schon einige andere Sachen angepasst. Danke nochmal

MfG
Fips

Edit: Ähh wie iss das eigentlich wenn ich mehr wie ein datensatz auslese?
 
Zuletzt bearbeitet:
Zurück