Todo: filter_input unf filter_var

MyOOS hat einen Fehler, oder tut nicht das, was Ihr erwartet? Derartige "Unanehmlichkeiten" bitte hier.
Gesperrt
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Todo: filter_input unf filter_var

Beitrag von r23 »

Hallo,

wir stellen in den nächsten Wochen den PHP Code von MyOOS auf filter_input und filter_var um.

Anleitung:

Es ist eine gute Praxis, einen Filter zu verwenden, um die Eingabe zu validieren oder zu bereinigen, bevor du sie verwendest. Das kann dir helfen, Fehler oder Sicherheitsprobleme zu vermeiden. PHP bietet die Funktion filter_var, die eine Variable mit einem angegebenen Filter filtert. Du kannst zum Beispiel den Filter FILTER_SANITIZE_URL verwenden, um ungültige oder gefährliche Zeichen aus einer URL zu entfernen.

Code: Alles auswählen

$server_name = filter_var($_SERVER['SERVER_NAME'], FILTER_SANITIZE_URL);
Der Befehl für filter_input sieht wie folgt aus:

Code: Alles auswählen

filter_input($type, $var_name, $filter, $options)
Die Parameter sind:
  • $type: Der Eingabetyp, den du überprüfen möchtest. Er kann einer der folgenden Werte sein: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER oder INPUT_ENV.
  • $var_name: Der Name der Variablen, die du überprüfen möchtest.
  • $filter: Die ID oder der Name des Filters, den du anwenden möchtest. Der Standardwert ist FILTER_DEFAULT, was zu FILTER_UNSAFE_RAW äquivalent ist. Das bedeutet, dass keine Filterung stattfindet. Die verfügbaren Filter findest du auf der Seite Filtertypen.
  • $options: Ein assoziatives Array mit Optionen oder eine bitweise Disjunktion von Flags. Wenn der Filter Optionen akzeptiert, kannst du die Flags auch im Feld "flags" des Arrays angeben.
Die Funktion gibt den Wert der Variablen bei Erfolg zurück, false bei einem Fehler oder null, wenn die Variable nicht gesetzt ist.

Code: Alles auswählen

// Prüfe, ob die externe Variable "email" über die "get"-Methode an die PHP-Seite gesendet wurde und ob es sich um eine gültige E-Mail-Adresse handelt
if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) {
  echo("E-Mail ist nicht gültig");
} else {
  echo("E-Mail ist gültig");
}
Der Unterschied zwischen filter_input und filter_var ist, dass filter_input eine Variable von einer externen Quelle (wie z.B. $_POST oder $_GET) entgegennimmt und sie optional filtert, während filter_var eine beliebige Variable in deinem Code filtert. Das bedeutet, dass filter_input den ursprünglichen Wert der Variable überprüft, bevor du ihn änderst, und dass filter_var den aktuellen Wert der Variable überprüft, wenn du die Funktion aufrufst.

Ein weiterer Unterschied ist, dass filter_input kein E_NOTICE auslöst, wenn die Variable nicht gesetzt ist, während $_POST [‘user_input’] ein E_NOTICE auslöst, wenn die Variable user_input nicht im Anfragekörper enthalten ist. Das heißt, dass du mit filter_input keine isset ()-Prüfung durchführen musst, um zu sehen, ob die Variable existiert oder nicht.

Beide Funktionen haben ähnliche Parameter und Rückgabewerte. Sie können beide einen Filtertyp und Optionen oder Flags angeben, um die Validierung oder Bereinigung der Variablen anzupassen. Sie geben beide den gefilterten Wert oder false zurück, wenn die Filterung fehlschlägt.

Ich hoffe, das erklärt dir den Unterschied zwischen filter_input und filter_var

filter_var ist nicht unbedingt besser als filter_input. Beide Funktionen haben ihre Vor- und Nachteile, je nachdem, was du tun möchtest. Der Hauptunterschied ist, dass filter_var eine beliebige Variable in deinem Code filtert, während filter_input eine Variable von einer externen Quelle (wie z.B. $_POST oder $_GET) entgegennimmt und sie optional filtert.

Ein Vorteil von filter_input ist, dass es dir hilft, die Eingabe zu validieren oder zu bereinigen, bevor du sie verwendest. Das kann dir helfen, Fehler oder Sicherheitsprobleme zu vermeiden. Außerdem löst filter_input kein E_NOTICE aus, wenn die Variable nicht gesetzt ist, während $_POST [‘user_input’] ein E_NOTICE auslöst, wenn die Variable user_input nicht im Anfragekörper enthalten ist. Das heißt, dass du mit filter_input keine isset ()-Prüfung durchführen musst, um zu sehen, ob die Variable existiert oder nicht.

Ein Vorteil von filter_var ist, dass es flexibler ist, da du jede Variable in deinem Code filtern kannst, nicht nur die von einer externen Quelle. Das kann nützlich sein, wenn du zum Beispiel eine Variable änderst oder manipulierst und dann sicherstellen möchtest, dass sie immer noch gültig ist. Außerdem kannst du mit filter_var mehrere Filter auf eine Variable anwenden, indem du die Funktion mehrmals aufrufst.

Letztendlich hängt es von deinem Anwendungsfall ab, welche Funktion du verwenden möchtest. Es gibt keine definitive Antwort darauf, welche besser ist. Beide Funktionen haben ihre Berechtigung und können dir helfen, besseren und sichereren Code zu schreiben.

Ich hoffe, das hilft dir weiter. Wenn du mehr über die Filterfunktionen in PHP lernen möchtest, kannst du dir einige der Webseiten ansehen, die ich für dich gefunden habe . Viel Spaß beim Programmieren!

Schönes Wochenende

Ralf
Gesperrt