Debug d'une fonction de validation

Debug d'une fonction de validation - PHP - Programmation

Marsh Posté le 07-03-2008 à 00:33:09    

Bonjour,
J'ai fait une appli php où l'utilisateur doit rentrer un numéro de téléphone (avec 7 numéros) et, pour une raison que j'ignore, ce numéro ne doit pas être un multiple de 3.
 
J'ai donc fait le code suivant :
 
$cN est le numéro de tél.
$nbError et $msgError sont initialisés à 0 et "".
 

Code :
  1. // Assessing the contact number
  2. if (!is_numeric($cN)) // if the user entered non-alpha characters...
  3.   {
  4.   $nbError++;
  5.   $msgError.= "- The contact number must ONLY contain numeric characters\\n";
  6.   }
  7.   else
  8.   {
  9.    // Here we test if the length of the contact number is 7 characters
  10.    if (strlen($cN) != 7)
  11.    {
  12.     $nbError++;
  13.     $msgError.= "- The contact number must be 7 characters long\\n";
  14.    }
  15.    // And we check if it is not a multiple of 3 by extracting the decimal part of the division
  16.    $contact_div_3 = $cN / 3;
  17.    $decimale=abs($contact_div_3)-intval(abs($contact_div_3));
  18.    if (!$decimale)
  19.    {
  20.     $nbError++;
  21.     $msgError.= "- The contact number must not be a multiple of 3\\n";
  22.    }
  23.   }
  24. if (!$nbError)
  25.  {
  26.   return ("" ); // No error, we return a null string
  27.  }
  28.  else {
  29.   // or we output the concaneted error message
  30.   echo("<SCRIPT LANGUAGE='JavaScript'>window.alert('".$msgError."')</SCRIPT>" );
  31.   return ($msgError);
  32.  }


 
J'ai testé moi même son fonctionnement et je pensais que c'etait bon, mais je me suis rendu compte qu'un utilisateur a pu rentrer 0000003 et 0000000 comme numéro de téléphone, et que la fonction n'a pas bronchée et a validée ces numéros sans afficher de messages.  
 
Je ne vois pas ce qui cloche...
Merci pour votre aide

Reply

Marsh Posté le 07-03-2008 à 00:33:09   

Reply

Marsh Posté le 07-03-2008 à 01:24:05    

J'ai pas essayé à comprendre ce que tu as fais, mais je pense que c'est plus simple avec un modulo

Code :
  1. if(!($cN%3))
  2. {
  3.     Erreur;
  4. }
 

$cN%3 donne le reste de la division par 3.


Message édité par art_dupond le 07-03-2008 à 01:24:20

---------------
oui oui
Reply

Marsh Posté le 07-03-2008 à 01:28:28    

Merci Art_dupond,
 
Je pense avoir trouvé : l'utilisateur a rentré 3.00001, ce qui est bien un numerique, fait 7 caractères, et le resultat de la division par 3 donne 0 (pour l'ordinateur).
 
Et ta solution est plus elegante, merci...
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed