Tester numéricité entier formulaire [Résolu/Fermé]

Signaler
Messages postés
127
Date d'inscription
samedi 19 octobre 2013
Statut
Membre
Dernière intervention
17 juillet 2016
-
Messages postés
127
Date d'inscription
samedi 19 octobre 2013
Statut
Membre
Dernière intervention
17 juillet 2016
-
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
is_int
ne marchait pas pour des données reçut d'un formulaire.

is_numeric
me 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.

1 réponse

Messages postés
5380
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
3 juillet 2020
884
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
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63035 internautes nous ont dit merci ce mois-ci

Messages postés
127
Date d'inscription
samedi 19 octobre 2013
Statut
Membre
Dernière intervention
17 juillet 2016
201
Je test et je te redis. Pour tester le fait qu'il soit entier ?
Messages postés
5380
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
3 juillet 2020
884
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
Messages postés
5380
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
3 juillet 2020
884
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
Messages postés
127
Date d'inscription
samedi 19 octobre 2013
Statut
Membre
Dernière intervention
17 juillet 2016
201
Ok, pour tester la numéricité, c'est bon ça marche.
Pour les nombres entiers ça marche aussi !
Merci beaucoup Dal.