begin process at 2012 02 15 20:16:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

Fonction récursive et enregistrement ds tableau[ ] :-/ ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Fonction récursive et enregistrement ds tableau[ ] :-/ ?

dimanche 9 septembre 2007 à 22:13:02 | Fonction récursive et enregistrement ds tableau[ ] :-/ ?

yazerty55

Bonjour,

J'ai une table mysql avec ceci :

[code]
category_id - category - parent_num
1 - Catégorie 1 - 0
2 - Catégorie 2 - 5
3 - Catégorie 3 - 2
4 - Catégorie 4 - 3
5 - Catégorie 5 - 3
...[/code]


Il s'agit d'un système de catégorie à plusieurs niveaux. Une catégorie peut en contenir une autre (ceci à l'infini). Si je suis dans la catégorie 5 le fil d'ariane peut ainsi donner :

Index > Catégorie 3 > Catégorie 5 >Catégorie 2

Je souhaite donc faire un fil d'ariane. J'ai abouti à cette fonction :

[code]// Fil d'Ariane
$category_id = $db_data['category_id'];
echo $category_id; // affiche bien l'id de la catégorie en cours

function getTopParent($pi_current, $pa_data)
        {

            // sql + query
            $sSql = "SELECT parent_num, category FROM categories WHERE category_id=$pi_current";
            $req = mysql_query($sSql) or die(mysql_error());

            if (mysql_num_rows($req)>0)
            {
                $aData = mysql_fetch_assoc($req);
                $pa_data = array($aData);
                getTopParent($aData['parent_num'], $pa_data);
            }
        }

        // Appel de la function
        getTopParent($category_id, $pa_data) ;
       
        // Reverse l'ordre des resultats pour avoir en premier le root
        $aFinalData = array_reverse($pa_data) ;

// pour parcourir ce tableau, utilisons la boucle foreach
foreach($individu as $cle=>$valeur)
    {
    echo $cle.' : '.$valeur.'<br>';
    } [/code]

Mais cela me sort ce message d'erreur :

[quote]Warning: array_reverse() [function.array-reverse]: The argument should be an array[/quote]

pour la ligne correspondant à :

[code]$aFinalData = array_reverse($pa_data) ;[/code]

Le problème semble venir de (la mauvaise) insertion des données dans le tableau, car lorsque je fais seulement:

[code]function getTopParent($pi_current, $pa_data)
        {

            // sql + query
            $sSql = "SELECT parent_num, category FROM categories WHERE category_id=$pi_current";
            $req = mysql_query($sSql) or die(mysql_error());

            if (mysql_num_rows($req)>0)
            {
                $aData = mysql_fetch_assoc($req);
                echo $aData['category'];
                getTopParent($aData['parent_num'], $pa_data);
            }
        }


        // Appel de la function
        getTopParent($category_id, $pa_data) ;[/code]

Cela m'affiche bien le nom de mes catégories, mais dans l'ordre inverse d'un fil d'ariane (à gauche il y a la catégorie la plus basse dans la hiérarchie et à droite la plus haute, alors que ça devrait bien sûr être l'inverse pour un fil d'ariane...). D'où l'idée de stocker les données dans un tableau pour ensuite inverser le tableau et afficher les données (si vous avez mieux je suis tout autant preneur :) ).

J'ai cherché avec mon ami Google les cours présentant la mise en tableau de données, mais je n'ai pas réussi à comprendre où était l'erreur dans mon code :-/... Je suppose pourtant que la bêtise est évidente :- ?

Pourriez-vous m'aider s'il vous plait :- ?
dimanche 9 septembre 2007 à 22:51:40 | Re : Fonction récursive et enregistrement ds tableau[ ] :-/ ?

coockiesch

Salut!
 Il y a qqch que je comprend pas: mysql_fetch_assoc te renvoie un tableau... Pourquoi créer un autre tableau (à un seul indice) contenant ce tableau?

Ne pourrais tu pas juste faire:
$pa_data = mysql_fetch_assoc($req);
getTopParent($aData['parent_num'], $pa_data);

@++

R@f

La boîte à bouts de codes
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
dimanche 9 septembre 2007 à 22:59:49 | Re : Fonction récursive et enregistrement ds tableau[ ] :-/ ?

