34 Stimmen

Prüfen, ob $_POST-value leer ist

if(isset($_POST['submit'])) {
    if(!isset($_POST['userName'])) {
        $username = 'Anonymous';
    }      
    else $username = $_POST['userName'];
}

Ich kann die $username "Anonym" zu sein? Es ist entweder leer oder der Wert von $_POST['userName'] .

51voto

Andy Punkte 16773

isset() gibt true zurück, wenn die Variable initialisiert wurde. Wenn Sie ein Formularfeld mit seiner name Wert eingestellt auf userName Wenn das Formular abgeschickt wird, ist der Wert immer "gesetzt", auch wenn er keine Daten enthält.

Stattdessen, trim() die Zeichenkette und prüft ihre Länge

if("" == trim($_POST['userName'])){
    $username = 'Anonymous';
}

49voto

Michael Berkowski Punkte 260923

Wenn das Formular erfolgreich abgeschickt wurde, $_POST['userName'] sollte immer gesetzt sein, obwohl es eine leere Zeichenkette enthalten kann, was etwas anderes ist, als gar nicht gesetzt zu sein. Prüfen Sie stattdessen, ob es sich um empty()

if (isset($_POST['submit'])) {
    if (empty($_POST['userName'])) {
        $username = 'Anonymous';
    } else { 
        $username = $_POST['userName'];
    }
}

15voto

Gajus Punkte 61796

Um zu prüfen, ob die Eigenschaft vorhanden ist, unabhängig vom Wert, verwenden Sie:

if (array_key_exists('userName', $_POST)) {}

So prüfen Sie, ob die Eigenschaft gesetzt ist (Eigenschaft ist vorhanden und Wert ist nicht null o false ), verwenden:

if (isset($_POST['userName'])) {}

Um zu prüfen, ob die Eigenschaft gesetzt und nicht leer ist (keine leere Zeichenkette, 0 (Ganzzahl), 0.0 (Schwimmer), '0' (Zeichenfolge), null , false o [] (leeres Feld)), verwenden:

if (!empty($_POST['userName'])) {}

8voto

Anthony Rutledge Punkte 5794

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

3voto

Dan Kanze Punkte 18425

Ändern Sie dies:

if(isset($_POST['submit'])){

    if(!(isset($_POST['userName']))){
    $username = 'Anonymous';
    }      
    else $username = $_POST['userName'];
}

Zu diesem:

if(!empty($_POST['userName'])){
     $username = $_POST['userName'];
}

if(empty($_POST['userName'])){
     $username = 'Anonymous';
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X