Fonction dans une fonction et autres pbs

Fonction dans une fonction et autres pbs - PHP - Programmation

Marsh Posté le 27-05-2006 à 16:17:37    

Hello
 
Voila pour un site de petites annonces, je fais une fonction d'affichage d'annonce que je vous donne pas en entier ici.
Il y a plusieurs types d'affichages : la visu normale, l'admin (idem + boutons modifier et supprimer), la prévisualisation (boutons différents) etc
Ils ont tous en gros la même gueule, c'est pour ça que j'en fais une fonction.
 
Les boutons de ces affichages ont eux aussi tous la même gueule, ce sont des formulaires qui renvoyent tous les memes valeurs, mais à des scripts diffénrents bien sur.
 
A l'intérieur de cette fonction, j'y mets donc une fonction qui crée un bouton.
 

Code :
  1. function Aff_Ann($param, $ligne, $tab_POST, $argSupp=0) {
  2.   // parfois les params arrivent du $_POST, parfois de la BDD ($ligne)
  3.   $texte=""; $nom=""; $prenom="";
  4.   switch ($param) {
  5.     case "showtout" : case "visu" : { $texte = $ligne['MESSAGE'];
  6.                    $nom = $ligne['NOM']; $prenom = $ligne['PRENOM']; $cle = $ligne['CLE']; break; }
  7.     case "previsu" : { echo "fok"; $texte = $tab_POST['iTexte'];
  8.                     $nom = $tab_POST['iNom']; $prenom = $tab_POST['iPrenom']; $cle = $tab_POST['iNumAn']; break; }
  9.     default : {$texte=""; $nom=""; $prenom="";}
  10.   }
  11.   if (!isset($passeparla)) {
  12.     function Aff_Bouton($value, $action) { ?>
  13.       <form method="post" action="annoncesadmin.php">
  14.        <input type="hidden" name="iNom" value="<? echo $nom ?>">
  15.        <input type="hidden" name="iPrenom" value="<? echo $prenom ?>">
  16.        <input type="hidden" name="iTexte" value="<? echo $texte ?>">
  17.        <input type="hidden" name="iAction" value="<? echo $action ?>">
  18.        <input type="hidden" name="iNumAn" value="<? echo $cle ?>">
  19.        <input type="submit" name="iOK" value="<? echo $value ?>">
  20.       </form>
  21.     <? }
  22.   }
  23.   static $passeparla = 1;
  24.   // ... ... ...
  25. }


 
pb 1 : la variable statique est censée empécher de définir 2 fois la fonction, hors le message d'erreur est tjrs là (fonction Aff_Bouton définie 2 fois)
 
pb 2 : à l'intérieur de le fonction fille Aff_Bouton(), les variables $cle, $prenom, $nom, $texte définies dans la fonction mère Aff_Ann() sont inconnues, ça c'est normal, mais comment y accéder ??? Elles ne sont ni globales, ni locales...  :pt1cable:  
 
 
Bon vous voyez en gros les pbs j'espère...
 
Aidez moi je suis si seul  
Merci


Message édité par theredled le 27-05-2006 à 19:44:04
Reply

Marsh Posté le 27-05-2006 à 16:17:37   

Reply

Marsh Posté le 27-05-2006 à 19:43:24    

vous voulez une reformulation peut-etre ?

Reply

Marsh Posté le 27-05-2006 à 20:11:19    

Non, que tu apprennes la patience serait pas de refus par contre, on est pas à ton service exclusif et on a un peu le droit de foutre autre chose durant 3 heures un week-end...
 
Pour ton pb1, c'est normal, static conserve l'alloc mémoire de la variable et donc sa valeur, si tu définis pas la variable avant de t'en servir, le script ne risque pas de savoir de quoi tu parles. Dans ton cas, mets ton static en début de fonction et définit le comme booléen, ça ira déjà mieux.

Reply

Marsh Posté le 27-05-2006 à 21:49:33    

bon je suis un noob en php mais c est pas un peu crade de declarer ta fonction dans une boucle elle meme dans une autre fonction ?  
surtout qu elle sera pas executee je vois pas du tout l interet :sweat:
 

Reply

Marsh Posté le 28-05-2006 à 00:51:43    

naceroth a écrit :

Non, que tu apprennes la patience serait pas de refus par contre, on est pas à ton service exclusif et on a un peu le droit de foutre autre chose durant 3 heures un week-end...


Dsl c'était pas aggressif de ma part  :jap:  
 

naceroth a écrit :

