Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/11/2011, 11h36   #1
Membre confirmé
 
Inscription : octobre 2006
Messages : 340
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 340
Points : 221
Points : 221
Envoyer un message via MSN à ideal23
Par défaut Menu hierarchique php mysql javascript

bonjour,
je souhaite créer , un menu déroulant vertical genre accordéon mais couplé avec une base de données.
j'ai téléchargé le menu déroulant vertical2 dans la galerie
http://css.developpez.com/galerie/?p...-verticaux#MV2
Pour cela, j'ai structuré ma base de données et réalisé la table suivante:
http://creuselimousin.free.fr/table.jpg
voici le code html pour incorporer mon script php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<div id="menu">
 
  <div class="menu" id="menu1" onclick="afficheMenu(this)">
		<a href="#">Menu 1</a>
	</div>    
 
	<div id="sousmenu1" style="display:none">
		<div class="sousmenu">
			<a href="#">Sous-Menu 1.1</a>
		</div>
		<div class="sousmenu">
			<a href="#">Sous-Menu 1.2</a>
		</div>
		<div class="sousmenu">
			<a href="#">Sous-Menu 1.3</a>
		</div>
		<div class="sousmenu">
			<a href="#">Sous-Menu 1.4</a>
		</div>
	</div>
 
	<div class="menu" id="menu2" onclick="afficheMenu(this)">
		<a href="#">Menu 2</a>
	</div>
	<div id="sousmenu2" style="display:none">
		<div class="sousmenu">
			<a href="#">Sous-Menu 2.1</a>
		</div>
		<div class="sousmenu">
			<a href="#">Sous-Menu 2.2</a>
		</div>
		<div class="sousmenu">
			<a href="#">Sous-Menu 2.3</a>
		</div>
	</div>
 
	<div class="menu" id="menu3" onclick="afficheMenu(this)">
		<a href="#">Menu 3</a>
	</div>
 
	<div class="menu" id="menu4" onclick="afficheMenu(this)">
		<a href="#">Menu 4</a>
	</div>
	<div id="sousmenu4" style="display:none">
		<div class="sousmenu">
			<a href="#" >Sous-Menu 4.1</a>
		</div>
		<div class="sousmenu">
			<a href="#">Sous-Menu 4.2</a>
		</div>
		<div class="sousmenu">
			<a href="#">Sous-Menu 4.3</a>
		</div>
		<div class="sousmenu">
			<a href="#">Sous-Menu 4.4</a>
		</div>
		<div class="sousmenu">
			<a href="#">Sous-Menu 4.5</a>
		</div>
	</div>
</div>
et le script php pour afficher les menus et sous menus correspondants:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 <?php
    mysql_select_db($database_dream, $dream);
    $query = 'SELECT item_menu, id_menu FROM menu WHERE id_menu_dir is NULL';
    $data = mysql_query($query) or die(mysql_error());
    echo '<div id="menu">';
    $i = 1;
    while($row = mysql_fetch_assoc($data)) {
    echo '<div class="menu" id="menu' . $i++ . '" onclick="afficheMenu(this);"><a href="#">' . $row['item_menu'] . '</a></div>';
    $subQuery = 'SELECT item_menu FROM menu WHERE id_menu = ' . $row['id_menu'];
    $subData = mysql_query($subQuery) or die(mysql_error());
    echo '<div id="sousmenu1" style="display:none;">';
    $j = 1;
    while ($subRow = mysql_fetch_assoc($subData)) {
    echo '<div class="sousmenu"><a href="#">' . $subRow['item_menu'] . '</a></div>';
    }
    echo '</div>';
    }
 
    echo '</div>';
    ?>
les menus principaux apparaissent , mais aucuns sous menus.
Avez-vous une idée de l'erreur?
Merci de m'aider
ideal23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 18h13   #2
Membre actif
 
Inscription : février 2009
Messages : 150
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 150
Points : 199
Points : 199
Code :
<div id="sousmenu1" style="display:none;">
Sûr qu'il ne sont pas là du tout ? Dans la source html ?

Edit: En fait, tu as une erreur dans $subQuery, tu as sélectionné le mauvais id pour ta "jointure" des sous menus.
nextdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 19h39   #3
Membre confirmé
 
Inscription : octobre 2006
Messages : 340
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 340
Points : 221
Points : 221
Envoyer un message via MSN à ideal23
et alors la solution d'après toi?
j'ai modifié avec:
Code :
   $subQuery = 'SELECT item_menu FROM menu WHERE id_menu_dir =' . $row['id_menu'];
j'ai bien le menu principal de ordinateurs portable le premier menu avec les sous menus , mais pas les autres?
ideal23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 20h36   #4
Membre actif
 
Inscription : février 2009
Messages : 150
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 150
Points : 199
Points : 199
Bizarre, ça devrait rouler...
Les autres sous menu sont ils présent dans la source html ?

Peut être ceci qui cloche pour un bon affichage :
Code :
echo '<div id="sousmenu'.$i.'" style="display:none;">';
Et initialise $i à 0 aulieu de 1.
nextdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 20h49   #5
Membre confirmé
 
Inscription : octobre 2006
Messages : 340
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 340
Points : 221
Points : 221
Envoyer un message via MSN à ideal23
merci encore
la modification mélange les sous menu par rapport aux menus principaux.
ideal23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 21h00   #6
Membre actif
 
Inscription : février 2009
Messages : 150
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 150
Points : 199
Points : 199
Humm... en fait remet $i = 1 et ça devrait le faire


Edit: et non alors en fait, on va changer l'itération
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
mysql_select_db($database_dream, $dream);
$query = 'SELECT item_menu, id_menu FROM menu WHERE id_menu_dir is NULL';
$data = mysql_query($query) or die(mysql_error());
echo '<div id="menu">';
$i = 1;
while($row = mysql_fetch_assoc($data)) {
echo '<div class="menu" id="menu' . $i . '" onclick="afficheMenu(this);"><a href="#">' . $row['item_menu'] . '</a></div>';
$subQuery = 'SELECT item_menu FROM menu WHERE id_menu = ' . $row['id_menu'];
$subData = mysql_query($subQuery) or die(mysql_error());
echo '<div id="sousmenu' . $i . '" style="display:none;">';
$j = 1;//??
while ($subRow = mysql_fetch_assoc($subData)) {
echo '<div class="sousmenu"><a href="#">' . $subRow['item_menu'] . '</a></div>';
}
echo '</div>';
$i++;
}
 
echo '</div>';
?>
nextdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 21h22   #7
Membre confirmé
 
Inscription : octobre 2006
Messages : 340
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 340
Points : 221
Points : 221
Envoyer un message via MSN à ideal23
cette modification donne comme sous menu le même menu principal. ordinateurs de bureau donne comme sous menu , ordinateurs de bureau, idem pour les autres menus principaux.
ideal23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 22h05   #8
Membre actif
 
Inscription : février 2009
Messages : 150
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 150
Points : 199
Points : 199
heuu... j'ai remis l'erreur de l'id, en copiant le code... remet ça
Code :
$subQuery = 'SELECT item_menu FROM menu WHERE id_menu_dir =' . $row['id_menu'];
nextdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 22h39   #9
Membre confirmé
 
Inscription : octobre 2006
Messages : 340
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 340
Points : 221
Points : 221
Envoyer un message via MSN à ideal23
nextdev, merci
çà fonctionne parfaitement. Je ne suis pas encore à ton niveau. Bravo
ideal23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 23h44   #10
Membre actif
 
Inscription : février 2009
Messages : 150
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 150
Points : 199
Points : 199
de rien

Et je ne soutiens pas le code de ce menu, qui consomme un peu trop de ressource sql à mon goux...
nextdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 23h50   #11
Membre confirmé
 
Inscription : octobre 2006
Messages : 340
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 340
Points : 221
Points : 221
Envoyer un message via MSN à ideal23
ah bon, mais on peux aisément dans une partie administration faire toutes les modifs possible. pour les personnes qui ne veulent pas entrer dans le code, avec un formulaire c'est plus pratique pour eux.C'est ma prochaine mission.
ideal23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 00h21   #12
Membre actif
 
Inscription : février 2009
Messages : 150
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 150
Points : 199
Points : 199
Binn on peu réaliser le meme menu, sur la meme table, mais avec une seule requête sql (aulieu des 4 actuelles qui vont encore augmenter à chaque section rajoutée)

Bon il y aurais par contre une boucle php en plus, pour pré traiter le menu, mais c'est quand même mieux que 3 req sql.
Attention ça marche bien pour ce cas précis, ou justement la table n'est pas grosse, et que en plus dans l'exemple, la table est au final "scanner en entière" par 4 requetes...
nextdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 00h37   #13
Membre confirmé
 
Inscription : octobre 2006
Messages : 340
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 340
Points : 221
Points : 221
Envoyer un message via MSN à ideal23
Cette table sera beaucoup plus importante , même très importante. Ensuite je veux créer une autre table , et avec des requêtes la joindre à celle du menu. c'est un genre site vitrine. comme ici:
http://www.mon-carrelage.com/index.php?page=promotions
moins conséquente et pas de panier bien sûr
ideal23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 01h07   #14
Membre actif
 
Inscription : février 2009
Messages : 150
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 150
Points : 199
Points : 199
En fait la méthode que je parle fonctionnera bien si tu affiches toujours le même menu, peu importe la page (et que donc ce menu affiche toujours au final "la table entière")

Et avec le code actuel, il faut à priori une autre table, pour obtenir un autre menu, et donc la table de chaque menu est bien scannée en entière à chaque fois.

Bon de tout manière, il y a pas grand chose à gagner tant que ton script ne sera pas sollicité.
nextdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 11h01   #15
Membre confirmé
 
Inscription : octobre 2006
Messages : 340
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 340
Points : 221
Points : 221
Envoyer un message via MSN à ideal23
pour ceux que çà intéresse voici le code complet:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  <?php
mysql_select_db($database_dream, $dream);
$query = 'SELECT item_menu, id_menu FROM menu WHERE id_menu_dir is NULL';
$data = mysql_query($query) or die(mysql_error());
echo '<div id="menu">';
$i = 1;
while($row = mysql_fetch_assoc($data)) {
echo '<div class="menu" id="menu' . $i . '" onclick="afficheMenu(this);"><a href="#">' . $row['item_menu'] . '</a></div>';
$subQuery = 'SELECT item_menu FROM menu WHERE id_menu_dir =' . $row['id_menu'];
 
$subData = mysql_query($subQuery) or die(mysql_error());
echo '<div id="sousmenu' . $i . '" style="display:none;">';
$j = 1;//??
while ($subRow = mysql_fetch_assoc($subData)) {
echo '<div class="sousmenu"><a href="#">' . $subRow['item_menu'] . '</a></div>';
}
echo '</div>';
$i++;
}
 
echo '</div>';
?>
ideal23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h32.


 
 
 
 
Partenaires

Hébergement Web