Problème pour création de fonction

Problème pour création de fonction - PHP - Programmation

Marsh Posté le 06-12-2005 à 15:04:41    

Bonjour,
 
cela fait maintenant quelques mois que je programme sous php. Au fil du temps je me suis rendu compte qu'il serait bien plus efficace de travailler avec des fonctions ... seulement même en lisant des aides je n'arrive pas à les mettre en place  :fou:  
 
Voici un bout de code que j'utilise pour vérifier le format de la date. Je l'ai volontairement coupé en trois cases dans le formulaire jj / mm / aa.
 

Code :
  1. if ($_POST["date_dernier_inventaireJJ"] != "jj" )
  2. {
  3.    if( !ereg("^([0-9])*$", $_POST["date_dernier_inventaireJJ"] . $_POST["date_dernier_inventaireMM"] .    $_POST["date_dernier_inventaireAA"]))
  4.     {
  5.          $mess = "le format de la date du dernier inventaire n'est pas valide, utilisez que des chiffres !";
  6.     }
  7.    
  8.     else
  9.     {    
  10.          $result = checkdate($_POST["date_dernier_inventaireMM"], $_POST["date_dernier_inventaireJJ"], $_POST["date_dernier_inventaireAA"]);
  11.          if( $result == true )
  12.  {
  13.  /* la date est ok on envoie à la bd */
  14. }
  15. else
  16. {
  17.   $mess = "le format de la date du dernier inventaire n'est pas valide";
  18. }
  19.     }    
  20. }


 
Par ce petit script je control d'abord que la date est composée que de chiffres si le champ à été rempli, puis si c'est le cas j'utilise la fonction checkdate pour controler une seconde fois cette date.
 
J'aurais aimez savoir comment réaliser une fonction avec comme paramètres $champ par exemple qui remplacerais tout ce qui se trouve avant JJ / MM / AA (ici date_dernier_inventaire). Puis un second paramètre si possible $DESC pour le message d'érreur, qui serait ici : "du dernier inventaire".
 
Il faudrais donc que la fonction retourne deux valeurs si j'ai bien compris, une pour dire si la syntaxe de la date et correcte puis une autre pour dire si la date est valide...
 
Voila, si quelqu'un peut me filer un coup de main ça serait bien cool  :bounce:

Reply

Marsh Posté le 06-12-2005 à 15:04:41   

Reply

Marsh Posté le 06-12-2005 à 15:34:41    

function()
return()
et un peu de réflexion :D

Reply

Marsh Posté le 06-12-2005 à 15:52:29    

C'est ce que j'essaye de faire.
 
Je déclare ma fonction avec ces deux paramètres.
Mais c'est après que je bloque, soit elle retourne tout le temps false soit l'inverse ...
 
Ce que je voudrais c'est un exemple à partir de ce problème, par la suite je pourrais l'adapter au reste de mes scripts ...
 
Bref j'en suis toujours au même stade :(

Reply

Marsh Posté le 06-12-2005 à 16:00:39    

Tu mets tout ce code dans une fonction, à la ligne 14 "return true;" et à la ligne 22 "return false;".

Reply

Marsh Posté le 06-12-2005 à 16:13:51    

Ok, alors dans ce cas je dois foiré dans ma déclaration de variables.
 
Je m'explique, j'airais plusieur date à contrôler. Par conséquent je voudrais écrire :

Code :
  1. verif_date("date_dernier_inventaire", "du dernier inventaire" )


 
Par conséquent quand je créé ma fonction je met :

