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

  FORUM HardWare.fr
  Programmation
  PHP

  classe recursive, erreur de logique introuvable... :( [résolu ^^']

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

classe recursive, erreur de logique introuvable... :( [résolu ^^']

n°1083420
Gat$
http://www.wowteamfinder.com
Posté le 14-05-2005 à 18:38:52  profilanswer
 

Salut tlm
 
Bon ca fait 2 heures que je cherche je trouve pas.
J'ai pas encore trop l'habitude des fonctions récursives, la je bloque. C'est surement une connerie mais bon.
 
Voici mon code :  

Code :
  1. <?php
  2. class TypeDroit {
  3. var $id=0;
  4. var $intitule="Racine";
  5. var $parent=NULL;
  6. var $fils=NULL;
  7. var $racine=false;
  8. var $niveau=0;
  9. // Constructeur
  10. function TypeDroit($tab=NULL, $cur_id=0, $niv=0) {
  11.  global $db_link;
  12.  // Instance racine -> on construit l'arbre
  13.  if(is_null($tab)) {
  14.   $tab=sql_query($db_link, "SELECT * FROM types_droits ORDER BY id_type_droit_parent DESC;" );
  15.   $this->racine=true;
  16.  }
  17.  // Recherche des données pour l'ID recu
  18.  if($cur_id!=0) {
  19.   for($i=0; $i<count($tab); $i++) {
  20.    if($tab[$i]['id_type_droit']==$cur_id) {
  21.     $this->id=$tab[$i]['id_type_droit'];
  22.     $this->parent=$tab[$i]['id_type_droit_parent'];
  23.     $this->intitule=$tab[$i]['intitule'];
  24.     $this->niveau=$niv+1;
  25.     break;
  26.    }
  27.   }
  28.  }
  29.  //echo str_repeat('&nbsp;', 8 * $this->niveau).$this->intitule.'--><br>';    
  30.  // On sauve les fils dans le tableau des fils
  31.  if($this->racine) {
  32.   // On recherche les enregistrements qui n'ont pas de parent (NULL)
  33.   for($i=0; $i<count($tab); $i++) {
  34.    if(is_null($tab[$i]['id_type_droit_parent'])) {
  35.     $this->fils[]=new TypeDroit($tab, $tab[$i]['id_type_droit'], $this->niveau);
  36.    }
  37.   }
  38.  }
  39.  else {
  40.   // On recherche les enregistrement qui ont pour parent l'ID en cours
  41.   for($i=0; $i<count($tab); $i++) {
  42.    if($tab[$i]['id_type_droit_parent']==$this->id) {
  43.     $this->fils[]=new TypeDroit($tab, $tab[$i]['id_type_droit'], $this->niveau);
  44.    }
  45.   }
  46.  }
  47. } // End constructeur
  48. function AfficheArbre() {
  49.  echo str_repeat('&nbsp;', 8 * $this->niveau).$this->intitule.'--><br>';
  50.  for($i=0; $i<count($this->fils)-1; $i++) {
  51.   $this->fils[$i]->AfficheArbre();
  52.  }
  53. }
  54. } // End class
  55. ?>


 
Il s'agit d'une classe qui recherche les differents droits que peuvent avoir des utilisateurs  pour mon application dans une table. Jusque la pas de prob. Mais on s'en fout un peu.
 
J'ai créé une fonction pour afficher le contenu des classes parents/filles etc...  
et en fait ca m'affiche qu'un objet sur 2. Et d'apres mes test, c'est pas la fonction d'affichage qui merde, mais apparament il n'enregistre que 1 objet sur 2. Pour une raison que j'ai beau chercher je ne trouve pas.
 
Voila ce que ca donne en appelant AfficherArbre() comme ceci :  
 

Code :
  1. <?php
  2.     $test=new TypeDroit();
  3.     $test->AfficheArbre();
  4. ?>


 
 
Ca donne ceci a l'écran :  
 

Racine-->
        gestion_membres-->
                insert-->
                list-->
                abonnements-->
                        paiements-->
                                list-->
                                insert-->
                        list-->
                        delete-->
                update-->
        gestion_configuration-->
        gestion_cours-->
                types_abonnements-->
                        delete-->
                        insert-->
                horaire-->
                delete-->
                update-->
                list-->


 
Ca parrait bon mais ca ne l'est pas car il manque un objet sur 2. On devrait voir ceci :  
 

Racine-->
        gestion_membres-->
                insert-->
                list-->
                abonnements-->
                        paiements-->
                                list-->
                                insert-->
                                delete-->
                        list-->
                        delete-->
                        insert-->
                update-->
                delete-->
        gestion_configuration-->
        gestion_cours-->
                types_abonnements-->
                        delete-->
                        insert-->
                        update-->
                horaire-->
                delete-->
                update-->
                list-->
                insert-->
        gestion_stocks-->
                achats-->
                        cancel_order-->
                        mark_as_received-->
                        mark_as_paid-->
                        order-->
                fournisseurs-->
                        list-->
                        delete-->
                        update-->
                        insert-->


 
Ce qu'il y a c'est que ce qui est affiché ci-dessus (l'affichage correct) je parviens a l'obtenir, en décommentant la ligne n° 35 et en commentant la ligne 58 ! Ce qui est absolument absurde à mes yeux! J'ai beau chercher l'erreur. Je trouve pas :(
 
Aidez moi svp !!  :cry:  
 
Merci d'avance


Message édité par Gat$ le 14-05-2005 à 18:54:15
mood
Publicité
Posté le 14-05-2005 à 18:38:52  profilanswer
 

n°1083432
Gat$
http://www.wowteamfinder.com
Posté le 14-05-2005 à 18:44:22  profilanswer
 

Heu non je suis un boulet !!!!!! Je viens de  trouver, j'ai mis :
 
for($i=0; $i<count($this->fils)-1; $i++) {
 
a la place de  
 
for($i=0; $i<count($this->fils); $i++) {
 
pour une raison obscure  :whistle:  
 
Bon je vais me flageller.
 
merci quand meme  [:gat$]


Message édité par Gat$ le 14-05-2005 à 18:44:59

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

  classe recursive, erreur de logique introuvable... :( [résolu ^^']

 

Sujets relatifs
[Resolu] Bug de lecture de fichier : encodageErreur de lecture dans une IHM !!
[Résolu] Récupérer la valeur d'une variable[resolu][dblookup] afficher une valuer par programmation
[Résolu] Identifier une table à partir de la valeur de sa clé primaire[Résolu] [Cewolf] pb affichage, échelle sur l'axe des abscisses ?
Comment debugger "trop peu de parametres" [Resolu][RESOLU] - IIS - Serveur indisponible
Procedure stockée Oracle erreur 
Plus de sujets relatifs à : classe recursive, erreur de logique introuvable... :( [résolu ^^']


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