2010-04-19 4 views
7

Si vous essayez de lire la valeur d'une variable 'get', que se passe-t-il si cette variable n'a pas été définie dans l'URL. Exemple: vous demandez la page test.php, dans ce fichier il essaie de lire la valeur de $_GET['message']. Que se passe-t-il dans ce cas? doser la valeur juste être retourné comme ''?PHP lisant la variable 'get' qui peut ou non avoir été définie

Est-ce que cela veut dire que si je suis toujours attends une valeur à saisir, et ne suis pas prêt à accepter une valeur de « » que je peux faire quelque chose comme

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

S'il vous plaît garder à l'esprit que je sais que je pourrais utiliser isset($_GET['bar']) Mais je ne veux pas seulement savoir si elle est définie, peu m'importe si c'est le cas ou non, je me soucie juste si elle a une valeur qui est plus qu'une simple chaîne vide.

+0

oooh $, ce que j'ai-je fait mes tags: PI a essayé d'écrire « $ _GET » – thecoshman

Répondre

7

Si vous ne vous souciez pas si la valeur est réellement définie, vous pouvez utiliser ceci:

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

Je crois que c'est la solution parfaite à mes besoins. Cela ne génèrera donc PAS d'erreur si '$ _GET ['bar']' n'était même pas défini en premier lieu. – thecoshman

+0

Je pense qu'il est important de signaler cependant que cela considérera la chaîne ''0 '' comme vide. Si vous utilisez cette option comme ID pour les pages à charger, cela pourrait vous causer des problèmes. Je crois cependant que la plupart des bases de données commencent les numéros automatiques pour une colonne d'ID à 1 – thecoshman

+0

oui, ajouté cela à la réponse. – elias

0

Si je comprends bien, il est:

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

Mais dans ce code , Je vais encore devoir vérifier si '$ foo == ''' Je veux essayer et juste le faire en une fois. – thecoshman

6

Si vous essayez d'accéder à un élément de tableau qui n'existe pas, le résultat sera null.

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

Il est intéressant de noter que si vous utilisez les faibles comparison operator== plutôt que la stricte comparsion ===, puis '' sera considéré comme nul. L'inconvénient avec le code ci-dessus est qu'il va générer un avis lorsque vous accédez au tableau avec un index qui n'existe pas, ce qui est un peu brouillon.

Par conséquent, vous devez vérifier si la valeur est définie avant d'affecter la valeur contenue à une variable.

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

Si vous voulez avoir une valeur par défaut, et seulement remplacer cette valeur par défaut si la valeur $ _GET existe, vous pouvez utiliser la conditional operator (défilement vers le bas pour « ternaires Opérateur »)

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

Voici comment je le fais.

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

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

Comme un côté, vous aurez probablement jamais une vraie valeur booléenne de _GET

Questions connexes