2010-12-07 4 views
13

Ich möchte in der Lage sein zu unterscheiden zwischen bestehenden Anfrage String-Parameter auf Null gesetzt, und fehlende Parameter. So sind die Teile der Frage sind:Auf Null und fehlende Abfrage String-Parameter in PHP

  • Wie kann ich überprüfen, ob ein Parameter in der Abfragezeichenfolge besteht
  • Was ist die etablierte Methode zur Durchführung eines Nullwert in einer Abfragezeichenfolge? (ZB param = null oder param = (nichts))

Dank

Antwort

29

Verwenden isset() und empty()

if (isset($_REQUEST['param'])) 
{ 
    // param was set in the query string 
    if(empty($_REQUEST['param'])) 
    { 
    // query string had param set to nothing ie ?param=&param2=something 
    } 
} 
+2

+1! Richtige Antwort, aber Sie brauchen 'isset()' nicht, wenn Sie 'empty()' verwenden, da 'empty()' 'isset()' impliziert. Dies ist besonders relevant, wenn '! Empty()' verwendet wird. Und Sie sollten wahrscheinlich eine explizite Antwort auf den zweiten Teil der Frage hinzufügen. – jwueller

+0

@elusive, Wenn Sie für eine Variable, die nicht gesetzt ist, leer aufrufen, erhalten Sie ein E_WARNING. –

+2

@Byron Whitlock: Ich denke, das ist nicht korrekt. Der Dokumentstatus _ "empty() ist das Gegenteil von (boolean) var, außer dass keine Warnung generiert wird, wenn die Variable nicht gesetzt ist." _. – jwueller

11

Oder verwenden array_key_exists:

if(array_key_exists("myParam", $_GET)) { 

} 

Ich habe noch nie gewesen scharf auf "Konventionen" für die Übergabe leerer Werte an den Server - ich bin es gewohnt, auf das Vorhandensein von Variablen zu testen, und dann trimmen sie und testen zum Beispiel auf Leerheit.

4

Werte, die in $_GET und $_POST gespeichert sind, können nur Zeichenfolgen oder Arrays sein, sofern sie nicht explizit zur Laufzeit festgelegt wurden. Wenn Sie eine Abfragezeichenfolge von query=string haben, ist der Wert "string", wenn Sie stattdessen verwenden: query=null wird der Wert "null". Beachten Sie, dass es sich daher um eine Zeichenfolge handelt. Wenn Sie senden: query=, wird der Wert "" oder die leere Zeichenfolge sein. Beachten Sie die differences zwischen isset und empty. isset wird wahr, wenn der Wert nicht null ist, während empty wird True sein, wenn der Wert false auswertet. Daher wird "" für sowohlisset als auch empty wahr sein.

Wenn Sie nur Parameter, wenn eine Abfrage-String überprüfen möchten auf den String-Wert von "null" eingestellt wurde, können Sie einfach $_GET['query']=='null' überprüfen (Sie können den Fall der Zeichen vor der Prüfung einzustellen)

2

Mit einem if-Anweisung statt zwei:

if ((isset($_REQUEST['name'])) && (!empty($_REQUEST['name']))) 
{ 
    $name= $_REQUEST['name']; 
}