Menu dynamique + bdd

Signaler
Messages postés
346
Date d'inscription
jeudi 7 avril 2005
Statut
Membre
Dernière intervention
26 mars 2012
-
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
Bonjour a tous

je cherche a faire un menu avec sous menu dynamique

les menu et sous menu irons cherché leurs nom dans une table

voici ma table

categorie1
-id
-cat1
categorie2
-id
-cat1
-cat2
categorie3
...


Merci de m'orienter pour cela car je suis un peu perdu

19 réponses

Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Salut...

Tu met un champs pour déterminer si ton lien est menu ou sousmenu et s'il est sous menu tu l'assigne (avec une variable provenant d'un autre champs et qui est ignorée si c'est un menu) à un menu via un champs id... .. .

@ tchaOo°
Messages postés
346
Date d'inscription
jeudi 7 avril 2005
Statut
Membre
Dernière intervention
26 mars 2012

ok merci je vai essayer de develloper ca on verra bien ce que ca donne
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Tu récupère le résultat d'une requête (mysql_query) à la bdd et tu lui fais un fetch_array pour ordonner la requete en tableau... ensuite on peut imaginer quelque chose du genre...

foreach ($this->Menus as $key) {
$this->assignMenu($key, $value);
}
Messages postés
346
Date d'inscription
jeudi 7 avril 2005
Statut
Membre
Dernière intervention
26 mars 2012

je comprend pas trop le 2ieme message

peut tu develloper stp
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

raaa merde encore la touche enter... atta je te remet ça... .. .

Imaginons que tu récupère le résultat d'une requête (mysql_query) à la bdd et tu lui fais un fetch_array (ici dans $ftchresult) pour ordonner la requete en tableau... ensuite on peut imaginer quelque chose du genre...

en imaginant que ta table contient les champs 'ismenu' (1 si c'est un menu 0 si c'est un sousmenu) 'menuref' pour savoir à l'id de quel menu est rattaché le sousmenu et 'nom' , 'lien, 'id'... .. .

$Menus = '';

foreach ($ftchresult as $key => $link) {
if(!empty($ftchresult[$key]['ismenu'])){
$Menus[$ftchresult[$key]['id']]['lien'] = $ftchresult[$key]['lien'];
$Menus[$ftchresult[$key]['id']]['nom'] = $ftchresult[$key]['nom'];
} else {
$Menus[$ftchresult[$key]['menuref']]['sousmenu'][] = array(
'lien' => $ftchresult[$key]['lien'],
'nom' => $ftchresult[$key]['nom']
);
}

}



ce qui te donnera un tableau à peut pret comme ça...

