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

--
TiDi, débutant en PHP et un peu en tout à vrai dire.

1 réponse

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    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
    1. [TiDi] Messages postés 124 Date d'inscription   Statut Membre Dernière intervention   262
       
      Je test et je te redis. Pour tester le fait qu'il soit entier ?
      0
    2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      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
    3. [TiDi] Messages postés 124 Date d'inscription   Statut Membre Dernière intervention   262
       
      Ok, pour tester la numéricité, c'est bon ça marche.
      Pour les nombres entiers ça marche aussi !
      Merci beaucoup Dal.
      0