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.
// 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.
Envoi sur le fil via HTTP, tout est une chaîne. Il appartient à votre serveur de décider que "1" doit être 1
.
Non, HTTP ne traite que du texte (ou des fichiers binaires).
Vous devez le convertir.
J'utiliserais (int)$_POST['a']
pour le convertir en entier.
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)