it-swarm.com.de

Prüfen Sie, ob der $ _POST-Wert leer ist

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

Ich kann nicht, dass der $username "anonym" ist? Es ist entweder leer oder der Wert von $_POST['userName'].

22
WormHole

isset() gibt true zurück, wenn die Variable initialisiert wurde. Wenn Sie ein Formularfeld mit name auf userName setzen, wird der Wert beim Senden dieses Formulars immer "gesetzt", obwohl möglicherweise keine Daten darin enthalten sind.

Stattdessen trim() den String und teste seine Länge

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

Wenn das Formular erfolgreich gesendet wurde, sollte $_POST['userName'] immer gesetzt werden, obwohl es eine leere Zeichenfolge enthalten kann, die sich von der Einstellung überhaupt nicht unterscheidet. Überprüfen Sie stattdessen, ob es sich um empty() handelt.

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

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

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

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

Um zu prüfen, ob die Eigenschaft festgelegt ist (Eigenschaft ist vorhanden und value ist nicht null oder false), verwenden Sie:

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

Um zu überprüfen, ob die Eigenschaft festgelegt und nicht leer ist (keine leere Zeichenfolge, 0 (Ganzzahl), 0.0 (Gleitkommazahl), '0' (Zeichenfolge), null, false oder [] (leeres Array)), verwenden Sie:

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

Question: Prüfen Sie, ob ein $ _POST-Wert leer ist. 

Translation: Prüfen Sie, ob einem Array-Schlüssel Index ein Wert zugeordnet ist.

Antwort: Hängt von Ihrer Betonung der Sicherheit ab. Abhängig davon, was als gültige Eingabe zulässig ist.

1. Some people say use empty().

Im PHP -Handbuch: "[Empty] bestimmt, ob eine Variable als leer betrachtet wird. Eine Variable wird als leer betrachtet, wenn sie nicht existiert oder wenn ihr Wert gleich FALSE ist." Das Folgende gilt somit als leer.

"" (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, funktioniert empty(). Das Problem hierbei ist, dass empty()zu breit sein kann, um konsistent verwendet zu werden (aus demselben Grund auf verschiedene Eingabesteuerungssendungen an $_POST oder $_GET). Eine sinnvolle Verwendung von empty() ist die Überprüfung, ob ein gesamtes Array leer ist (keine Elemente enthält).

2. Some people say use isset().

isset() (ein Sprachkonstrukt) kann nicht für ganze Arrays verwendet werden, wie in isset($myArray). Es kann nur mit Variablen und Array-Elementen (über den Index/Schlüssel) bearbeitet werden: isset($var) und isset($_POST['username']). Das isset()language-Konstrukt führt zwei Dinge aus. Zuerst wird geprüft, ob mit einem Variablen- oder Array-Index/Schlüssel ein Wert verknüpft ist. Zweitens wird überprüft, ob der Wert nicht dem Wert für PHP NULL entspricht. 

Kurz gesagt, die genaueste Prüfung kann am besten mit isset() durchgeführt werden, da einige Eingabesteuerelemente nicht einmal bei $ _POST registriert werden, wenn sie nicht ausgewählt oder geprüft werden. Ich habe noch nie ein Formular mit dem NULL-Wert PHP kennen gelernt. Ich mache nichts von mir, also überprüfe ich mit isset(), ob ein $_POST-Schlüssel keinen Wert hat (und das nicht NULL ist). isset()ist ein sehr viel strengerer Test 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 in einer if-Anweisung zu wahr oder falsch ausgewertet wird. Leere Arrays werden als falsch ausgewertet. Dies gilt auch für nicht festgelegte Variablen. Variablen, die den NULL-Wert PHP enthalten, werden ebenfalls als falsch ausgewertet. Unglücklicherweise wird in diesem Fall, wie bei empty(), auch viel mehr als falsch ausgewertet: 1. Die leere Zeichenfolge '', Null (0), Null.Zero (0,0), die Zeichenfolge Null '0', der boolesche Wert 'Falsch' und bestimmte Leerzeichen XML-Objekte.

--Doyle, Anfang PHP 5.3 

Verwenden Sie zum Abschluss isset() und erwägen Sie, es mit anderen Tests zu kombinieren. Beispiel:

Funktioniert möglicherweise nicht auf Grund von superglobaler Verschraubung, würde aber ohne Frage für andere Arrays funktionieren.

if(is_array($_POST) && !empty($_POST))
{
    //Now test for your successful controls in $_POST with isset()
} 

Das sollte auch funktionieren.

if(is_array($_POST) && $_POST)
{
    //Now test for your successful controls in $_POST with isset()
    //Always validate your input.
} 

Warum also nach einem mit einem Schlüssel verknüpften Wert suchen, bevor Sie überhaupt wissen, dass $_POST ein Array darstellt und darin überhaupt Werte gespeichert sind (etwas, das viele Leute nicht berücksichtigen)? Denken Sie daran, dass Benutzer Daten ohne Verwendung eines Webbrowsers an Ihr Formular senden können. Sie können eines Tages an den Punkt gelangen, an dem getestet wird, dass $_POST nur die zulässigen Schlüssel besitzt, diese Unterhaltung jedoch für einen anderen Tag gilt.

Nützliche Referenz:

/ - PHP Handbuch: Vergleichstabellen für Typentests

3

ich würde für diese Anwendungsfälle einen einfachen einzeiligen Vergleich verwenden

$username = trim($_POST['userName'])?:'Anonymous';

Dies ist für den Anwendungsfall, bei dem Sie sicher sind, dass die Fehlerprotokollierung deaktiviert ist. Sie erhalten also keine Warnung, dass die Variable nicht initialisiert wird.

dies ist die paranoide Version:

$username = !empty(trim(isset($_POST['userName'])?$_POST['userName']:''))?$_POST['userName']:'Anonymous';

Dadurch wird geprüft, ob die Variable $_POST gesetzt ist. bevor Sie darauf zugreifen.

2
Tschallacka

Ändere das:

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';
}
2
Dan Kanze
$username = filter_input(INPUT_POST, 'userName', FILTER_SANITIZE_STRING);
if ($username == '') {$username = 'Anonymous';}

Bewährte Methode - Eingaben immer filtern, Zeichenfolge bereinigen ist in Ordnung, aber Sie sollten eine benutzerdefinierte Rückruffunktion verwenden, um wirklich herauszufiltern, was nicht akzeptabel ist. Überprüfen Sie dann die jetzt sichere Variable, ob sie null oder leer ist, und setzen Sie sie gegebenenfalls auf Anonym. Benötigt keine 'else'-Anweisung, da diese in der ersten Zeile gesetzt wurde.

1
Amazing B

isset testet, ob der im Hash (oder assoziativen Array) überprüfte Schlüssel "gesetzt" ist oder nicht. In diesem Zusammenhang bedeutet nur, wenn es den Wert kennt. Nichts ist ein Wert. Es wird also eine leere Zeichenfolge definiert.

Aus diesem Grund ist dies wahr, solange Sie ein Eingabefeld mit dem Namen userName haben, unabhängig davon, ob sie es ausfüllen. Was Sie wirklich tun möchten, ist zu prüfen, ob der Benutzername gleich einer leeren Zeichenfolge '' ist.

0
GoldenNewby