Array durchlaufen und Werte in DB schreiben
Rainer
- php
Hallo,
habe folgende Ausgabe in $_POST
Array ( [5] => 1 [6] => 1 [47] => 0 [8] => 1 [9] => 1 [7] => 1 [10] => 1 [11] => 1 [bmod] => Struktur [go] => save [StrukturName] => Standard )
Bsp:
[5] ist die ID i der DB-Zeile
=> 1 ist der Wert dazu
Ich muss nun das array durchlaufen alle Key=>Values in die DB per UPDATE schreiben.
$sql = "UPDATE table SET Value='$Value' WHERE ID = 'Key'";
Mein Problem: wie kann ich das array $_POST durchlaufen um an die Key,Values zu kommen?
Gruß Rainer
Mein Problem: wie kann ich das array $_POST durchlaufen um an die Key,Values zu kommen?
Wie bei jedem anderen Array auch - sinnvollerweise mit foreach.
Hi!
Mein Problem: wie kann ich das array $_POST durchlaufen um an die Key,Values zu kommen?
Das machst Du am einfachsten mit foreach - Du solltest aber unbedingt die Werte überprüfen, bevor Du sie verarbeitest!
foreach ($_POST as $key => $value) {
// validiere die Werte !!
// Wenn ok: schreibe in die DB
}
Beachte: insgesamt ist es keine gute Idee, einfach über alle übergebenen Werte zu iterieren und diese in eine Datenbank zu schieben, da Du jedes einzelne Datum validieren *mußt*!
In obiger Kontrollstruktur kann $value u.U. ein Array sein - das mußt Du überprüfen!
off:PP
Hi!
Du solltest aber unbedingt die Werte überprüfen, bevor Du sie verarbeitest!
Auf was genau soll er da validieren?
Lo!
Auf was genau soll er da validieren?
Ob die Werte dem entsprechen, was er erwartet
$_POST['date'] = 'Gumpoldskirchen';
$_POST['e-mail'] = '1. Mai 2010';
Dowas ist selten vernünftig.
Hi!
Dowas ist selten vernünftig.
Doof, was?
*SCNR* ;)
Hi!
Du solltest aber unbedingt die Werte überprüfen, bevor Du sie verarbeitest!
Auf was genau soll er da validieren?
Woher soll ich seine Anforderungen kennen?
off:PP
Hi!
Hallo,
habe folgende Ausgabe in $_POST
Array ( [5] => 1 [6] => 1 [47] => 0 [8] => 1 [9] => 1 [7] => 1 [10] => 1 [11] => 1 [bmod] => Struktur [go] => save [StrukturName] => Standard )
Bsp:
[5] ist die ID i der DB-Zeile
=> 1 ist der Wert dazuIch muss nun das array durchlaufen alle Key=>Values in die DB per UPDATE schreiben.
$sql = "UPDATE table SET Value='$Value' WHERE ID = 'Key'";Mein Problem: wie kann ich das array $_POST durchlaufen um an die Key,Values zu kommen?
foreach und dabei die Keys beachten. Das Problem dabei ist, die benannten von den nummerierten zu unterscheiden. Etwas einfacher wäre es, wenn du nicht name="5" etc. sondern name="id[5]" in dein HTML bringst, dann kannst du $_POST['id'] (ein Array) durchlaufen und dort alle Keys verwenden.
Lo!
Erst mal Danke für die Antworten.
Da ich genau weiß was über $_POST ankommt kann ich mir jegliche Prüfung sparen.
Habe ich es jetzt so gelöst:
foreach ($_POST as $key =>$wert) {
if($key == "bmod" || $key == "go"){}else{
$sql = "UPDATE table SET Wert = '$wert' WHERE ID = '$key'";
$res = mysql_query($sql);
}
}
Ist das ok, oder sollte man das doch anders machen.
Gruß Rainer
Hi!
Da ich genau weiß was über $_POST ankommt kann ich mir jegliche Prüfung sparen.
Achso! Du sendest also *auschließlich* _selbst_ Daten und kannst versehentliche Fehleingaben stets auschließen?
off:PP
Hallo,
Da ich genau weiß was über $_POST ankommt ...
nein, das weißt du nicht! Solange dieses Script irgendwo online erreichbar ist, kann irgendjemand POST-Requests auf diese Ressource absetzen. Mit beliebig sinnvollen oder auch unsinnigen Daten.
kann ich mir jegliche Prüfung sparen.
Darüber würde ich nochmal nachdenken.
if($key == "bmod" || $key == "go"){}else
Putzig, ein leerer if-Anweisungsblock. ;-)
Wenn du nur die negierte Bedingung brauchst, dann formuliere das doch gleich so:
if ($key!="bmod" && $key!="go")
und lass den else-Zweig dafür weg.
$sql = "UPDATE table SET Wert = '$wert' WHERE ID = '$key'";
$res = mysql_query($sql);
Spätestens hier gelangen also Eingaben, die von außen über $_POST kommen, direkt bis an die Datenbank. Viel Spaß!
Ist das ok, oder sollte man das doch anders machen.
Oder. Das allermindeste wäre eine kontextgerechte Maskierung vor der Übergabe an die DB.
So long,
Martin