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 :
- <?php
- class TypeDroit {
- var $id=0;
- var $intitule="Racine";
- var $parent=NULL;
- var $fils=NULL;
- var $racine=false;
- var $niveau=0;
- // Constructeur
- function TypeDroit($tab=NULL, $cur_id=0, $niv=0) {
- global $db_link;
- // Instance racine -> on construit l'arbre
- if(is_null($tab)) {
- $tab=sql_query($db_link, "SELECT * FROM types_droits ORDER BY id_type_droit_parent DESC;" );
- $this->racine=true;
- }
- // Recherche des données pour l'ID recu
- if($cur_id!=0) {
- for($i=0; $i<count($tab); $i++) {
- if($tab[$i]['id_type_droit']==$cur_id) {
- $this->id=$tab[$i]['id_type_droit'];
- $this->parent=$tab[$i]['id_type_droit_parent'];
- $this->intitule=$tab[$i]['intitule'];
- $this->niveau=$niv+1;
- break;
- }
- }
- }
- //echo str_repeat(' ', 8 * $this->niveau).$this->intitule.'--><br>';
- // On sauve les fils dans le tableau des fils
- if($this->racine) {
- // On recherche les enregistrements qui n'ont pas de parent (NULL)
- for($i=0; $i<count($tab); $i++) {
- if(is_null($tab[$i]['id_type_droit_parent'])) {
- $this->fils[]=new TypeDroit($tab, $tab[$i]['id_type_droit'], $this->niveau);
- }
- }
- }
- else {
- // On recherche les enregistrement qui ont pour parent l'ID en cours
- for($i=0; $i<count($tab); $i++) {
- if($tab[$i]['id_type_droit_parent']==$this->id) {
- $this->fils[]=new TypeDroit($tab, $tab[$i]['id_type_droit'], $this->niveau);
- }
- }
- }
- } // End constructeur
- function AfficheArbre() {
- echo str_repeat(' ', 8 * $this->niveau).$this->intitule.'--><br>';
- for($i=0; $i<count($this->fils)-1; $i++) {
- $this->fils[$i]->AfficheArbre();
- }
- }
- } // End class
- ?>
|
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 :
- <?php
- $test=new TypeDroit();
- $test->AfficheArbre();
- ?>
|
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 !!
Merci d'avance
Message édité par Gat$ le 14-05-2005 à 18:54:15