[Résolut] Système de menu vertical déroulant automatique

Eléphant du PHP | 418 Messages

11 sept. 2011, 10:33

j'ai enlever les
'
ou les
`
Pour l'heure j'affiche tout

Maintenant je vais passé à la mise en forme, je te tien informé

En tous cas, vraiment merci, j'aurais appris un truc très utile aujourd'hui ^^

Merci de ton aide, je te tien informé de la suite

Cordialement

Eléphant du PHP | 418 Messages

11 sept. 2011, 13:34

j'ai encore des doublons

dés que j'ai plus de un SousMenu attaché à un Menu, il me double le Menu correspondant

voici le résultat listé affiché avec un select, mais j'ai la même chose avec mon menu déroulant (en tête du site)
<select name="LienUrl">
<option value="" name="">-----------</option>
<option style="background:#b9d0d7" value="test">Menu de Test</option><option style="background:#a98888" value="sousmenu1">&nbsp;&nbsp;sousmenu1</option>
<option style="background:#b9d0d7" value="menu2">Menu 2 de test</option><option style="background:#a98888" value="sousmenutest2">&nbsp;&nbsp;sousmenutest2</option>
<option style="background:#b9d0d7" value="menu2">Menu 2 de test</option><option style="background:#a98888" value="sousmenu2test2">&nbsp;&nbsp;sousmenu2test2</option>
<option style="background:#b9d0d7" value="">Menu 3 de test</option><option style="background:#b9d0d7" value="">Menu 4 de test</option>
<option style="background:#b9d0d7" value="">Menu 5 de test</option>
<option style="background:#b9d0d7" value="">Menu 6 de test</option>
<option style="background:#b9d0d7" value="">Menu 7 de test</option>
</select>
J'ai ceci comme requête SQL
	<select name="LienUrl">
		<option value="" name="">-----------</option>
<?php 
	$sql = "SELECT * FROM Menu AS p LEFT OUTER JOIN SousMenu AS t ON p.Menu = t.MenuMenu ORDER BY p.id";
	$res = mysql_query($sql);
	$i=0;
	while ($result = mysql_fetch_assoc ($res))
	{
	$t=$i++;
/* ----------- */
	if (isset($result['MenuUrl']))
	{
		$url='<option style="background:#a98888" value="'.$result['SousMenuUrl'].'">&nbsp;&nbsp;'.$result['SousMenu'].'</option>';
	}
	if (empty($result['MenuUrl']))
	{
		$url='';
	}
	echo '<option style="background:#b9d0d7" value="'.$result['MenuUrl'].'">'.$result['Menu'].'</option>';
	echo $url;
	}
?>
	</select>
Merci de m'aider à enlever les doublons

Cordialement

Mammouth du PHP | 19672 Messages

11 sept. 2011, 16:09

Est-il possible qu'il existe des doublons dans la base elle-même ?

De toutes façons, je maintiens que cette manière de faire est peut-être utilisable telle quelle, mais il faut quand même ajouter une colonne de clé étrangère dans la table des sous-menus, comme c'est expliqué dans le tuto que j'ai mentionné précédemment. Si plusieurs menus ont chacun dans les sous menu une ligne avec dans les deux cas le même libellé, on aura obligatoirement un doublon à la sortie, problème impossible avec un système clé-primaire//clé étrangère si on a correctement inséré les données à la base.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 418 Messages

11 sept. 2011, 22:54

Comment faire cela, j'ai pas du comprendre correctement ^^

Merci en tous cas

Cordialement

Mammouth du PHP | 19672 Messages

11 sept. 2011, 23:21

:shock: On est mal barrés là je sens...

Bien, alors première chose, as-tu correctement lu dans le moindre détail le tuto sur les jointures ?
Ensuite, as-tu compris le fonctionnement clé primaire // clé étrangère ? Sinon il vaut mieux commencer par là si on veut s'en sortir.
Ensuite, sais-tu comment ajouter une colonne dans une table existante ?
Et pour finir, parce que j'ai quand même un doute sur ce point, as-tu vraiment bien compris la nature du problème que j'ai soulevé dans ma précédente réponse à savoir la possibilité que dans ta table des sous-menus tu aies des doublons, c'est à dire des sous-menus distincts rattachés à des menus distincts aussi mais ayant le même libellé ? Là aussi si tu n'as pas saisi, il va falloir commencer par là parce que sinon on y sera encore à Noël. :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 418 Messages

11 sept. 2011, 23:34

oui, j'ai lu les tutos et j'ai compris un peux, ça reste à améliorer

Ensuite, je sais rajouter des champs dans une table SQL, j'ai déjà eu l'occasion de le faire, me resteras juste à le ressortir.

Et pour le problème, j'avais effectivement mal vu, mais en faite, je fait pas de MAJ des Sousmenu, lors de l'ajout de valeur, ce qui fait qu'il y a des doublons, depuis que je suis dessus, j'ai un peux mal à la tête, ce qui fait que je vois pas tout du premier coup d’œil, ^^

Je vais tenter de faire une maj, lors de l'ajout de sousmenu, et si il y à déjà une ou plusieurs valeur, normalement ça devrais fonctionner

Je te tiens informé

Merci

Cordialement

Mammouth du PHP | 19672 Messages

11 sept. 2011, 23:39

Le problème n'est pas de voir du premier coup d'oeil, tu pourrais avoir des tables avec des quantités de données largement plus importantes et il serait impossible de tout voir d'un seul regard. Donc il faut passer par une autre méthode et cette autre méthode, c'est la logique, froide, mathématique. Là tu vas t'en sortir beaucoup plus facilement avec moins de maux de tête parce que soit les données sont bonnes et la logique amènera à obtenir des résultats cohérents, soit les données sont invalides ou corrompues et tu pourras programmer jusqu'à la Saint Glinglin sans trouver de solution satisfaisante.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 418 Messages

11 sept. 2011, 23:45

Je verrais ça après demain, je commence à saturer, je vais reprendre mes tables dans un site de dev, je verrais bien, comme tu dis, j'ai du mal agencer mes tables, et ça fait que je ne trouve aucune solution

Je te tien informé

en tous cas merci de ton aide, c'est sympa de voir des personnes qui prenne le temps d'aider.

Cordialement

Eléphant du PHP | 418 Messages

13 sept. 2011, 08:55

J'ai beau essayer de tout retourner dans tous les sens, j'ai repris les tables comme sur l'exemple
mais je n'arrive toujours pas à afficher les Menu et SousMenu

J'ai besoin d'aide, SVP, j'ai besoin de faire ce script, mais là je suis réellement coincé, non pas que je ne me suis pas donnée la peine d'essayer, mais malgré mes tentatives, mes recherches etc, je n'y arrive toujours pas

voici comment j'ai agencer les tables
// Creation de la table Menu
$Query2 = "CREATE TABLE Menu (Id int(13) unique auto_increment, Menu mediumtext, MenuUrl longtext, PRIMARY KEY (Id))";
$mysql_result2 = mysql_query($Query2,$mysql_link);
// Creation de la table SousMenu
$Query3 = "CREATE TABLE SousMenu (Id int(13) unique auto_increment, MenuId int(13) unsigned, SousMenu mediumtext, SousMenuUrl longtext, MenuMenu mediumtext, PRIMARY KEY (Id))";
$mysql_result3 = mysql_query($Query3,$mysql_link);
On vois bien que les tables sont liées par Id et MenuId, et que les clefs primaire sont bien Id dans les deux cas, comme sur l'exemple.

J'arrive à faire comme sur le tutoriel, à afficher le nombre d'entrées mais pas à les affichées.

Je n'affiche que la première ou la dernière entrée des SousMenu, sans arrivée à afficher les autres

Voici le code que j'ai fait, peux être il y a encore une erreur, mais je ne pense pas, j'arrive à bien affichée les Menu seuls, mais pas les SousMenu.

Bref le code
                <ul id="menu">
                     <li class="imageSeparateur"><!--ne placer rien dans ce li --></li>
                     
                     <!--Éléments du menu principal, vous pouvez ajouter ou supprimer des lignes -->
                     <!--<li><div class="pageActive">Accueil</div></li>-->
                     <li><a href="index.php">Accueil</a></li>
<?php
	$sql = "SELECT Menu AS 'menu', MenuUrl AS 'url', SousMenu AS 'smenu', SousMenuUrl AS 'surl' FROM Menu AS p LEFT JOIN SousMenu AS t ON p.Id = t.MenuId GROUP BY MenuMenu";
	//$sql = "SELECT * FROM Menu AS p LEFT OUTER JOIN SousMenu AS t ON p.Id = t.MenuId GROUP BY Menu";
	$res = mysql_query($sql);
	$i=0;
	while ($result = mysql_fetch_assoc ($res))
	{
	$t=$i++;
/* ----------- */

?>
	
    <li><a href="index.php?s=<?php echo $result['url'] ?>"><?php echo $result['menu']; ?></a>
        <ul><li><a href="index.php?s=<?php echo $result['surl'] ?>"><?php echo $result['smenu']; ?></a></li></ul>
    </li>

<?php
	}
?>
				</ul>
Merci de votre aide, et j’espère que l'aide apportée m'aideras enfin à finir ce script.

Cordialement

Mammouth du PHP | 19672 Messages

13 sept. 2011, 11:45

Bien, nous avons maintenant une liaison plus conforme entre les deux tables.

Maintenant, l'affichage de tout ça : afin que tu aies une meilleure idée de ce sur quoi tu dois travailler, je te suggère la chose suivante : ouvre un client MySQL en ligne de commande, sélectionne la base appropriée et exécute la requête SQL telle-quelle pour voir de quoi le résultat a l'air : copie/colle ici dans un bloc [SQL] pour garder la mise en forme et les alignements.

Juste au cas où tu ne saurais pas trop de quoi il est question quand je parle de ligne de commande, voici rapidement la procédure, enfin sous Windows, je ne la connais pas sous Mac et si tu es sous Linux, j'imagine que tu sais de quoi je parle. Démarrer > Exécuter et saisir « cmd » : dans la fenêtre qui s'ouvre, après l'avoir maximisée, saisir « mysql -u root » : si ton accès à la base en local comporte un mot de passe, alors fais plutôt « mysql -u root -p » et [Entrée] puis donner le mot de passe demandé. Ensuite, saisir « USE nom-de-ta-base » puis [Entrée] : enfin, colle ta requête, n'oublie pas le « ; » final et [Entrée] ». Le résultat va s'afficher sous la forme d'un tableau (ou affichera une erreur le cas échéant) Copie ce tableau et colle-le ici.

La première chose que tu verras, ce sera que tu as tous les résultats attendus ou non, ce sera un bon point de départ. Ensuite, tu verras peut-être que finalement tu n'as pas tous tes résultats : normal, vire le GROUP BY qui n'a aucune raison de se trouver là, et met donc un ORDER BY à la place, ce sera beaucoup plus utile.

Quand tu auras obtenus les résultats tels que tu les souhaites, tu pourras commencer à t'inquiéter du code PHP, mais pour l'instant, le premier point à résoudre est en SQL.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 418 Messages

13 sept. 2011, 12:15

je n'arrive pas à ouvrir mysql, je suis sous wamp, sous windows 7

Merci de ton aide

Mammouth du PHP | 19672 Messages

13 sept. 2011, 13:50

je n'arrive pas à ouvrir mysql, je suis sous wamp, sous windows 7
Mouais, je sais pas trop comment fonctionne Windows 7, je suis sous XP, et je n'utilise pas WAMP non plus...

De mémoire, il y a une icône de WAMP dans la barre des tâches, je ne me souviens plus s'il n'y avait pas dans le menu à partir de cette icône un lien vers le client MySQL en ligne de commande ? Sinon, il faudrait regarder dans le menu de WAMP s'il n'y aurait pas un raccourci pour ça...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 418 Messages

13 sept. 2011, 14:08

Merci, c'est ça, j'avais jamais prêter attention

Il y a bien une icône Mysql Console, merci je lance la requête je te tien informé

Eléphant du PHP | 418 Messages

13 sept. 2011, 14:22

je ne vois pas comment exécuter le script, je l'est toujours fait via php

j'ai tenter ceci
  SELECT `Menu` AS 'menu', MenuUrl AS 'url', `SousMenu` AS 'smenu', `SousMenuUrl` AS 'surl' FROM `Menu` AS p LEFT JOIN `SousMenu` AS t ON p.Id = t.MenuId GROUP BY MenuMenu
C'est pas comment ça je pense non?

Merci

Mammouth du PHP | 19672 Messages

13 sept. 2011, 15:25

Si tu lisais complètement ce que j'écris, la question serait superflue :-*
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: