Start · Sprachen · PHP · Referenz · filter_has_var

filter_has_var

Funktion

Prüft, ob eine Variable des angegebenen Eingabetyps (z. B. GET, POST, SERVER) unter dem angegebenen Namen existiert.

seit PHP 5.2.0 Kategorie: string

Signatur

filter_has_var(int $input_type, string $var_name): bool

Beschreibung

filter_has_var() ermöglicht es, vor dem Zugriff auf Eingabedaten zu prüfen, ob eine bestimmte Variable in einer der superglobalen Eingabequellen tatsächlich vorhanden ist. Damit lassen sich unnötige Fehlermeldungen und Sicherheitsprobleme vermeiden, die entstehen würden, wenn man direkt auf möglicherweise nicht vorhandene Array-Schlüssel zugreift.

Der erste Parameter $input_type bestimmt die Eingabequelle und wird durch eine der vordefinierten Konstanten angegeben: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER oder INPUT_ENV. Der zweite Parameter $var_name ist der Name der zu prüfenden Variable.

Ein typischer Anwendungsfall ist die Validierung von Formulardaten: Bevor ein GET- oder POST-Parameter verarbeitet wird, prüft man mit filter_has_var(), ob er überhaupt übermittelt wurde. Das ist besonders nützlich in Kombination mit filter_input(), das die Variable anschließend gefiltert ausliest.

Hinweis: Im Gegensatz zu isset($_GET['name']) berücksichtigt filter_has_var() ausschließlich die originalen Eingabedaten aus der Anfrage – nachträgliche Änderungen am superglobalen Array (z. B. $_GET['name'] = 'wert') werden nicht erkannt.

Parameter

Name Typ Default Beschreibung
$input_type Pflicht int Die Eingabequelle als Konstante: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER oder INPUT_ENV.
$var_name Pflicht string Der Name der zu prüfenden Variable, z. B. 'username' oder 'page'.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Variable in der angegebenen Eingabequelle existiert, andernfalls false.

Beispiele

GET-Parameter auf Vorhandensein prüfen

<?php
// URL: script.php?page=3

if (filter_has_var(INPUT_GET, 'page')) {
    $page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);
    if ($page !== false && $page !== null) {
        echo "Seite: " . $page;
    } else {
        echo "Ungültiger Seitenwert.";
    }
} else {
    echo "Kein 'page'-Parameter übermittelt.";
}
Seite: 3

POST-Formularfeld prüfen und verarbeiten

<?php
// Wird nach dem Absenden eines Formulars mit Feld 'username' aufgerufen

if (filter_has_var(INPUT_POST, 'username')) {
    $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_SPECIAL_CHARS);
    echo "Empfangener Benutzername: " . htmlspecialchars($username);
} else {
    echo "Kein Benutzername im POST-Formular gefunden.";
}
Empfangener Benutzername: MaxMustermann

Unterschied zu isset() bei manuell gesetzten Variablen

<?php
// Kein echter GET-Parameter in der Anfrage
$_GET['test'] = 'manuell gesetzt';

// isset() erkennt die manuell gesetzte Variable
var_dump(isset($_GET['test']));         // bool(true)

// filter_has_var() erkennt nur originale Eingabedaten
var_dump(filter_has_var(INPUT_GET, 'test')); // bool(false)
bool(true) bool(false)

// Wichtig · Fallstricke

Wichtiger Unterschied zu isset(): filter_has_var() greift auf die originalen, unveränderten Eingabedaten der Anfrage zurück. Werden superglobale Arrays wie $_GET oder $_POST nachträglich im Code verändert, spiegeln diese Änderungen sich nicht im Ergebnis von filter_has_var() wider. Für sicherheitssensible Prüfungen ist dies ein Vorteil, da manipulierte Superglobals ignoriert werden.

INPUT_REQUEST wird als $input_type nicht unterstützt. Für $_REQUEST muss jede Quelle einzeln geprüft werden.