yazerty55

Bonsoir,

Merci pour ta suggestion coockiesch !
Malheureusement si je fais :

            if (mysql_num_rows($req)>0)
            {
                $aData = mysql_fetch_array($req);
                $pa_data = mysql_fetch_assoc($req);
                getTopParent($aData['parent_num'], $pa_data);
            }

Ca me renvoit toujours l'erreur "Warning: array_reverse() [function.array-reverse]: The argument should be an array" sur la ligne "$aFinalData = array_reverse($pa_data) ; " :-(...
dimanche 9 septembre 2007 à 23:06:02 | Re : Fonction récursive et enregistrement ds tableau[ ] :-/ ?

coockiesch

Je comprend pas: mysql_fetch_assoc te renvoie un tableau, pouquoi tu veux absolument le bidouiller?
$pa_data = mysql_fetch_assoc($req);
getTopParent($pa_data, $pa_data);

Pcq, si tu fais:
getTopParent($aData['parent_num'], $pa_data);
$aData est un tableau, mais pas $aData['parent_num']....

@++

R@f

La boîte à bouts de codes
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
dimanche 9 septembre 2007 à 23:16:00 | Re : Fonction récursive et enregistrement ds tableau[ ] :-/ ?

yazerty55

Je ne suis pas sûr de comprendre quelle forme finale tu suggères je crois (désolé :-/). Pourrais-tu remettre la partie du

if (mysql_num_rows($req)>0)
            {
            }

telle que tu me suggère afin que j'y vois plus clair dans la démarche s'il te plait :- ?
dimanche 9 septembre 2007 à 23:19:19 | Re : Fonction récursive et enregistrement ds tableau[ ] :-/ ?

coockiesch

Ca?
if (mysql_num_rows($req)>0)
      {
                $aData = mysql_fetch_assoc($req);
                getTopParent($aData['parent_num'], $aData);
            }

@++

R@f

La boîte à bouts de codes
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
dimanche 9 septembre 2007 à 23:32:05 | Re : Fonction récursive et enregistrement ds tableau[ ] :-/ ?

yazerty55

Merci pour ton aide !

Mmm' alors non ça ne marche pas non plus quand je fais ça :-( :

------------------
// Fil d'Ariane
$category_id = $db_data['category_id'];
echo $category_id; // affiche bien l'id de la catégorie en cours
 
function getTopParent($pi_current, $pa_data)
        {
 
            // sql + query
            $sSql = "SELECT parent_num, category FROM categories WHERE category_id=$pi_current";
            $req = mysql_query($sSql) or die(mysql_error());
 
            if (mysql_num_rows($req)>0)
            {
                $aData = mysql_fetch_assoc($req);
                echo $aData['parent_num']; // Affiche bien les id des catégories parentes de celles qui doivent s'afficher
                getTopParent($aData['parent_num'], $aData);
            }
        }
 
        // Appel de la function
        getTopParent($category_id, $aData) ;
      
        // Reverse l'ordre des resultats pour avoir en premier le root
        $aFinalData = array_reverse($aData) ;
 
// pour parcourir ce tableau, utilisons la boucle foreach
foreach($individu as $cle=>$valeur)
    {
    echo $cle.' : '.$valeur.'<br>';
    }
------------------
(j'ai mis $aData à la place de pa_Data du coup pour la suite du code).

ps : par contre je crois que je vois ce que tu m'explique avec le tableau qu'il ne sert à rien de recréer puisque mysql_fetch_assoc en crée un lui-même.
dimanche 9 septembre 2007 à 23:33:25 | Re : Fonction récursive et enregistrement ds tableau[ ] :-/ ?

coockiesch

J'y réfléchis et je te redis demain, si c'est pas réglé par qlqn d'autre d'ici là!...

@++

R@f

La boîte à bouts de codes
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
dimanche 9 septembre 2007 à 23:36:47 | Re : Fonction récursive et enregistrement ds tableau[ ] :-/ ?

yazerty55

Merci, et bonne nuit ;-) !
lundi 10 septembre 2007 à 06:33:25 | Re : Fonction récursive et enregistrement ds tableau[ ] :-/ ?

coucou747

Administrateur CodeS-SourceS
Salut

