Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2720 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Fonction dans une fonction et autres pbs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fonction dans une fonction et autres pbs

n°1375999
theredled
● REC
Posté le 27-05-2006 à 16:17:37  profilanswer
 

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
mood
Publicité
Posté le 27-05-2006 à 16:17:37  profilanswer
 

n°1376040
theredled
● REC
Posté le 27-05-2006 à 19:43:24  profilanswer
 

vous voulez une reformulation peut-etre ?

n°1376052
naceroth
Posté le 27-05-2006 à 20:11:19  profilanswer
 

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.

n°1376072
mIRROR
Chevreuillobolchévik
Posté le 27-05-2006 à 21:49:33  profilanswer
 

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:
 

n°1376111
theredled
● REC
Posté le 28-05-2006 à 00:51:43  profilanswer
 

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
n°1376120
naceroth
Posté le 28-05-2006 à 01:31:08  profilanswer
 

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
n°1376128
theredled
● REC
Posté le 28-05-2006 à 04:12:34  profilanswer
 

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]

n°1376226
naceroth
Posté le 28-05-2006 à 16:14:57  profilanswer
 

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:

n°1376257
theredled
● REC
Posté le 28-05-2006 à 18:12:12  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Fonction dans une fonction et autres pbs

 

Sujets relatifs
bug : donné qui change lors d'un retour de fonction[RÉSOLU] Nom de fonction non reconnu
Chargement du navigateur depuis la fonction system ( )fonction mail
Fonction qui renvoit l'adresse du serveur webConfiguration touche + fonction aléatoire pic 18f452
Heritage Fonction abstraite, Probleme conteneur HeterogeneBiblio/Fonction C++ pour manipuler fichier (couper/coller) sous OSX
[RESOLU] [VB] Appel d'une fonction sur sélection d'une caseFonction indépendantes en java du DC
Plus de sujets relatifs à : Fonction dans une fonction et autres pbs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR