50 votes

PHP : Vérifier si une variable existe mais aussi si elle a une valeur égale à quelque chose.

J'ai (ou pas) une variable $_GET['myvar'] provenant de ma chaîne de requête et je veux vérifier si cette variable existe et aussi si la valeur correspond à quelque chose dans mon instruction if :

Ce que je fais et pense n'est pas la meilleure façon de faire :

if(isset($_GET['myvar']) && $_GET['myvar'] == 'something') : faire quelque chose

Ma question est la suivante : existe-t-il un moyen de faire cela sans déclarer deux fois la variable ?

C'est un cas simple mais imaginez qu'il faille comparer plusieurs de ces cas. $myvar variables.

3 votes

PHP n'a pas de solution pour cela, mais c'est un langage de programmation. Vous pouvez (et devriez) toujours écrire un sous-programme pour raccourcir un code répétitif. Sans oublier que dans un bon programme, chaque variable doit être définie avant d'être utilisée...

1voto

Sheldon Juncker Points 44

Une solution que j'ai trouvée en jouant autour est de faire :

if($x=&$_GET["myvar"] == "something")
{
    // do stuff with $x
}

1voto

EternalHour Points 1110

Cette réponse est similaire à la réponse acceptée, mais elle utilise in_array à la place. Je préfère utiliser empty() dans cette situation. Je suggère également d'utiliser la nouvelle déclaration abrégée de tableau qui est disponible dans la section PHP 5.4.0 +.

$allowed = ["something","nothing"];
if(!empty($_GET['myvar']) && in_array($_GET['myvar'],$allowed)){..}

Voici une fonction permettant de vérifier plusieurs valeurs à la fois.

$arrKeys = array_keys($_GET);
$allowed = ["something","nothing"];

function checkGet($arrKeys,$allowed) { 
    foreach($arrKeys as $key ) {
        if(in_array($_GET[$key],$allowed)) {
            $values[$key];
        }
    }
    return $values;
}

0voto

Mariz Melo Points 740

Merci Mellowsoon et Pekka, j'ai fait quelques recherches ici et j'ai trouvé ceci :

  • Vérifiez et déclarez chaque variable comme nulle (si c'est le cas) avant de commencer à l'utiliser (comme recommandé) :

    !isset($_GET['myvar']) ? $_GET['myvar'] = 0:0;

*OK celui-ci est simple mais fonctionne bien, vous pouvez commencer à utiliser la variable partout après cette ligne.

  • Utilisation d'un tableau pour couvrir tous les cas :

    $myvars = array( 'var1', 'var2', 'var3'); foreach($myvars as $key) !isset($_GET[$key]) ? $_GET[$key] =0:0;

*Après cela, vous êtes libre d'utiliser vos variables (var1, var2, var3 ... etc),

PS : la fonction recevant un objet JSON devrait être meilleure (ou une simple chaîne avec séparateur pour explode/implode) ;

... De meilleures approches sont les bienvenues :)


UPDATE :

Utilisez $_REQUEST au lieu de $_GET, de cette façon vous couvrez les deux variables $_GET et $_POST.

!isset($\_REQUEST\[$key\]) ? $\_REQUEST\[$key\] =0:0;

0voto

windmaomao Points 54

Pourquoi ne pas créer une fonction pour faire cela, convertir la variable que vous voulez vérifier en une variable réelle, ex.

function _FX($name) { 
  if (isset($$name)) return $$name;
  else return null; 
}

alors vous faites _FX('param') == '123' juste une idée.

0voto

user2253362 Points 31

J'utilise tout le temps la fonction utile propre exst() qui déclarent automatiquement des variables.

Exemple -

$element1 = exst($arr["key1"]);
$val2 = exst($_POST["key2"], 'novalue');

/** 
 * Function exst() - Checks if the variable has been set 
 * (copy/paste it in any place of your code)
 * 
 * If the variable is set and not empty returns the variable (no transformation)
 * If the variable is not set or empty, returns the $default value
 *
 * @param  mixed $var
 * @param  mixed $default
 * 
 * @return mixed 
 */

function exst( & $var, $default = "")
{
    $t = "";
    if ( !isset($var)  || !$var ) {
        if (isset($default) && $default != "") $t = $default;
    }
    else  {  
        $t = $var;
    }
    if (is_string($t)) $t = trim($t);
    return $t;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X