Frage: Prüfen, ob ein $_POST-Wert leer .
Übersetzung: Prüfen, ob ein Array-Schlüssel/Index einen Wert hat, der mit ihm verbunden ist.
Antwort: Das hängt davon ab, wie wichtig Ihnen die Sicherheit ist. Hängt davon ab, was als gültige Eingabe erlaubt ist.
1. Some people say use empty().
Aus dem PHP-Handbuch:
"Leer] bestimmt, ob eine Variable als leer angesehen wird. A Variable gilt als leer, wenn sie nicht existiert oder wenn ihr Wert gleich FALSE ist."
Die folgenden werden daher als leer angesehen.
"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)
Wenn keiner dieser Werte für Ihre Eingabesteuerung gültig ist, dann empty()
funktionieren würde. Das Problem dabei ist, dass empty()
sein könnte zu breit einheitlich zu verwenden (auf dieselbe Weise, aus demselben Grund, bei verschiedenen Eingabekontrollvorlagen zu $_POST
o $_GET
). Eine gute Verwendung von empty()
ist zu prüfen, ob ein gesamte Palette ist leer (hat keine Elemente).
2. Some people say use isset().
isset()
(ein Sprachkonstrukt) kann nicht auf ganzen Arrays operieren, wie in isset($myArray)
. Es kann nur funktionieren bei Variablen y Feldelemente (über den Index/Schlüssel): isset($var)
y isset($_POST['username'])
. Die isset()
Sprachkonstrukt erfüllt zwei Aufgaben. Erstens prüft es, ob eine Variable oder ein Array-Index/Schlüssel mit einem Wert verknüpft ist. Zweitens prüft es, ob dieser Wert nicht gleich dem PHP-NULL-Wert ist.
Kurz gesagt, die genaueste Prüfung kann am besten durchgeführt werden mit isset()
da einige Eingabesteuerungen nicht einmal mit $_POST registriert werden, wenn sie nicht ausgewählt oder markiert sind. Ich habe noch nie ein Formular gesehen, das den PHP-NULL-Wert übermittelt hat. Keines meiner Formulare tut das, also verwende ich isset()
um zu prüfen, ob ein $_POST
Schlüssel keinen Wert zugeordnet hat (und der nicht NULL ist). isset()
ist eine wesentlich strengere Prüfung der Leere (im Sinne Ihrer Frage) als empty()
.
3. Some people say just do if($var), if($myArray), or if($myArray['userName']) to determine emptiness.
Sie können alles testen, was den Wert wahr o faux in einem Wenn Anweisung. Leere Arrays werden als falsch ausgewertet, ebenso wie Variablen, die nicht gesetzt sind. Variablen, die den PHP-NULL-Wert enthalten, werden ebenfalls als falsch aus. Leider wird in diesem Fall, wie bei empty()
, viele weitere Auch die folgenden Dinge ergeben false: 1. die leere Zeichenkette '', zero (0), zero.zero (0.0), die Zeichenkette zero '0', der boolesche Wert false und bestimmte leere XML-Objekte.
--Doyle, Einführung in PHP 5.3
Zusammenfassend lässt sich sagen, dass die isset()
und erwägen Sie, sie mit anderen Tests zu kombinieren. Beispiel:
Es könnte sein, dass es wegen der superglobalen Verrücktheit nicht funktioniert, aber es würde bei anderen Arrays ohne Frage funktionieren.
if (is_array($_POST) && !empty($_POST)) {
// Now test for your successful controls in $_POST with isset()
}
Warum also nach einem Wert suchen, der mit einem Schlüssel verbunden ist, bevor man überhaupt sicher weiß, dass $_POST
ein Array darstellt und überhaupt irgendwelche Werte darin gespeichert sind (was viele Leute nicht beachten)? Denken Sie daran, dass Menschen Daten an Ihr Formular senden können, ohne einen Webbrowser zu benutzen. Vielleicht kommen Sie eines Tages an den Punkt, an dem Sie testen müssen, dass $_POST
hat nur die erlaubten Schlüssel, aber das ist ein Thema für einen anderen Tag.
Nützlicher Hinweis:
PHP-Handbuch: Typentests Vergleichstabellen