Tester numéricité entier formulaire

Résolu/Fermé
[TiDi] Messages postés 126 Date d'inscription samedi 19 octobre 2013 Statut Membre Dernière intervention 17 juillet 2016 - 20 janv. 2014 à 22:47
[TiDi] Messages postés 126 Date d'inscription samedi 19 octobre 2013 Statut Membre Dernière intervention 17 juillet 2016 - 23 janv. 2014 à 21:10
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.
A voir également:

1 réponse

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
21 janv. 2014 à 10:31
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
[TiDi] Messages postés 126 Date d'inscription samedi 19 octobre 2013 Statut Membre Dernière intervention 17 juillet 2016 262
21 janv. 2014 à 17:54
Je test et je te redis. Pour tester le fait qu'il soit entier ?
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 21/01/2014 à 18:20
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
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 21/01/2014 à 19:13
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
0
[TiDi] Messages postés 126 Date d'inscription samedi 19 octobre 2013 Statut Membre Dernière intervention 17 juillet 2016 262
23 janv. 2014 à 21:10
Ok, pour tester la numéricité, c'est bon ça marche.
Pour les nombres entiers ça marche aussi !
Merci beaucoup Dal.
0