85 votes

Vérifier si une variable est un entier en PHP

J'ai le code suivant

     $page = $_GET['p'];

    if($page == "")
    {
        $page = 1;
    }
    if(is_int($page) == false)
    {
        setcookie("error", "Invalid page.", time()+3600);
        header("location:somethingwentwrong.php");
        die();
    }
    //else continue with code

que je vais utiliser pour consulter différentes "pages" d'une base de données (résultats 1-10, 11-20, etc.). Cependant, je n'arrive pas à faire fonctionner correctement la fonction is_int(). Mettre "1" dans l'url (noobs.php?p=1) me donne l'erreur de page invalide, ainsi que quelque chose comme "asdf".

35voto

Tim Cooper Points 55292

Tous les $_GET ont un type de données chaîne, par conséquent, is_int renverra toujours false.

Vous pouvez le voir en appelant var_dump :

 var_dump($_GET['p']); // string(2) "54"

L'utilisation de is_numeric fournira le résultat souhaité (rappelez-vous, cela autorise des valeurs telles que : 0x24 ).

27voto

Michael Berkowski Points 137903

Lorsque le navigateur envoie p dans la chaîne de requête, il est reçu sous forme de chaîne et non d'entier. is_int() renverra donc toujours false.

Essayez plutôt is_numeric() ou ctype_digit()

9voto

doctormad Points 91

/!\ La meilleure réponse n'est pas correcte, is_numeric() renvoie true pour l'entier ET toutes les formes numériques comme "9.1"

Pour les entiers uniquement, vous pouvez utiliser le preg_match('/^\d+$/', $var) peu convivial ou la comparaison explicite et 2 fois plus rapide :

 if ((int) $var == $var) {
    // $var is an integer
}

PS: je sais que c'est un vieux post mais toujours le troisième dans google à la recherche de "php is integer"

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