2016-07-14 6 views
4

Was ist der Unterschied zwischen der Verwendung einer dieser beiden Funktionen bei der Validierung von Benutzereingaben? In Bezug auf die Funktionsaufrufe ist es beispielsweise nicht erforderlich, das $ _POST-Array zu ändern.Unterschied zwischen filter_var und filter_input bei der Validierung von Eingabedaten

$ result = filter_var ($ _ POST [ 'USER_INPUT'], FILTER_VALIDATE_INT);

vs

$ result = filter_input (INPUT_POST, 'USER_INPUT', FILTER_VALIDATE_INT);

Oder gibt es keinen Unterschied zwischen den beiden oben genannten Aufrufen, nicht einmal die Leistung, sondern nur eine Frage der Präferenz?

PS: Ich weiß, es gibt eine ähnliche Frage zu SO - Differences between filter_var and filter_input - aber das sagt nur, wie die 2 Methoden aufgerufen werden sollten, nicht, was der tatsächliche Unterschied ist.

+0

Ich glaube nicht, dass es ein solcher Unterschied ist, 'filter_input' ist einfach gestaltet einen Eingang als Parameter zu nehmen und' filter_var' wird eine Variable nehmen, damit es mehr Generika ist (ich werde es tun gehen Sie überprüfen Sie das Dokument und eine Antwort) – RDardelet

Antwort

0

Wenn der Anfragetext den Parameter user_input überhaupt nicht enthält, wird $_POST['user_input'] einen Hinweis auslösen, filter_input(INPUT_POST, 'user_input', ..) nicht.

+0

Ja, so '$ _POST' sollte a priori gegen' isetset() 'überprüft werden, und wenn fehlende zuweisen, zum Beispiel' $ result = null; ', während' filter_input' würde In diesem Fall wird direkt 'null' zurückgegeben. Und sonst, wenn der Parameter eingestellt ist, gibt es keinen Unterschied? –

+0

Ja, wenn der Parameter existiert, gibt es keinen Unterschied. Der Unterschied besteht darin, dass 'filter_input' den Fall fehlender Eingaben transparent behandelt. – deceze

3

Von dem, was ich las auf php.net,

Die filter_var wird für jede Variable in Ihrem Code einfach arbeiten, wann immer Sie es verwenden, wird es den Wert überprüfen, in diesem Augenblick.

Das wird filter_input Wert der Ihrer Eingabe ursprünglichen Werte überprüfen, dass das heißt, wenn Sie $_POST['something'] ändern, hatte die filter_input(INPUT-POST, "something", FILTER) einen Scheck über den Wert durchführen wird es, bevor Sie es ändern. Es scheint auch keine E_NOTICE auf Ausführung ausgelöst, wenn der Wert nicht festgelegt ist.

Referenz Post auf php.net

+0

Anstatt "filter_var (...) wird eine Überprüfung auf den Wert, den es hatte, bevor Sie es geändert haben", meinen Sie "filter_input", nein? Deshalb habe ich erwähnt, dass das '$ _POST'-Array nicht geändert werden muss, also bleibt im Grunde der Unterschied, wie zuvor von @deceze erwähnt: der Hinweis wird ausgelöst. –

+0

Ja Entschuldigung, ich bearbeite jetzt: D Dennoch kann der Zugriff auf die ursprüngliche Eingabe sehr nützlich sein, falls Ihr Code nach einem CMS oder Framework ausgeführt wird, das die Variablen $ _POST/GET ... verändern könnte. – RDardelet

Verwandte Themen