Tester numéricité entier formulaire
Résolu
[TiDi]
Messages postés
124
Date d'inscription
Statut
Membre
Dernière intervention
-
[TiDi] Messages postés 124 Date d'inscription Statut Membre Dernière intervention -
[TiDi] Messages postés 124 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
*****
Avant-propos :
J'ai longuement recherché sur Google mais je ne comprend rien. JE SUIS DEBUTANT.
*****
Problème :
L'utilisateur remplit un formulaire de type"text", pour que l'application fonctionne, il faut en priorité vérifier les données de l'utilisateur, donc en français :
Si les données du formulaire sont numériques et entiers, affiche "ok".
*****
Complication :
J'ai compris que
*****
Résultats de mes tests pour
Formulaire :
Traitement :
1 : data1 = 10 ; data2 = 10
Résultat : faux
2 : data1 = 10,2 ; data2 = 10,2
Résultat : faux
3 : data1 = iorfhu ; data2 = iufiuh
Résultat : faux
*****
Mes attentes :
- Je voudrais savoir comment tester la numéricité d'un formulaire correctement.
- Je voudrais savoir comment savoir si les données sont des nombres entiers.
- Si possible, une explication claire de votre code.
*****
Merci de votre aide.
--
TiDi, débutant en PHP et un peu en tout à vrai dire.
*****
Avant-propos :
J'ai longuement recherché sur Google mais je ne comprend rien. JE SUIS DEBUTANT.
*****
Problème :
L'utilisateur remplit un formulaire de type"text", pour que l'application fonctionne, il faut en priorité vérifier les données de l'utilisateur, donc en français :
Si les données du formulaire sont numériques et entiers, affiche "ok".
*****
Complication :
J'ai compris que
is_intne marchait pas pour des données reçut d'un formulaire.
is_numericme renvoie n'importe quoi !
*****
Résultats de mes tests pour
is_numeric:
Formulaire :
<form method="post" action="test.php"> <input type="text" placeholder="Test1" name="data1"/> <input type="text" placeholder="Test2" name="data2"/> <input type="submit" class="btnLogin" value="Analyser" tabindex="8"> </form>
Traitement :
if (is_numeric($_POST))
{
echo "vrai";
}
else
{
echo "faux";
}
1 : data1 = 10 ; data2 = 10
Résultat : faux
2 : data1 = 10,2 ; data2 = 10,2
Résultat : faux
3 : data1 = iorfhu ; data2 = iufiuh
Résultat : faux
*****
Mes attentes :
- Je voudrais savoir comment tester la numéricité d'un formulaire correctement.
- Je voudrais savoir comment savoir si les données sont des nombres entiers.
- Si possible, une explication claire de votre code.
*****
Merci de votre aide.
--
TiDi, débutant en PHP et un peu en tout à vrai dire.
1 réponse
-
Salut TiDi,
https://www.php.net/manual/fr/reserved.variables.post.php
$_POST est un tableau associatif.
Pour accéder à une valeur POSTée, tu dois préciser quelle est la valeur en question à laquelle tu veux accéder.
if ( is_numeric($_POST["data1"]) && is_numeric($_POST["data2"] ) { echo "<p>Les deux valeurs sont numériques</p>"; }
Dal-
-
si tu veux tester si une variable contient un entier ou pas, tu utilises is_int ou is_integer :
https://www.php.net/manual/fr/function.is-int.php
https://www.php.net/manual/fr/function.is-integer.php -
hmm, attends.
Il est probable que ton $_POST contienne en fait une chaîne représentant la saisie (qui peut ou non être un entier).
Tu peux le vérifier avec gettype :
https://www.php.net/manual/fr/function.gettype.php
Si c'est le cas, alors probablement :
si $_POST["data1"] contient "10" (une chaîne), le résultat de is_int va être : faux
on peut tenter de convertir la chaîne avec intval :
https://www.php.net/intval
puis, vérifier si c'est bien un entier que tu as. Mais la gestion d'erreur de intval n'est pas terrible (si la conversion ne peut être faite, cela renvoie zéro, qui.. est un entier), et de plus, si l'entrée est un nombre décimal, cela va certainement tronquer la valeur sans que tu le saches.
Une autre solution est d'utiliser des regexp, si ce que tu veux vraiment, c'est exiger que ce qui est entré soient des entiers.if ( preg_match("/^\s*[-+]*\s*[0-9]+\s*$/", $_POST["data1"]) && preg_match("/^\s*[-+]*\s*[0-9]+\s*$/", $_POST["data2"]) ) { echo "<p>Les deux valeurs sont des entiers</p>"; }
Cette regexp valide :
"12"
" 12"
" 12 "
"+3"
"+ 3 "
"-4"
etc.
Si tu veux juste des entiers positifs et sans signe, la regexp devient/^\s*[0-9]+\s*$/
Dal -
-