2010-04-19 11 views
7

Se si tenta di leggere il valore di una variabile 'get', cosa succede se tale variabile non è stata impostata nell'URL. Esempio: si richiede la pagina test.php, in tale file si tenta di leggere il valore di $_GET['message']. Cosa succede in questo caso? dosare il valore appena ricevuto come ''?Lettura PHP variabile 'get' che può essere impostata o meno

Questo significa che se sto sempre aspettando un valore da inserire, e non sono disposti ad accettare un valore di '' che io posso solo fare qualcosa di simile

$foo = $_GET['bar']; 
if($foo == ''){ 
    // Handle my 'error' 
} 
else 
{ 
    // $foo should now have a value that I can work with 
} 

prega di tenere presente che so che potrei usare isset($_GET['bar']) Ma non voglio solo sapere se è impostato, non mi interessa se lo è o meno, mi interessa solo se ha un valore che è più di una semplice stringa vuota.

+0

Oooh, quello che io ho fatto per i miei tag: PI ha tentato di scrivere '$ _GET' – thecoshman

risposta

7

Se non ti interessa se il valore è effettivamente impostato, puoi usare questo:

if (empty($_GET['bar'])) 
    // value is null, false, 0, '0' or an empty string (including whitespace). 
+0

Credo che questa sia la soluzione perfetta per le mie esigenze. Quindi questo NON genererà un errore se '$ _GET ['bar']' non è stato nemmeno impostato in primo luogo. – thecoshman

+0

Penso che sia importante sottolineare che ciò considererà la stringa ''0'' vuota. Se si utilizza questo come un ID per caricare le pagine, ciò potrebbe causare problemi. Credo tuttavia che molti database inizino automaticamente i numeri per una colonna ID al 1 – thecoshman

+0

, aggiungendoli alla risposta. – elias

0

Se ho capito bene che è:

$foo = $_GET['bar']; 
if ((!isset($foo)) || $foo == '') { 
//GET veriable not set, error 
} 
else { 
// GET veriable set, code here. 
} 
+0

Ma in questo codice , Dovrò ancora controllare se '$ foo == ''' Voglio provare e lo faccio in un colpo solo. – thecoshman

6

Se si tenta di accedere a un elemento array che non esiste, il risultato sarà null.

$foo = $_GET['bar']; //$foo is now null 

vale la pena notare che se si sta utilizzando i deboli comparison operator== piuttosto che la rigida comparsion ===, quindi '' saranno trattati come null.

Lo svantaggio con il codice precedente è che genererà un avviso quando si accede alla matrice con un indice inesistente che è un po 'disordinato.

Quindi è necessario verificare se il valore è impostato prima di assegnare il valore contenuto a una variabile.

if (!isset($_GET['bar'])){ 
    //handle error or assign default value to $foo 
}else{ 
    $foo = $_GET['bar']; 
} 

Se si vuole avere un valore di default, e sostituire solo il valore di default, se il valore di $ _GET esiste è possibile utilizzare il conditional operator (scorrere fino a "Ternario Operator")

$foo = isset($_GET['bar']) ? $_GET['bar'] : 'default value'; 
1

Ecco come lo faccio.

$foo = (isset($_GET['bar'])) ? $_GET['bar'] : false; 

if(false === $foo){ 
    die('no Foo for your Bar'); 
} 

Come un lato, si avrà probabilmente mai ottenere un vero e proprio valore booleano da $ _GET

Problemi correlati