fonctions et variables....

fonctions et variables.... - PHP - Programmation

Marsh Posté le 07-05-2004 à 10:15:14    

Bonjour à tous.. j'ai une question.. un truc qui m'a pris la tete toute la journée hier...
 
voila j'explique, j'ai créé une fonction de canonisation de données, cette fonction permet donc de tester et normaliser les informations inserées dans un formulaire... mais j'ai un probleme lorsque je veux afficher un message d'erreur.. en fait je declare une variable dans ma fonction dans lequel se trouve le message d'erreur.
 
à savoir : ma fonction est dans un include.
 
voici donc ma page variables.inc.php :

Code :
  1. // Messages d'erreur
  2. function AfficheErreur ($numeroerreur,$nomduchamp, $min, $max)
  3. {
  4. switch ($numeroerreur)
  5. {
  6. //bug pour l'affichage des erreurs => n'affiche pas la variable "$erreur" dans la page ajout.php
  7. case 1 : $erreur.="Ne pas depasser ".$max." caractères dans le champ <b>".$nomduchamp."</b><br/>";break;
  8. case 2 : $erreur.="Veuillez saisir ".$min." caractères minimum dans le champ <b>".$nomduchamp."</b><br/>";break;
  9. case 3 : $erreur.="Le champ <b>".$nomduchamp."</b> est vide <br/>";break;
  10. case 4 : $erreur.="Le champ <b>".$nomduchamp."</b> doit être une valeur numérique <br/>";break;
  11. default : $erreur.="Erreur inconnue"; break;
  12. }
  13. }
  14. // canonisation d'une chaine de caracteres
  15. function CanonisationChaine($chaine,$nomduchamp,$min,$max)
  16. {
  17.  if (!empty($chaine))
  18.  {
  19.   //verifie le nombre de caracteres
  20.   if(strlen($chaine) > $max)
  21.   {
  22.   AfficheErreur(1,$nomduchamp,$min,$max);
  23.   return $chaine;
  24.   }
  25.   elseif(strlen($chaine) < $min)
  26.   {
  27.   AfficheErreur(2,$nomduchamp,$min,$max);
  28.   return $chaine;
  29.   }
  30.   else
  31.   {
  32.   //canonise la chaine de caractères
  33.   return $chaine=htmlentities(ucwords(trim(strtolower($chaine))),ENT_QUOTES);
  34.   exit();
  35.   }
  36.  }
  37.  else
  38.  {
  39.  AfficheErreur(3,$nomduchamp,$min,$max);
  40.  return $chaine;
  41.  exit();
  42.  }
  43. }

 
 
Et voici ma page qui contient mon formulaire (en resumé) :
 

Code :
  1. <?php session_start();
  2. include('includes/variables.inc.php'); //inclus le fichier de variables
  3. if($ajouter)
  4. {
  5. $nom_produit=$_POST['nom_produit'];
  6. $nom_produit=CanonisationChaine($nom_produit,"nom du produit",2,20);
  7. }
  8. ?>
  9. <form name="form1" method="post" ENCTYPE="multipart/form-data" action="<?php echo $PHP_SELF; ?>">
  10. <?php echo $erreur; ?>
  11. <b>Nom du produit</b>
  12. <input type="text" name="nom_produit" value="<?php echo $nom_produit; ?>">
  13. <input type="submit" name="ajouter" value="ajouter un produit">
  14. </form>


Donc ma fonction de canonisation fonctionne tres bien mais les messages d'erreur ne s'affichent que quand je mets "echo" devant mes erreurs dans les fonctions... simplement ça s'affiche en haut de ma page et pas dans mon <?php echo $erreur; ?>
 
Merci d'avance
 
Freed


Message édité par freed102 le 07-05-2004 à 10:16:24

---------------
Freed102
Reply

Marsh Posté le 07-05-2004 à 10:15:14   

Reply

Marsh Posté le 07-05-2004 à 11:01:36    