Code :
  1. function verif_date($champ, $info)
  2. {
  3.     if ($_POST["'.$champ.'JJ"] != "jj" )
  4.     {
  5.        if( !ereg("^([0-9])*$", $_POST["'.$champ.'JJ"] . $_POST["'.$champ.'MM"] .    $_POST["'.$champ.'AA"]))
  6.        {
  7.        $mess = "le format de la date '.$info.' n'est pas valide, utilisez que des chiffres !";
  8.        ...
  9. }


 
et la ca bloque, ca marche plus :( Et je me demande aussi si c'est possible d'attende deux réponse d'une fonction. Ici dans un premier temps si c'est pas que des chiffres, puis si la date est valide.
 
Pourtant il me semble que j'intègre bien les paramètres en mettant '.$param.' ...

Reply

Marsh Posté le 06-12-2005 à 16:19:29    

Ha oui, là y a une "petite" erreur. :o  
A la ligne 2 tu ne dois pas écrire :
if ($_POST["'.$champ.'JJ"] != "jj" )
Mais, simplement :
if ($champ['JJ'] != "jj" )
 
$champ et $infos deviennent, dans la fonction, des variables tout ce qu'il y a de plus banales !


Message édité par kalex le 06-12-2005 à 16:20:19
Reply

Marsh Posté le 06-12-2005 à 16:23:01    

Ah ... bah voila mon petit problème au niveau des fonctions !
 
Merci beaucoup pour cette rectification, je teste de suite ...


Message édité par mc_cut_killer le 06-12-2005 à 16:24:29
Reply

Marsh Posté le 06-12-2005 à 17:00:23    

Bon pour finir ca bloque encore ...  :fou:  
 
Voila le début de ma fonction :

Code :
  1. function verif_date($champJJ, $champMM, $champAA, $info)
  2.     {
  3.     if( !ereg("^([0-9])*$", $champJJ . $champMM . $champAA))
  4.     {
  5.      $mess = "le format de la date $info n'est pas valide, utilisez que des chiffres !";
  6.     }
  7.     }


 
Je l'appel pour cette ligne :

Code :
  1. verif_date($_POST["date_dernier_inventaireJJ"], $_POST["date_dernier_inventaireMM"], $_POST["date_dernier_inventaireAA"], "du dernier inventaire" );


 
Et ca marque rien. Si je met return = false je ne sais pas comment m'en servir. Alors j'ai essayé de remplacer $mess... par $control1 == false. Dans ce cas c'est toujours faut. J'ai mis 4 variables pour l'instant mais j'aimerais avoir juste à mettre le champ du nom du formulaire qui prendrais soit champJJ / champMM / champAA.
 
Bref, pas top ma fonction lol

Reply

Marsh Posté le 06-12-2005 à 17:22:10    

La syntaxe c'est :
return false;
Et pas :
return = false;
!

Reply

Marsh Posté le 08-12-2005 à 15:26:24    

Me revoila sur ce problème de fonction !
Bon, maintenant j'arrive à faire fonctionner cette fonction  :D  
 
Celle-ci est mise en include dans ma page de validation pour mon formulaire. Mon problème est maintenant de pouvoir récupérer les variables que j'ai dedans pour les envoyer à la bd (mysql). J'arrive à faire une requette à partir de la fonction, mais je préfèrerais récupérer la variable $date dans ma page de validation, et ce pour pouvoir l'intégrer dans ma requette générale.  :sweat:  
 
Voici ma fonction :
 

Code :
  1. function verif_date($MM, $JJ, $AA, $info)
  2.    {
  3.     /* on vérifie d'abord que la date ne comporte que des chiffres */
  4.     if( !ereg("^([0-9])*$", $MM . $JJ . $AA))
  5.     {
  6.      echo '<font color="red"><u>Erreur</u> : le format de la date ' .$info. ' n\'est pas valide, utilisez que des chiffres !<br><br>';
  7.     }
  8.    
  9.     else
  10.     {    
  11.      /* puis on vérifie la validité de la date */
  12.      $control2 = checkdate($MM, $JJ, $AA);
  13.      /* si la date est valide on la traite, sinon message d'érreur */
  14.      if( $control2 == true )
  15.      {
  16.       /* si le mois ne comporte qu'un chiffre on rajoute un zéro devant */
  17.       if(strlen($MM) < 2)
  18.       {
  19.        $MM = 0 .$MM;       
  20.       }
  21.      
  22.       /* si le jour ne comporte qu'un chiffre on rajoute un zéro devant */
  23.       elseif(strlen($JJ) < 2)
  24.       {
  25.        $JJ = 0 .$JJ;       
  26.       }
  27.      
  28.       /* si l'année ne comporte pas 4 chiffres on envoie un message d'érreur */
  29.       elseif(strlen($AA) < 4)
  30.       {
  31.        echo '<font color="red"><u>Erreur</u> : le format de la date ' .$info. ' n\'est pas valide, l\'année doit comporter 4 chiffres.<br><br>';      
  32.       }
  33.      
  34.       /* si tout est ok on envoie à la bd */
  35.       else
  36.       {
  37.        $date = $JJ . $MM . $AA;       
  38.       }
  39.      }
  40.     
  41.      else
  42.      {
  43.       echo '<font color="red"><u>Erreur</u> : la date ' .$info. ' n\'est pas valide.<br><br>';
  44.      }
  45.     }    
  46.    }


 
Je pense qu'il doit y avoir une certaine syntaxe mais j'ai pas encore trouvé sur google. J'avais aussi un champ sur ma page réservé au érreurs, mais si au lieu de mettre echo 'erreur ...' je met $mess = '...' je n'est aucuns message car la variable $mess ne sort pas de la fonction.
 
Merci d'avance  :ange:

Reply

Marsh Posté le 08-12-2005 à 15:26:24   

Reply

Marsh Posté le 08-12-2005 à 15:50:10    

return $date; :??:

Reply

Marsh Posté le 08-12-2005 à 16:12:42    

Heu ... j'viens d'essayer mais toujours rien :(
 
Bon déja j'ai du remplacer les elseif par des if pour le control des mois + années. Suite à cette modification, si je marque echo $date; en dessous de "$date = $JJ . $MM . $AA;" ca me renvoie bien la date avec les zéros.
 
Pour ce qu'il y est de return $date;, je le met ou? J'ai essayé de le mettre en dessous de $date = ... mais ca marche pas. J'ai testé inepu de partout mais ca marche pas :(

Message cité 1 fois
Message édité par mc_cut_killer le 08-12-2005 à 16:13:14
Reply

Marsh Posté le 08-12-2005 à 16:43:05    

mc_cut_killer a écrit :

Heu ... j'viens d'essayer mais toujours rien :(
 
Bon déja j'ai du remplacer les elseif par des if pour le control des mois + années. Suite à cette modification, si je marque echo $date; en dessous de "$date = $JJ . $MM . $AA;" ca me renvoie bien la date avec les zéros. (...)

Pour poser des questions, essaye de te détacher de ton problème particulier, sinon on fait que du debugage, c pas très interessant. ;)
 
Ce que tu veux savoir c'est comment une fonction peut renvoyer des informations ?
Avec return : http://fr2.php.net/manual/fr/funct [...] values.php

Reply

Marsh Posté le 08-12-2005 à 16:51:53    

Ouais, c'est vrai que j'bloque inpeu trop dessus le problème ...  
 
J'viens de commencer à lire ton lien. Mais c'est pas tout à fait mon cas.
 
Enfin j'vais essayer d'adapter cette technique, mais pour l'instant rien de bon ... :( Ca j'avais compris, mais moi ce n'est pas un calcul c'est juste pour récupérer la dernière variable.

Reply

Marsh Posté le 08-12-2005 à 17:08:34    

Si ça peut t'aider à comprendre :

Code :
  1. function test(){
  2. $date = "2005-10-17";
  3. return $date;
  4. echo "salut";
  5. }
  6. echo test();


Affichera : 2005-10-17
echo "salut" ne sera jamais exécuté, car return marque la fin de la fonction.
 
Par contre :

Code :
  1. function test(){
  2. $date = "2005-10-17";
  3. if(0 == 1){
  4.  return $date;
  5. }
  6. echo "salut";
  7. return " !";
  8. }
  9. echo test();


Affichera : salut !
La condition 0 == 1 est fausse, donc return n'est pas appelé.


Message édité par kalex le 08-12-2005 à 17:09:34
Reply

Marsh Posté le 09-12-2005 à 08:40:27    

:bounce:  :bounce:  :bounce:  
 
Ca y est j'y arrive ! Désolé de ne pas avoir répondu hier, mais effectivement ca m'a pas mal aidé. Mon problème venait du fait que je mettais :
 

Code :
  1. echo mafonction();


 
Au lieu de mettre :

Code :
  1. echo mafonction(param1, param2 ...);


 
Encore merci pour ton aide  :jap: , et @bientôt  :hello:

Reply

Sujets relatifs:

Leave a Replay

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