Pour ton pb1, c'est normal, static conserve l'alloc mémoire de la variable et donc sa valeur, si tu définis pas la variable avant de t'en servir, le script ne risque pas de savoir de quoi tu parles. Dans ton cas, mets ton static en début de fonction et définit le comme booléen, ça ira déjà mieux.


C'est justement le but : il ne définit la fonction que si $passeparla est définie : d'ou le "if(isset($passeparla))". Si je la déclare avant, ça va pas le faire. Donc si il retourne ds la fonction après, $passeparla sera définie, donc il il ne redéfinira par Aff_bouton()... Sauf que ça marche pas  :D  
 

Citation :

bon je suis un noob en php mais c est pas un peu crade de declarer ta fonction dans une boucle elle meme dans une autre fonction ?  
surtout qu elle sera pas executee je vois pas du tout l interet :sweat:


La fonction est exécutée plus tard mais je mets pas le code (par contre je mets " // ... ... ... " ).
Et non, je n'ai pas trouvé d'autre solution que de déclarer une fonction dans une autre fonction... si vous en avez d'autres c'est pas de refus  :) je suis sur une piste avec eval(), mais on voira ça plus tard.

Message cité 1 fois
Message édité par theredled le 28-05-2006 à 00:53:23
Reply

Marsh Posté le 28-05-2006 à 01:31:08    

theredled a écrit :


C'est justement le but : il ne définit la fonction que si $passeparla est définie : d'ou le "if(isset($passeparla))". Si je la déclare avant, ça va pas le faire. Donc si il retourne ds la fonction après, $passeparla sera définie, donc il il ne redéfinira par Aff_bouton()... Sauf que ça marche pas  :D  


 
Faut apprendre à voir un peu plus loin que le bout de son nez (ou faire une remise en question de son code). Exemple :
 

Code :
  1. function MaFonctionExecuteeUneFois(){
  2. static $flag = true;
  3. blablabla
  4. if ($flag){
  5.    // première exécution de la fonction
  6.    blablabla
  7.    $flag = false;
  8. }
  9. }


 
Hop, un seul passage dans le if  :hello:  
 
Ceci dit, une fonction dont le seul intérêt est d'afficher un formulaire, surtout de cette manière, en effet, c'est crade :)

Message cité 1 fois
Message édité par naceroth le 28-05-2006 à 01:31:32
Reply

Marsh Posté le 28-05-2006 à 04:12:34    

Bon il me semble que j'ai oublié de précisé que suis noob en php, donc je le dis, parce qu'apparemment ya quiproquo un peu là.
 

naceroth a écrit :

Faut apprendre à voir un peu plus loin que le bout de son nez (ou faire une remise en question de son code). Exemple :
 

Code :
  1. function MaFonctionExecuteeUneFois(){
  2. static $flag = true;
  3. blablabla
  4. if ($flag){
  5.    // première exécution de la fonction
  6.    blablabla
  7.    $flag = false;
  8. }
  9. }


 
Hop, un seul passage dans le if  :hello:


Effectivement, enfin ça reviens un peu au même nan ?
 

naceroth a écrit :

Ceci dit, une fonction dont le seul intérêt est d'afficher un formulaire, surtout de cette manière, en effet, c'est crade :)


J'en conviens, je cherche d'autres solutions, eval() ou autres... si t'en as  [:airforceone]

Reply

Marsh Posté le 28-05-2006 à 16:14:57    

theredled a écrit :

Bon il me semble que j'ai oublié de précisé que suis noob en php, donc je le dis, parce qu'apparemment ya quiproquo un peu là.
Effectivement, enfin ça reviens un peu au même nan ?


 
Sauf que la mienne fonctionne :D
 
C'est pour ça que je parle de remise en question (de ton code), y a pas qu'une seule façon de faire les choses. Pour que ton static fonctionne, il doit être déclarée avant de s'en servir, ok, déclare le avant et modifie ton code, reste pas coincé sur le isset(...) puisqu'il pose un problème de logique  :hello:

Reply

Marsh Posté le 28-05-2006 à 18:12:12    

Bon alors j'ai changé les choses, mon Aff_Bouton() j'en ai fait une vraie fonction (en dehors de Aff_An()), et je lui passe en paramètre un tableau avec $nom $prenom $cle $pointure $tailleongles etc, et non seulement ça marche, mais en plus je peux l'appeler d'ailleurs, et ça, c'est vraiment trop de la balle.
 
Merci à toi naceroth  :)  je me garde ce topic pour mes ultérieures altercations avec php. Enfin non.


Message édité par theredled le 28-05-2006 à 18:14:44
Reply

Sujets relatifs:

Leave a Replay

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