faudrait peut-être faire "return $erreur;" non ?

Reply

Marsh Posté le 07-05-2004 à 11:04:15    

Freekill a écrit :

faudrait peut-être faire "return $erreur;" non ?


 
J'avais essayé ça :
 

Code :
  1. function AfficheErreur ($numeroerreur,$nomduchamp, $min, $max)
  2.   {
  3.      
  4.      switch ($numeroerreur)
  5.      {
  6.        //bug pour l'affichage des erreurs => n'affiche pas la variable "$erreur" dans la page ajout.php  
  7.        case 1 : return $erreur.="Ne pas depasser ".$max." caractères dans le champ <b>".$nomduchamp."</b><br/>";break;
  8.        case 2 : return $erreur.="Veuillez saisir ".$min." caractères minimum dans le champ <b>".$nomduchamp."</b><br/>";break;
  9.        case 3 : return $erreur.="Le champ <b>".$nomduchamp."</b> est vide <br/>";break;
  10.        case 4 : return $erreur.="Le champ <b>".$nomduchamp."</b> doit être une valeur numérique <br/>";break;
  11.        default : return $erreur.="Erreur inconnue"; break;
  12.      }
  13.      
  14.   }


 
...Mais ça n'a pas marché ! :(


---------------
Freed102
Reply

Marsh Posté le 07-05-2004 à 11:16:15    

Ouais ben ça suffit pas de juste retourner ton erreur dans la fonction CanonisationChaine(), il faut la retourner jusqu'à la source.

Reply

Marsh Posté le 07-05-2004 à 11:38:04    

Freekill a écrit :

Ouais ben ça suffit pas de juste retourner ton erreur dans la fonction CanonisationChaine(), il faut la retourner jusqu'à la source.


 
Je rame là ! j'arrive pas a comprendre pourquoi... par exemple
 
function test()
{
$erreur="erreur1";
}
test();
 
echo $erreur;
 
... n'affiche rien !


---------------
Freed102
Reply

Marsh Posté le 07-05-2004 à 11:39:30    

freed102 a écrit :

Je rame là ! j'arrive pas a comprendre pourquoi... par exemple
 
function test()
{
$erreur="erreur1";
}
test();
 
echo $erreur;
 
... n'affiche rien !


 

Code :
  1. function test()
  2. {
  3.   $erreur="erreur1";
  4.   return $erreur;
  5. }
  6. $result = test();
  7. echo $result;


 
ok ?

Reply

Marsh Posté le 07-05-2004 à 11:42:29    

j'ai trouvé encore mieux je crois par rapport à mon probleme !!!
 
function test()
{
global $erreur;
$erreur="err";
}
test();
 
echo $erreur;
 
 
et là ça marche grave !
 
MERCI ! :)


---------------
Freed102
Reply

Marsh Posté le 07-05-2004 à 11:45:09    

C'est une autre solution, mais l'abus de globales est mauvais pour la santé.

Reply

Marsh Posté le 07-05-2004 à 11:49:02    

oui certes ! mais dans mon cas ça me simplifie la vie... J'etudierai plus profondement le Return... Thanx a lot


---------------
Freed102
Reply

Marsh Posté le 07-05-2004 à 12:44:34    

Mouai, freed102, si je peux te donner un conseil, évite ce style de programmation.
 
Il faut éviter d'utiliser les variables globals, dans certains CAS on ne peut pas faire autrement. Mais dans ton cas, tu as la possiblité d'utilisé le return, alors t'en prive pas.
 
Exemple si ta une fonction Toto() avec un "return" dedans, tu l'appelleras comme cela:
$Resultat = Toto();
Puis tu affiche ton résultat:
echo $Resultat;
 
On enregistre la donnée RETOURNEE par Toto() dans la variable $Resultat.


Message édité par AlphaZone le 07-05-2004 à 12:47:51
Reply

Sujets relatifs:

Leave a Replay

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