per POST übergebenes Array überprüfen

Jakob

Jakob

Aktives Mitglied
Thread Starter
Dabei seit
05.01.2004
Beiträge
1.070
Reaktionspunkte
21
Hallo,

habe ein Formular in dem ein paar Felder den Namen "name[]" haben, also dann als Array weitergegeben werden.

Da der Inhalt in eine DB geschrieben werden soll, muss er noch überprüft werden. Mit nem foreach() kann man ja da durch, aber das arbeitet ja erst ab PHP5 mit der Referenz, unter 4 nur mit Kopien.

Unter php.net wird folgendes vorgeschlagen:
PHP:
foreach ( array_keys($myArray) as $key ) {
  $element =& $myArray[$key];
  ...
}

Ich werd nicht schlau draus. Ich hab nen Array name[] von 0-14 und möchte über jedes ein htmlentities(addslashes()) laufen lassen. Wie mach ich das mit obigem Beispiel? Danke!
 
Hi!
Ich würde es so schreiben:
PHP:
foreach ($_POST['name'] as $v) {
    $new_name[] = htmlentities(addslashes($v));
}
Dann sind nachher in dem Array $new_name die validierten Werte.
 
Habe ich das noch richtig im Kopf, das Du Arrays sowieso nicht so einfach übergebn kannst? Ich Glaub das waren doch Arrays beim Posten?
 
Vielen Dank lindic! Kann ich nicht anstelle des neuen Array-Namens auch den alten Namen benutzen, so dass er das Array quasi überschreibt?

@ThaHammer: Es geht um ein Formular, was so aufgebaut ist:
PHP:
<form method="post">
<input name="name[]"><br>
<input name="name[]"><br>
<input name="name[]"><br>
<input name="name[]"><br>
<input name="name[]"><br>
…
<input type="submit">
</form>

Die Werte der input-Felder sind beim Abschicken dann im Array $name. $name[0] enthält den Wert des ersten Feldes, $name[1] den des zweiten usw.
 
Jakob schrieb:
Vielen Dank lindic! Kann ich nicht anstelle des neuen Array-Namens auch den alten Namen benutzen, so dass er das Array quasi überschreibt?
Ja, das geht auch. Einfach einen Zähler einbauen, der jedes einzelne Array-Element überschreibt:
PHP:
$i = 0;
foreach ($_POST['name'] as $v) {
    $_POST['name'][$i] = htmlentities(addslashes($v));
    $i++;
}
 
lindic schrieb:
Ja, das geht auch. Einfach einen Zähler einbauen, der jedes einzelne Array-Element überschreibt:
PHP:
$i = 0;
foreach ($_POST['name'] as $v) {
    $_POST['name'][$i] = htmlentities(addslashes($v));
    $i++;
}
Oder so:
PHP:
foreach ($_POST['name'] as $k => $v) {
    $_POST['name'][$k] = htmlentities(addslashes($v));
}

Und mit dem addslashes wäre ich sehr vorsichtig, meistens passiert das schon automatisch. Endweder du schreibst eine eigene addslashes()-Funktion oder du schaltest magic_quotes einfach aus
 
Zuletzt bearbeitet:
Oder Du fragst es vorher einfach ab. :)
Code:
foreach ($_POST['name'] as $k => $v) { 
    $_POST['name'][$k] = htmlentities((get_magic_quotes_gpc()) ? $v : addslashes($v));
}
 
Zuletzt bearbeitet von einem Moderator:
Jakob schrieb:
Vielen Dank lindic! Kann ich nicht anstelle des neuen Array-Namens auch den alten Namen benutzen, so dass er das Array quasi überschreibt?

@ThaHammer: Es geht um ein Formular, was so aufgebaut ist:
PHP:
<form method="post">
<input name="name[]"><br>
<input name="name[]"><br>
<input name="name[]"><br>
<input name="name[]"><br>
<input name="name[]"><br>
…
<input type="submit">
</form>

Die Werte der input-Felder sind beim Abschicken dann im Array $name. $name[0] enthält den Wert des ersten Feldes, $name[1] den des zweiten usw.

Oops! Ja da geht das.
 
Zurück
Oben Unten