ta fonction ne renvoie rien... faut alors passer ce param par reference, ce qui implique de le declarer plus tot...

function getTopParent($pi_current, &$pa_data)
        {
 
            // sql + query
            $sSql = "SELECT parent_num, category FROM categories WHERE category_id=$pi_current";
            $req = mysql_query($sSql) or die(mysql_error());
 
            if (mysql_num_rows($req)>0)
            {
                $aData = mysql_fetch_assoc($req);
                $pa_data[]=$aData['parent_num'];
                getTopParent($aData['parent_num'], $pa_data);
            }
        }

tu l'appelles en faisant :

$aData=array();
        // Appel de la function
        getTopParent($category_id, $aData) ;
      
        // Reverse l'ordre des resultats pour avoir en premier le root
        $aFinalData = array_reverse($aData) ;
 
// pour parcourir ce tableau, utilisons la boucle foreach
foreach($individu as $cle=>$valeur)
    {
    echo $cle.' : '.$valeur.'<br>';
    }

sinon, si tu utilises mysql5, tu peux peut-etre utiliser une fonction sql...

CREATE FUNCTION menu_deroule(id INT UNSIGNED)
RETURNS TEXT DETERMINISTIC
BEGIN
  DECLARE t TEXT;
  DECLARE r TEXT;
  DECLARE i INT UNSIGNED;
  SET i = id;
  SET t = "";
  SET r = "";
  WHILE i!=0 AND ISNULL(i)=0
  DO
    SELECT `child_of`, `titre` INTO i, t FROM `menu` WHERE menu.id=i;
    SET r = CONCAT(t, "/", r);
    IF i = id THEN
      SET i=0;
    END IF;
  END WHILE;
  RETURN r;
END;

pour ma fonction, j'avais une table :
id           child_of               titre
et je recuperais les titres separes par des /


une recherche sur exalead vous aurait peut-etre evite de poser cette question
In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy

1 2

Cette discussion est classée dans : code, mysql, data, catégorie, category


Répondre à ce message

Sujets en rapport avec ce message

Problème de formulaire dynamique [ par labouse ] Bonjour,Bon je vais essayer d'être clair: j'ai une table mysql avec nom prénom et un code service je fais une requete pour afficher tout le monde pour Problemes d'affichage avec une boucle tanque [ par pekplusultra ] Bonjour,Je souhaiterais afficher les resultats de ma table par liste comme ci dessous:Nom      Sujet      Envoyeur ...Mon code fo Mettre des commentaires à ses news, probleme de code [ par sebing ] Bonsoir, J'essaye d'afficher les commentaires de mes news. J'ai deux tables: news et commentaires_news. Elle peuvent etre relié par id(news) et id_ne mdp PHP [ par bibidu69 ] Bonjour, j'ai un problème de mot de passe dans mon code PHP le voici : [code=php]<?php // on teste si le visiteur a soumis le formulaire de connexion Sortir Infos table MySQL [ par spacedelta ] Bonjour, Cela fait deux jours que j'essaie de trouver la réponse à mon problème. [u]Voici mon projet [/u]: J'utilise Joomla! et Ajaxchat (pour ceux q probleme apostrophre mysql_real_escape_string [ par ju0123456789 ] Bonjour, J'ai un formulaire de contact en PHP, qui enregistre dont le commentaire de l'utilisateur. Or la requete SQL foire quand on y ajoute des apo Authentification php [ par rems675 ] Bonsoir, J'ai un énorme problème et je comprend pas, ou plus du tout, j'ai tenté des millier de chose mais rien à faire. Cela concerne une authentific serveur [ par eva4 ] Bonjour, Je viens de creer un petit serveur local. Apache, mysql, phpmyadmin etc.... quand je tape dans mon navigateur localhost/document/zezette.ph Multiplication dans une requête MySQL. Problème [ par arbilus ] Bonjour, je viens d'obtenir un script sympas pour avoir un jeux de poker. Seulement je me trouve face à un problème, en prenant large voici le code qu MYSQL vers EXCEL [ par quinton75 ] Je souhaite exporter ma table sql vers excel via une requete php avec le code suivant mais ça ne marche pas.. Je souhaite en fait générer le fichier


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,794 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales