Fork me on GitHub






[NON RESOLU] affichage récursif du contenu d'un groupe d'elements pouvant contenir d'autres groupes.
Régulier
Inscrit: 20/03/2003 14:12
De Bruxelles
Messages: 319
Bonjour à tous,
j'ai vraiment besoin d'aide... si vous pouviez m'aider, ce serait vraiment super...

Je voudrais afficher le contenu d'une table (ZONE_ELEMENT). La table a 4 champs: ID, ZONENAME,NAME_ITEM,TYPE.
Dans ZONENAME, j'ai le nom d'un groupe; dans NAME_ITEM, le nom d'un ELEMENT, dans TYPE, je précise si l'élément est un groupe ( le champs contient alors Z) ou un élément (E).

ex: le groupe 1 contient OBJET1; le groupe 2 contient OBJET2 ET groupe 1.

Ma table contient alors:

ID| ZONENAME | NAME_ITEM | TYPE
--|-------------|-------------|-----
1 | GROUPE1 | OBJET1 | E
2 | GROUPE2 | GROUPE1 | Z
3 | GROUPE2 | OBJET2 | E

Qui pourrait m'aider? Le but est d'afficher tous les éléments contenus dans un groupe (et dans les groupes qu'il contient). Dans l'exemple, je dois afficher: OBJET1 OBJET2...

Si vous pouvez me sauver la vie... merci d'avance (help

Posté le : 17/10/2006 14:51

Edité par DjVPX sur 17/10/2006 15:14:04
Edité par DjVPX sur 17/10/2006 15:15:51
Edité par DjVPX sur 18/10/2006 12:30:48
Edité par DjVPX sur 18/10/2006 12:31:32
Edité par DjVPX sur 18/10/2006 12:32:20
Edité par DjVPX sur 01/11/2006 18:30:51

Merci íƒÂ  ceux qui permettent íƒÂ  Xoops d'avancer. Ils se reconnaîtront

http://www.4inch.be: 4INCH: for intelligent change!
Home Automation - Domotique


("DjVPX" a été rebaptisé "sm@
Partager Twitter Partagez cette article sur GG+
Re: [NON resolu] affichage récursif du contenu d'un groupe d'elements pouvant contenir d'autres grou
Régulier
Inscrit: 06/01/2006 23:55
Messages: 379
Tu as plusieurs façons de faire, soit par requete, soit par tableau.

Par requete c'est peut etre plus simple si deja dans ta table ca serait bien de simuler un niveau 0 pour les groupes disons de premier niveau. Par exemple le Groupe2 il faut reussir a voir qu'il n'a pas de pere reel au dessus de lui.
Donc des lignes ou il y aurait par exemple (tu peux mettre une valeur comme rien du tout mais bon c peut etre plus facile avec une valeur pour comprendre)
ID| ZONENAME | NAME_ITEM | TYPE
--|-------------|-------------|-----
1 | RACINE | GROUPE2 | Z
2 | RACINE | GROUPE5 | Z

function recup($groupe)
{
    
$where '';
    if (isset(
$groupe))
        
$where "WHERE Zonetable = '$groupe'";
    else
        
$where "WHERE Zonetable = 'RACINE'";
    
$sql 'SELECT * FROM nomtable '.$where.' ORDER BY name_item';
    
$result $this->db->query($sql); //Je considere que tu es dans un objet avec la db deja initiailisé
    
if (!$result) {
        return 
false;
    }
    while (
$myrow $this->db->fetchArray($result)) {
        if (
$myrow['type'] == 'Z'){
            
recup($myrow['name_item']);
        }
        else {
            
//Affichage de la ligne 
            // ce que tu veux faire pour ton affichage
        
}
        
    }
    return 
true;
}



Voilà cette solution va te generer pas mal de requete suivant le nombre de niveau, groupe que tu peux avoir.
Une autre soution serait de tout recuperer dans un tableau en 1 seul requete et de faire le meme traitement en gros
function initRecup($groupe)
{
    
$sql 'SELECT * FROM nomtable ORDER BY name_item';
    
$result $this->db->query($sql); //Je considere que tu es dans un objet avec la db deja initiailisé
    
if (!$result) {
        return 
false;
    }
    
$tableau = array();
    while (
$myrow $this->db->fetchArray($result)) {
        
$tableau[$myrow['name_item']] [] = $myrow;
    }
    
affichage($tableau);
    return 
true;
}

function 
affichage($tableau$groupe)
{
    if (isset(
$groupe)){
        foreach (
$tableau[$groupe] as $element)
        {
            if (
$element['type'] == 'Z'){
                
affichage($tableau$element['name_type']);
            }
            else
            {
                
//Affichage 
            
}
        }
    }
    else{
        
$tabinit $tableau;
        foreach (
$tableau as $key => $element)
        {
            if (
$element['type'] == 'Z'){
                
affichage($tableau$element['name_type']);
            }
            else
            {
                
//Affichage 
            
}
        }
    }
}



(Attention ceci est fait a main leve... j'ai pas teste )

Posté le : 17/10/2006 16:15
Partager Twitter Partagez cette article sur GG+
Re: [NON resolu] affichage récursif du contenu d'un groupe d'elements pouvant contenir d'autres grou
Régulier
Inscrit: 20/03/2003 14:12
De Bruxelles
Messages: 319
Bonjour,
Garrath, merci mille fois pour le temps passé pour me répondre...
voici le code mis dans ma page:
Citation :
<?php require_once('Connections/ConnectDB.php'); //connection à la DB
function recup($groupe)
{ $where = '';
if (isset($groupe))
$where = "WHERE ZONENAME = '$groupe'";
else
$where = "WHERE ZONENAME = 'RACINE'";
$sql = 'SELECT * FROM ZONE_ELEMENT '.$where.' ORDER BY NAME_ITEM';
$result = $this->db->query($sql); //Je considere que tu es dans un objet avec la db deja initiailisé
if (!$result) {
return false;
}
while ($myrow = $this->db->fetchArray($result)) {
if ($myrow['TYPE'] == 'Z'){
recup($myrow['NAME_ITEM']);
}
else {
//Affichage de la ligne
// ce que tu veux faire pour ton affichage
}

}
return true;
}
recup (3);
?>

Comme vous le verrez, j'ai modifié Zonetable par [b]ZONENAME (le champs du nom de groupe); je ne sais pas si c'est correct...
Et lorsque je lance la page, je reçois l'erreur:
Citation :
Fatal error: Call to a member function on a non-object
à la ligne qui contient Citation :
$result = $this->db->query($sql); //Je considere que tu es dans un objet avec la db deja initiailisé


Désolé... mais je débute avec php et mysql... boulet

Posté le : 18/10/2006 08:42

Merci íƒÂ  ceux qui permettent íƒÂ  Xoops d'avancer. Ils se reconnaîtront

http://www.4inch.be: 4INCH: for intelligent change!
Home Automation - Domotique


("DjVPX" a été rebaptisé "sm@
Partager Twitter Partagez cette article sur GG+
Re: [NON resolu] affichage récursif du contenu d'un groupe d'elements pouvant contenir d'autres grou
Régulier
Inscrit: 06/01/2006 23:55
Messages: 379
Citation :
<?php require_once('Connections/ConnectDB.php'); //connection à la DB

ah! tu utilises pas xoops? Ce ne sont pas les librairies de xoops la.

Citation :

Citation :
Fatal error: Call to a member function on a non-object
à la ligne qui contient Citation :
$result = $this->db->query($sql); //Je considere que tu es dans un objet avec la db deja initiailisé

Ben c'est l'explication est dans mon commentaire. Tu n'es a priori pas dans un objet ou e ntout cas pas dans un objet qui a initialise $this->db.
Donc forcement le code la ne marche pas.
Il faut que tu fasses à la place un truc du style :
$db =& Database::getInstance();
$result $db->query($sql);

(Attention cela marche que si tu es dans xoops)

Citation :
Désolé... mais je débute avec php et mysql... boulet

Pas de pb, il faut bien debuter un jour, mais bon le mieux serait de debuter par des trucs simples

Posté le : 18/10/2006 10:28
Partager Twitter Partagez cette article sur GG+
Re: [NON resolu] affichage récursif du contenu d'un groupe d'elements pouvant contenir d'autres grou
Régulier
Inscrit: 20/03/2003 14:12
De Bruxelles
Messages: 319
Citation :

ah! tu utilises pas xoops? Ce ne sont pas les librairies de xoops la.

Non pas encore, c'est pour mes tests, une fois que ca fonctionnera, je porterai sur xoops.

Citation :
Il faut que tu fasses à la place un truc du style :

$db =& Database::getInstance();
$result = $db->query($sql);

(Attention cela marche que si tu es dans xoops)

et donc, si je ne suis pas encore en xoops? C'est possible?

Posté le : 18/10/2006 11:01

Merci íƒÂ  ceux qui permettent íƒÂ  Xoops d'avancer. Ils se reconnaîtront

http://www.4inch.be: 4INCH: for intelligent change!
Home Automation - Domotique


("DjVPX" a été rebaptisé "sm@
Partager Twitter Partagez cette article sur GG+
Re: [NON resolu] affichage récursif du contenu d'un groupe d'elements pouvant contenir d'autres grou
Régulier
Inscrit: 06/01/2006 23:55
Messages: 379
donc tout ce qui est lie a la recup de donnee est faux ici si tu n'utilises pas xoops.

Il faut que tu te connectes a la base si c'est pas deja fait avec
mysql_connect() http://fr.php.net/manual/fr/function.mysql-connect.php
ensuite lancement de la requete
mysql_query() http://fr.php.net/manual/fr/function.mysql-query.php
et pour recuperer les donnees
mysql_fetc_array() http://fr.php.net/manual/fr/function.mysql-fetch-array.php

Ce qui donne dans le code un turc du style :
<?php require_once('Connections/ConnectDB.php'); //connection à la DB
function recup($groupe)
$where '';
if (isset(
$groupe))
$where "WHERE ZONENAME = '$groupe'";
else
$where "WHERE ZONENAME = 'RACINE'";
$sql 'SELECT * FROM ZONE_ELEMENT '.$where.' ORDER BY NAME_ITEM';
$link mysql_connect("localhost""mysql_user""mysql_password")
   or die(
"Impossible de se connecter : " mysql_error()); // A faire si pas deja connecte auparavant. Remplacer localhost par ton serveur, mysql_user par ton user de connection, et mysql_password par ton mot de passe.
$result mysql_query($sql); //Je considere que tu es dans un objet avec la db deja initiailisé
if (!$result) {
return 
false;
}
while (
$myrow mysql_fetch_Array($result)) {
if (
$myrow['TYPE'] == 'Z'){
recup($myrow['NAME_ITEM']);
}
else {
//Affichage de la ligne
// ce que tu veux faire pour ton affichage
}

}
return 
true;
}
?>

Posté le : 18/10/2006 11:17
Partager Twitter Partagez cette article sur GG+
affichage récursif du contenu d'un groupe d'elements pouvant contenir d'autres grou
Régulier
Inscrit: 20/03/2003 14:12
De Bruxelles
Messages: 319
Cela fonctionne, merci MILLE fois :tucartonnes:
C'est vraiment super sympa de ta part...

Posté le : 18/10/2006 12:30

Merci íƒÂ  ceux qui permettent íƒÂ  Xoops d'avancer. Ils se reconnaîtront

http://www.4inch.be: 4INCH: for intelligent change!
Home Automation - Domotique


("DjVPX" a été rebaptisé "sm@
Partager Twitter Partagez cette article sur GG+
[NON RESOLU] affichage récursif du contenu d'un groupe d'elements pouvant contenir d'autres grou
Régulier
Inscrit: 20/03/2003 14:12
De Bruxelles
Messages: 319
Bonjour,
finalement, j'ai trouvé un problème, lorsqu'un groupe contient plusieurs autres groupes, cela ne fonctionne pas.
Voici mon code:Citation :

function TableauElements($groupe) // Reçoit le nom d'un groupe et renvoie, dans la variable globale $tableauE, tous les éléments contenus dans ce groupe
{ global $tableauE;
$tableauE = array();
static $i=0;
$where = '';
if (isset($groupe))
$where = "WHERE ZONENAME = '$groupe'";
else
$where = "WHERE ZONENAME = 'RACINE'";
$sql = 'SELECT * FROM ZONE_ELEMENT '.$where.' ORDER BY NAME_ITEM';
$result = mysql_query($sql);
if (!$result)
{
return false;
}
while ($myrow = mysql_fetch_Array($result)) {
if ($myrow['TYPE'] == 'Z'){
TableauElements($myrow['NAME_ITEM']);
}
else {
$tableauE[$i]= $myrow['NAME_ITEM']; //on met le nom de l'élément dans le tableau
$i++;
}

}
sort ($tableauE); //trie les éléments par ordre alphabétique
return true;
}

?>

Voici le contenu de ma table
Citation :

ID | ZONENAME | NAME_ITEM | TYPE
8 | 3 | 2 | Z
6 | 2 | 1 | Z
79 | 1 | ELEMENT1 | E
83 | 3 | 4 | Z
76 | 4 | ELEMENT2 | E

à lire comme ceci:
Citation :

le groupe 3 contient le groupe 2
Le groupe 2 contient le groupe 1
Le groupe 1 contient l'élément ELEMENT1
Le groupe 3 contient le groupe 4
LE groupe 4 contient l'élément ELEMENT2

Donc le groupe 3 contient le groupe 2 (et son contenu) et le groupe 4.
Mais lorsque j'appelle la fonction avec le groupe 3 en paramètre, je ne reçois que le contenu de la zone 4 càd ELEMENT2.
Si quelqu'un pouvait me dire comment modifier le code afin que tous les groupes soient pris en compte, cela serait super sympa! (help

Posté le : 01/11/2006 18:29

Merci íƒÂ  ceux qui permettent íƒÂ  Xoops d'avancer. Ils se reconnaîtront

http://www.4inch.be: 4INCH: for intelligent change!
Home Automation - Domotique


("DjVPX" a été rebaptisé "sm@
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

213 Personne(s) en ligne (188 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 213 | Plus ...