W3docs

filter_var_array()

PHP bietet filter_var_array(), um viele Variablen auf einmal zu filtern und zu validieren – ideal für die sichere Formularverarbeitung.

Einführung

PHP bietet eine Reihe von eingebauten Funktionen zum Filtern und Validieren von Benutzereingaben. Eine davon ist filter_var_array(), die Filter auf viele Variablen gleichzeitig anwendet, anstatt filter_var() wiederholt aufzurufen. Sie ist das Herzstück der sauberen Formularverarbeitung: Sie beschreiben die Regeln für jedes Feld in einem einzigen array, übergeben die Roheingabe und erhalten ein vollständig validiertes und bereinigtes Ergebnis zurück.

Dieses Kapitel behandelt die Syntax, die drei Möglichkeiten zur Definition von Filtern, das Verhalten des $add_empty-Flags, das Lesen des Rückgabewerts und häufige Fallstricke – mit ausführbaren Beispielen.

Syntax

Die Syntax von filter_var_array() lautet wie folgt:

Die PHP-Syntax von filter_var_array()

filter_var_array ( array $data , mixed $definition [, bool $add_empty = true ] ) : mixed
ParameterBedeutung
$dataEin assoziatives array mit den zu filternden Eingabewerten (z. B. $_POST oder $_GET).
$definitionWie gefiltert werden soll. Entweder eine einzelne Filterkonstante, die auf jeden Wert angewendet wird, oder ein array, das jedem Schlüssel seinen eigenen Filter/seine eigenen Optionen zuordnet.
$add_emptyWenn true (Standard), werden Schlüssel, die in $definition vorhanden, aber in $data nicht vorhanden sind, mit dem Wert null zum Ergebnis hinzugefügt. Wenn false, werden sie übersprungen.

Die Funktion gibt bei Erfolg das gefilterte array zurück oder false bei einem Fehler (z. B. wenn $data kein array ist).

Die drei Möglichkeiten zur Definition von Filtern

Der Parameter $definition ist das Herzstück dieser Funktion. Er kann drei Formen annehmen.

1. Ein Filter für jeden Wert — eine einzelne Filterkonstante übergeben:

<?php
$data = ['a' => '1', 'b' => 'not-a-number', 'c' => '42'];
$result = filter_var_array($data, FILTER_VALIDATE_INT);
print_r($result);

Ausgabe — Werte, die den Filter nicht bestehen, werden zu false:

Array
(
    [a] => 1
    [b] =>
    [c] => 42
)

2. Eine schlüsselspezifische Filterzuordnung — jeden Schlüssel seiner eigenen Filterkonstante zuordnen:

<?php
$data = [
    'name'  => '  John  ',
    'age'   => '30',
    'email' => '[email protected]',
];

$definition = [
    'name'  => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
    'age'   => FILTER_VALIDATE_INT,
    'email' => FILTER_VALIDATE_EMAIL,
];

print_r(filter_var_array($data, $definition));
Array
(
    [name] =>   John  
    [age] => 30
    [email] => [email protected]
)

3. Ein schlüsselspezifisches array mit Filter, Flags und Optionen — für eine feinkörnige Steuerung einen Schlüssel einem array zuordnen, das den filter sowie flags und options benennt:

<?php
$data = ['age' => '150', 'tags' => ['php', 'mysql']];

$definition = [
    'age' => [
        'filter'  => FILTER_VALIDATE_INT,
        'options' => ['min_range' => 0, 'max_range' => 120],
    ],
    'tags' => [
        'filter' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
        'flags'  => FILTER_REQUIRE_ARRAY,
    ],
];

var_dump(filter_var_array($data, $definition));
array(2) {
  ["age"]=>
  bool(false)
  ["tags"]=>
  array(2) {
    [0]=>
    string(3) "php"
    [1]=>
    string(5) "mysql"
  }
}

age ist false, weil 150 außerhalb des Bereichs 0–120 liegt, und FILTER_REQUIRE_ARRAY weist den Filter an, tags als array zu behandeln und jedes Element zu bereinigen.

Verwendung mit Formulareingaben

Im echten Code ist das $data-array normalerweise eine Superglobale wie $_POST. Dieselbe Definition, die Sie gerade gesehen haben, wendet die Regeln an und speichert die bereinigten Werte in $result:

Beispiel für PHP filter_var_array()

<?php

$filters = [
    'name'  => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
    'age'   => FILTER_VALIDATE_INT,
    'email' => FILTER_VALIDATE_EMAIL,
];

// $add_empty = false skips keys missing from $_POST instead of adding them as null
$result = filter_var_array($_POST, $filters, false);

if ($result === false || $result['email'] === false) {
    // Handle missing or invalid input
    echo 'Please correct the form.';
} else {
    // $result now holds clean, validated values
}

Beachten Sie, dass eine fehlgeschlagene Validierung false für diesen Schlüssel liefert, während die Funktion nur dann insgesamt false zurückgibt, wenn $data selbst ungültig ist. Überprüfen Sie immer beides. Zum direkten Filtern von $_POST oder $_GET aus dem Eingabestrom siehe die eng verwandte Funktion filter_input_array().

Hinweis: FILTER_SANITIZE_STRING wurde in PHP 8.0 entfernt. Verwenden Sie stattdessen FILTER_SANITIZE_FULL_SPECIAL_CHARS.

Vorteile

Die Verwendung von filter_var_array() erhöht die Sicherheit und Zuverlässigkeit Ihrer PHP-Anwendung, indem viele Variablen in einem einzigen Aufruf verarbeitet werden. Die Validierung von Eingaben vor der weiteren Verarbeitung stellt sicher, dass Ihre Anwendung nur erwartete Daten akzeptiert, und reduziert das Risiko von Injection-Angriffen und Fehlern durch fehlerhafte Daten. Die Ablage der Regeln in einem deklarativen $definition-array trennt außerdem die Validierung von der Geschäftslogik, wodurch Skripte modularer und leichter wartbar werden.

Fazit

filter_var_array() ist der effiziente Weg, um einen ganzen Satz von Variablen auf einmal zu validieren und zu bereinigen. Wählen Sie die Definitionsform, die Ihren Anforderungen entspricht — ein Filter für alle, eine schlüsselspezifische Zuordnung oder schlüsselspezifische Options-Arrays — und prüfen Sie immer auf false pro Feld. Um tiefer einzutauchen, lesen Sie den Überblick über PHP-Filter und das Kapitel zur PHP-Formularvalidierung.

Übungen

Übung
Was ist der Zweck der Funktion 'filter_var_array()' in PHP?
Was ist der Zweck der Funktion 'filter_var_array()' in PHP?
Was this page helpful?