======[PHP] $_POST in Variablen wandeln mit einer Whitelist====== ---- ---- =====mit filter_input_array()===== Und hier ein Anwendungsbeispiel { FILTER_VALIDATE_EMAIL, 'email_2' => FILTER_VALIDATE_EMAIL, 'text_1' => array( 'filter' => FILTER_SANITIZE_STRING, 'default' => 'Standart-Text'), 'int_1' => array( 'filter' => FILTER_VALIDATE_INT, 'flags' => FILTER_NULL_ON_FAILURE, 'options' => array('min_range' => 1, 'max_range' => 10)), 'int_2' => array( 'filter' => FILTER_VALIDATE_INT, 'flags' => FILTER_NULL_ON_FAILURE, 'default' => 15) ); $myInputs = filterInputDefaults(INPUT_GET, $whitelist); var_dump($myInputs); ?> Die Ausgabe mit test.php?email_1=test@test.info&email_2=blah&int_1=14 array(5) { ["email_1"]=> string(14) "test@test.info" ["email_2"]=> bool(false) ["text_1"]=> string(13) "Standart-Text" ["int_1"]=> NULL ["int_2"]=> int(15) } {{files}} =====Alte Variante===== Die obere Variante ist aus meiner Sicht vorzuziehen Eine einfache möglichkeit, nur $_POST- Einträge (oder alternativ dazu $_GET) in Variablen übernehmen die man im Vorraus definiert hat. 'Value a ist ein nicht definertes Feld', 'b'=>'Value b ist definiert und wird ausgegeben', 'c'=>'Value c ist ebenfalls definiert'); //Liste aller erlaubten postitems $whitelist = array('c', 'b'); //Variablen zu allen erlaubten postitems erstellen extract(array_intersect_key($_POST, array_flip($whitelist))); //Testausgabe um dieses Script zu testen echo "\$a: {$a}
\n"; echo "\$b: {$b}
\n"; echo "\$c: {$c}
\n"; ?>
Ausgabe: $a: $b: Value b ist definiert und wird ausgegeben $c: Value c ist ebenfalls definiert Natürlich beinhaltet das noch keine Inhaltliche Prüfung der Variablen Falls man mit Standartwerten arbeiten will, wenn ein Paramter der Whiltelist nicht übergeben wurde, kann ma es auch etwa so lösen 'Value a ist ein nicht definertes Feld', 'b'=>'Value b ist definiert und wird ausgegeben', 'c'=>'Value c ist ebenfalls definiert'); //Liste aller erlaubten postitems $whitelist = array( 'b' => '20', 'c' => NULL, 'd' => 'DeaultText'); //alle items aus $_POST auslesen die in der whitelist definiert sind $posts = array_intersect_key($_POST, $whitelist); //alle items aus der whitelist anhängen, die nicht aus $_POST übernommen werden $posts = $posts + array_diff_key($whitelist, $posts); //Variablen zu allen erlaubten postitems erstellen extract($posts); //Testausgabe um dieses Script zu testen echo "\$a: {$a}
\n"; echo "\$b: {$b}
\n"; echo "\$c: {$c}
\n"; echo "\$d: {$d}
\n"; ?>
Ausgabe: $a: $b: Value b ist definiert und wird ausgegeben $c: Value c ist ebenfalls definiert $d: DeaultText ---- [[CatPhp]] | [[CatTutorial]]