Signatur
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
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.";
}
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.";
}
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)
// 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.