Array
(
[1] => Array
(
[lien] =>
[nom] => plop
[sousmenu] => Array
(
[0] => Array
(
[lien] => http:...
[nom] => hello
)

[1] => Array
(
[lien] => http:...
[nom] => hello
)

)

)

[3] => Array
(
[sousmenu] => Array
(
[0] => Array
(
[lien] =>
[nom] => zioupla
)

[1] => Array
(
[lien] => http:...
[nom] => hello
)

)

[lien] => http:...
[nom] => pwet
)

)
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Là t'as la moitié du travail de maché... t'as plus qu'a géré l'organisation pour entrer les bonnes données dans ta bdd (surtout l'id du menu pour les sous menu)... .. .

Désolé pour le message d'avant c'était un extrait d'un class qui fait la même chose (mais qui n'est pas exploitable tel quel car héritant d'autres class spécifiques)... .. .

on courage et bonne continuation... .. .

@ tchaOo°
Messages postés
346
Date d'inscription
jeudi 7 avril 2005
Statut
Membre
Dernière intervention
26 mars 2012

Je te remercie beaucoup je ferai ca ce soir surement ( du taf, du taf et encore du taf )

je tien au courant * et encore merci
Messages postés
346
Date d'inscription
jeudi 7 avril 2005
Statut
Membre
Dernière intervention
26 mars 2012

Slt

bon j'ai essayer d'analyser et de comprendre ton bout de code est a vrai dire j'ai vraiment du mal a comprendre

parce quand on fait
foreach( $ftchresult as $key => $link)

le $key c'est la ou on met le resultat
mais $link il vient d'ou ?

la suite aussi j'ai du mal
peut etre serai tu m'aider ??
Messages postés
346
Date d'inscription
jeudi 7 avril 2005
Statut
Membre
Dernière intervention
26 mars 2012

en faite j'ai peut etre mal exprimé ma bdd
je te la remet au cas ou ...

catégorie 1
-id
Messages postés
346
Date d'inscription
jeudi 7 avril 2005
Statut
Membre
Dernière intervention
26 mars 2012

en faite j'ai peut etre mal exprimé ma bdd
je te la remet au cas ou ...

catégorie1
-id
-nom_categorie1

sous_categorie1
-id
-nom_categorie1
-nom_sous_categorie1
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Dans le foreach $key correspond au nom de l'entrée et $link à sa valeur dans le tableau

ex : array([nom] => zioupla)
$key $value

Par contre j'ais pas du tout compris ce que tu m'a mis là... c'est quoi dans ta bdd les nom carégorie, etc... la structure de ta table... .. ?

@ tchaOo°
Messages postés
346
Date d'inscription
jeudi 7 avril 2005
Statut
Membre
Dernière intervention
26 mars 2012

ok merci
voila pour les tables

table1
-champ id
-chanmp cat1

table2
-champ id
-champ cat1 // pour savoir d'ou il vient
-champ cat2


voilivoilou
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Pourquoi faire plusieurs tables... si tu suit mon exemple une seule table suffit...

champ id [int(4) auto_increment] (l'id du lien)
champ nom [varchar(30 ou 40)] (le nom du lien)
champ url [varchar(50 ou +)] (l'url du lien)
champ ismenu [tinyint(1)] (1 = menu, 0 = sous menu)
champ menuref [tinyint(1)] (pour les sous menu avec l'id du menu associé)

@ tchaOo°
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

le menuref sera plutot en int(4) enfin avec la même taille et type que le l'id... .. .

@ tchaOo°
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
int(4) ?
medium_int(4) oui :p
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

mediumint et pas medium_int puisque tu cherche la tite bête... .. . :oP ;o)

En effet int, qui pour mon dernier post est une erreur je pensait à tinyint, sera peut être un peu gros... tinyint ou smallint sera amplement suffisant... moi je mettrais smallint comme ça ça laisse de la marge... .. .

@ tchaOo°
Messages postés
346
Date d'inscription
jeudi 7 avril 2005
Statut
Membre
Dernière intervention
26 mars 2012

help me please

je suis desolé mais a vrai dire je comprend rien
peut tout m'expliquer ce que tu faite sur ces quelques ligne
je remercie beaucoup d'avance



if(!empty($ftchresult[$key]['ismenu']))
{
$Menus[$ftchresult[$key]['id']]['lien'] = $ftchresult[$key]['lien'];
$Menus[$ftchresult[$key]['id']]['nom'] = $ftchresult[$key]['nom'];
echo $Menus[$ftchresult[$key]]['nom'];
}
else
{
$Menus[$ftchresult[$key]['menuref']]['sousmenu'][] =
array('lien' => $ftchresult[$key]['lien'],'nom' => $ftchresult[$key]['nom']);
}
Messages postés
346
Date d'inscription
jeudi 7 avril 2005
Statut
Membre
Dernière intervention
26 mars 2012

quand je fait ca


echo "".$key."-->".$link."

";

avant de faire le if
coila ce qu'il m'affiche

1-->sous_cat1
nom-->sous_cat1
2-->index.php36
url-->index.php36
3-->0
ismenu-->0
4-->1
menuref-->1

en faite il m'a pris l'enrigstement n°2 mais pas les autres je comprend pas
et il me les affiche en double
je capte zoued
aidez moi svp !!! :-(
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Euh tu sais gérer une requete sql ? tu sais ce que c'est qu'une boucle ?

Parce que c'est bien de vouloir faire un menu dynamique géré avec php mais il faudrait peut être apprendre les base de php d'abord... hein... .. . :o)

Bon reprenons depuis le début... .. .

// on se connect à la bdd puis on selectione la table
$connect = mysql_connect('localhost', 'root', '') or die('probleme de connection : '.mysql_error());
mysql_select_db('test',$connect) or die('probleme de selection : '.mysql_error());
// on récupère toutes les entrées de la tables
$qresult = mysql_query('SELECT id,nom,url,isMenu,menuRef FROM text_menu',$connect) or die('probleme de requete : '.mysql_error());
//on ferme la connection
mysql_close($connect);

//on initialise notre variable Menu
$Menus = '';

// por chaque entré
while ($row = mysql_fetch_assoc($qresult)) {
// si le champs menu n'est pas à 0 (donc il est à 1)
// cela veut dire que le lien est un menu
if(!empty($row['isMenu'])){
// on assigne donc le nom et le lien
$Menus[$row['id']]['url'] = $row['url'];
$Menus[$row['id']]['nom'] = $row['nom'];
// sinon c'est un sous menu
} else {
// on assigne donc le nom et le lien du sousmenu
// dans la clé sousmenu du menu correspondantque l'on retrouve
// grace à menuRef qui correspond à l'id du menu associé
$Menus[$row['menuRef']]['sousmenu'][] = array(
'url' => $row['url'],
'nom' => $row['nom']
);
}
}

Voili voilou... .. .

@ tchaOo°