web-dev-qa-db-fra.com

Comment obtenir int au lieu d'une chaîne de forme?

Obtenir une variable de la forme:

<form method = 'POST' action = ''>
        <input type = 'text' name = 'a' size = '1' >
        <input type = 'submit' value = 'Find it'>
</form>"

Si j'entre 1 et que j'utilise gettype ($ POST _ ['a']), la chaîne me retourne, est-il possible d'entrer int? car après cela, je veux vérifier si cette variable est int.

METTRE &AGRAVE; JOUR

Vous avez des réponses indiquant qu'il retourne toujours chaîne et qu'ils m'ont proposé d'utiliser (int) ou intval (), mais si c'est vraiment une chaîne comme "a", il retourne 0, mais il peut aussi s'agir d'une valeur entière égale à 0, comment résoudre ce problème? 

METTRE &AGRAVE; JOUR

Après avoir modifié une faute de frappe, Brad Christie a suggéré la meilleure méthode, en utilisant is_numeric.

19
Templar
// convert the $_POST['a'] to integer if it's valid, or default to 0
$int = (is_numeric($_POST['a']) ? (int)$_POST['a'] : 0);

Vous pouvez utiliser is_numeric pour vérifier, et php autorise le casting vers entier type également.

Pour les comparaisons réelles, vous pouvez effectuer is_int .

Mettre à jour

La version 5.2 a filter_input qui peut être un peu plus robuste pour ce type de données (et d'autres):

$int = filter_input(INPUT_POST, 'a', FILTER_VALIDATE_INT);

J'ai choisi FILTER_VALIDATE_INT, mais il existe aussi FILTER_SANITIZE_NUMBER_INT et beaucoup plus - cela dépend de ce que vous voulez faire.

24
Brad Christie

Envoi sur le fil via HTTP, tout est une chaîne. Il appartient à votre serveur de décider que "1" doit être 1.

16
jpsimons

Non, HTTP ne traite que du texte (ou des fichiers binaires). 

Vous devez le convertir.

4
Quentin

J'utiliserais (int)$_POST['a'] pour le convertir en entier.

1
user479911

si vous préférez conserver une compatibilité de types étendue et préserver les types d’entrée autres que int (double, float, ecc.), je vous suggère quelque chose comme ceci:

$var = is_numeric($_POST['a'])?$_POST['a']*1:$_POST['a'];

Tu auras:

$_POST['a'] = "abc"; // string(3) "abc"
$_POST['a'] = "10"; // int(10)
$_POST['a'] = "10.12"; // float(10.12)
0
Simone Desantis