Se connecter / S'enregistrer
Votre question

RESOLU faire un lien en php

Tags :
  • Echo
  • Programmation
Dernière réponse : dans Programmation
5 Décembre 2011 20:07:36

bonjour
je cherche le code approprié pour faire un lien en php. j'ai réalisé un script d'un menu déroulant:
  1. <?php
  2. mysql_select_db($database_dream, $dream);
  3. $query = 'SELECT item_menu, id_menu FROM menu WHERE id_menu_dir is NULL';
  4. $data = mysql_query($query) or die(mysql_error());
  5. echo '<div id="menu">';
  6. $i = 1;
  7. while($row = mysql_fetch_assoc($data)) {
  8. echo '<div class="menu" id="menu' . $i . '" onclick="afficheMenu(this);"><a href="#">' . $row['item_menu'] . '</a></div>';
  9. $subQuery = 'SELECT item_menu FROM menu WHERE id_menu_dir =' . $row['id_menu'];
  10. $subData = mysql_query($subQuery) or die(mysql_error());
  11. echo '<div id="sousmenu' . $i . '" style="display:none;">';
  12.  
  13. while ($subRow = mysql_fetch_assoc($subData)) {
  14. echo '<div class="sousmenu"><a href="#">' . $subRow['item_menu'] . '</a></div>';
  15. }
  16. echo '</div>';
  17. $i++;
  18. }
  19. echo '</div>';
  20. ?>

celui-ci, en vert doit me renvoyer vers les différents id de ma table menu

je prévois ensuite une jointure avec une autre table.
avez-vous une idée, Merci

Autres pages sur : lien php

a c 232 L Programmation
5 Décembre 2011 21:08:54

Salut,

Faire un lien ?
  1. <a href="mapage.php?id=<? echo $id; ?>">mon lien</a>
5 Décembre 2011 22:20:12

Ligne 8 remplace le # par ton lien cible car si j'ai bien compris le onclick sert juste à afficher la rubrique dans le menu lui meme.
Contenus similaires
5 Décembre 2011 23:38:33

je ne sais pas ce que représente $id, et si je mets mon lien , je n'ai plus les items des sous menu.
à la ligne 8 si je remplace le # par ma page cible qui est catalogue.php, ok . Mais il me manque un code car je voudrais joindre une autre table.

quand je clique sur un sous menu par exemple carrelage moderne , ce lien prenne en compte id_menu 4 , pour l'affichage dans la page catalogue.php , le résultat de ma table articles, ref_menu 4
carrelage terre cuite , id_menu 5 ainsi de suite.
j'espère que vous me comprenez., c'est pas évident
a c 232 L Programmation
6 Décembre 2011 09:11:57

Avant de faire un lien, est-ce que tu as déjà fait ta 2ème page qui affiche tout ce que tu veux ou pas ?
6 Décembre 2011 11:47:25

oui, c'est catalogue.php et la requête des 2 tables
  1. $colname_cat = "-1";
  2. if (isset($_GET['id_menu'])) {
  3. $colname_cat = $_GET['id_menu'];
  4. }
  5. mysql_select_db($database_dream, $dream);
  6. $query_cat = sprintf("SELECT articles.titre, articles.`description`, articles.prix, articles.photo, menu.id_menu FROM articles, menu WHERE articles.ref_menu=menu.id_menu and id_menu=%s", GetSQLValueString($colname_cat, "int"));
  7. $query_limit_cat = sprintf("%s LIMIT %d, %d", $query_cat, $startRow_cat, $maxRows_cat);
  8. $cat = mysql_query($query_limit_cat, $dream) or die(mysql_error());
  9. $row_cat = mysql_fetch_assoc($cat);

je souhaiterai que lorsque l'on clique sur un sous menu, soit afficher dans la barre du navigateur par exemple:
http://localhost/menuisier/catalogue.php?id_menu=4
et le résultat de la requête dans un tableau sur la page centrale de catalogue.php
a c 232 L Programmation
6 Décembre 2011 12:01:41

Bah voilà, tu appelles ta page catalogue.php?id_menu=ton_id_menu
6 Décembre 2011 13:35:28

tu as raison omar, çà marche.Mais je suis obligé de mentionner à la main
<a href="catalogue.php?id_menu=4">
id_menu=4
donc tous les sous menus sont égal à 4. Il me faut trouver une variable ou autre pour afficher les différents sous menus car ma table articles sera plus importante , un exemple
a c 232 L Programmation
6 Décembre 2011 13:41:55

Bah dans ta boucle qui affiche tous tes liens, tu peux bien mettre l'id actuel de ton menu...
Fais voir ton code avec ce que tu as rajouté
6 Décembre 2011 13:51:22

le code du menu accordéon?
j'ai fait un truc comme çà
  1. echo '<div class="sousmenu"><a href="catalogue.php?id='.$subRow['id_menu'].'">' . $subRow['item_menu'] . '</a></div>';

mais j'ai un message d'erreur
a c 232 L Programmation
6 Décembre 2011 14:00:31

Parce que dans la requête que je t'avais faite, je n'avais sélectionné que item_menu, il faut sélectionner id_menu aussi.
6 Décembre 2011 14:08:35

excuse-moi je ne vois pas ta requête concernant le lien
a c 232 L Programmation
6 Décembre 2011 14:13:52

La requête SQL de la dernière fois...
  1. $subQuery = 'SELECT item_menu FROM menu WHERE id_menu_dir =' . $row['id_menu'];

6 Décembre 2011 14:30:07

ok , plus d'erreur
j'ai bien dans le navigateur http://localhost/menuisier/catalogue.php?id=4 ou 5 selon le sous menu.
Mais l'affichage de ma requête des 2 tables ne fait plus.
a c 232 L Programmation
6 Décembre 2011 14:43:17

Tu attends un id_menu, pas un id
6 Décembre 2011 14:50:16

c'est exact , bien vu.ça affiche
maintenant pour corser l'affaire les sous menus ne reste pas affiché comme avant quand on clique sur le menu principal.
a c 232 L Programmation
6 Décembre 2011 15:13:50

Tu as rajouté un lien sur tes menus principaux ?
Si c'est le cas, c'est normal, ça change de page, alors ça réinitialise tout.
6 Décembre 2011 15:22:27

non , je n'ai pas rajouté de lien sur les menus principaux.
il faudrait peut-être fermer la requête dans le script du menu?
a c 232 L Programmation
6 Décembre 2011 15:31:46

Bon, je comprends pas tout là...

Si tu as réussi à voir que tes liens fonctionnaient, c'est que tu as réussi à ouvrir tes sous-menus, non ?
Mais quand tu changes de page, le sous-menu qui était sélectionné ne l'est plus ?
6 Décembre 2011 15:40:53

ca vient peut-être du javascript
sinon tu m'as bien aidé , comme d'habitude
a c 232 L Programmation
6 Décembre 2011 15:55:01

Bah ça vient de quand tu changes de page, ça recharge les données, et donc ça réinitialise le menu.
Pour gérer ça, il faut récupérer la valeur de ton id_menu, et t'assurer qu'il soit visible.
6 Décembre 2011 16:04:17

le résultat des sous menus avec la jointure des tables se fait sur la même page , catalogue.php.
Citation :
il faut récupérer la valeur de ton id_menu, et t'assurer qu'il soit visible.

comment il faut procéder.
a c 232 L Programmation
6 Décembre 2011 16:46:56

Oui, mais même si ça se fait sur la même page, il y a un rechargement de page quand tu cliques sur ton lien.

Hmm... doit y avoir plusieurs solutions pour s'assurer que ce soit visible:
- en JavaScript
- en PHP

Pour faire ça rapidos en JavaScript (pas testé, peut être à arranger un peu...):
  1. (...)
  2. while ($subRow = mysql_fetch_assoc($subData)) {
  3. echo '<div class="sousmenu">(...)';
  4. if ($subRow['id_menu'] == $_GET['id_menu']) {
  5. echo '<script type="text/javascript">afficheMenu(document.getElementById(\'menu\'' . $i . '\'));</script>';
  6. }
  7. }
  8. (...)
  9. ?>


(Ajouter les lignes 4, 5 et 6 quoi)
6 Décembre 2011 17:09:02

pour l'instant çà ne fonctionne pas . Mais je vais persévérer dans ce sens
a c 232 L Programmation
6 Décembre 2011 17:19:20

Fais voir tout ton code, au cas où...

Est-ce que tu as une erreur ?
6 Décembre 2011 17:31:18

je n'ai pas d'erreur
  1. <?php
  2. mysql_select_db($database_dream, $dream);
  3. $query = 'SELECT item_menu, id_menu FROM menu WHERE id_menu_dir is NULL';
  4. $data = mysql_query($query) or die(mysql_error());
  5. echo '<div id="menu">';
  6. $i = 1;
  7. while($row = mysql_fetch_assoc($data)) {
  8. echo '<div class="menu" id="menu' . $i . '" onclick="afficheMenu(this);"><a href="#">' . $row['item_menu'] . '</a></div>';
  9. $subQuery = 'SELECT id_menu, item_menu FROM menu WHERE id_menu_dir =' . $row['id_menu'];
  10. $subData = mysql_query($subQuery) or die(mysql_error());
  11. echo '<div id="sousmenu' . $i . '" style="display:none;">';
  12. while ($subRow = mysql_fetch_assoc($subData)) {
  13. echo '<div class="sousmenu"><a href="catalogue.php?id_menu='.$subRow['id_menu'].'">' . $subRow['item_menu'] . '</a></div>';
  14. if ($subRow['id_menu'] == $_GET['id_menu']) {
  15. echo '<script type="text/javascript">afficheMenu(document.getElementById(\'menu\'' . $i . '\'));</script>';
  16. }
  17. }
  18. echo '</div>';
  19. $i++;
  20. }
  21. echo '</div>';
  22. ?>
a c 232 L Programmation
6 Décembre 2011 19:24:48

Affiche la page dans ton navigateur, ouvre la source, et copie moi le code du menu généré
6 Décembre 2011 20:27:48

voici
  1. <div id="menu_gauche">
  2. <div id="menu"><div class="menu" id="menu1" onclick="afficheMenu(this);"><a href="#">CARRELAGE INTERIEUR</a></div><div id="sousmenu1" style="display:none;"><div class="sousmenu"><a href="catalogue.php?id_menu=4">carrelage moderne</a></div><div class="sousmenu"><a href="catalogue.php?id_menu=5">carrelage terre cuite</a></div></div><div class="menu" id="menu2" onclick="afficheMenu(this);"><a href="#">CARRELAGE EXTERIEUR</a></div><div id="sousmenu2" style="display:none;"><div class="sousmenu"><a href="catalogue.php?id_menu=6">carrelage parquet anti-dérapant</a></div><div class="sousmenu"><a href="catalogue.php?id_menu=7">carrelage terre cuite anti-dérapant</a></div></div><div class="menu" id="menu3" onclick="afficheMenu(this);"><a href="#">FAIENCES</a></div><div id="sousmenu3" style="display:none;"><div class="sousmenu"><a href="catalogue.php?id_menu=8">faience moderne</a></div><div class="sousmenu"><a href="catalogue.php?id_menu=9">faience moderne</a></div></div></div></div>
  3.  
  4. <!-- FIN MENU GAUCHE' -->
a c 232 L Programmation
6 Décembre 2011 22:47:43

tu avais sélectionné un menu là? parce qu'il n'y a pas de traces du script
6 Décembre 2011 23:34:14

excuse-moi
  1. <div id="menu_gauche">
  2. <div id="menu"><div class="menu" id="menu1" onclick="afficheMenu(this);"><a href="#">CARRELAGE INTERIEUR</a></div><div id="sousmenu1" style="display:none;"><div class="sousmenu"><a href="catalogue.php?id_menu=4">carrelage moderne</a></div><div class="sousmenu"><a href="catalogue.php?id_menu=5">carrelage terre cuite</a></div></div><div class="menu" id="menu2" onclick="afficheMenu(this);"><a href="#">CARRELAGE EXTERIEUR</a></div><div id="sousmenu2" style="display:none;"><div class="sousmenu"><a href="catalogue.php?id_menu=6">carrelage parquet anti-dérapant</a></div><script type="text/javascript">afficheMenu(document.getElementById('menu'2'));</script><div class="sousmenu"><a href="catalogue.php?id_menu=7">carrelage terre cuite anti-dérapant</a></div></div><div class="menu" id="menu3" onclick="afficheMenu(this);"><a href="#">FAIENCES</a></div><div id="sousmenu3" style="display:none;"><div class="sousmenu"><a href="catalogue.php?id_menu=8">faience moderne</a></div><div class="sousmenu"><a href="catalogue.php?id_menu=9">faience moderne</a></div></div></div></div>
  3.  
  4. <!-- FIN MENU GAUCHE' -->
a c 232 L Programmation
7 Décembre 2011 09:31:34

En effet, je me suis trompé dans le script...
  1. echo '<script type="text/javascript">afficheMenu(document.getElementById(\'menu' . $i . '\'));</script>';


Ca devrait être mieux
7 Décembre 2011 09:37:01

il y a un petit bug
Parse error: parse error, expecting `','' or `';'' in
7 Décembre 2011 09:38:01

attends
7 Décembre 2011 09:41:05

ca vient , les sous menu sont bien visibles , mais il y a une erreur:
Notice: Undefined index: id_menu in C:\Program Files\EasyPHP5.3.0\www\menuisier\include\menu_accordeon.php on line 101
a c 232 L Programmation
7 Décembre 2011 09:43:54

C'est pas une erreur c'est une "Notice", une information si tu veux...
Tu peux remplacer la condition par ça :
  1. if (isset($_GET['id_menu']) && $subRow['id_menu'] == $_GET['id_menu'])
7 Décembre 2011 09:44:22

c'est bon , c'est bon!!!!
j'ai réinisialisé mon navigateur
7 Décembre 2011 09:47:17

j'ai été trop vite
j'ai changé de navigateur , au départ il y a bien le message d'erreur , et il disparaît lors que l'on a cliqué une fois sur un sous menu
7 Décembre 2011 09:49:25

la ligne 101 de l'erreur c'est:
  1. if ($subRow['id_menu'] == $_GET['id_menu']) {
a c 232 L Programmation
7 Décembre 2011 10:36:04

Est-ce que tu as mis le nouveau code que je t'ai dit aussi ? Tu ne devrais plus avoir de problèmes avec ça.

Et je t'ai dit que c'était juste une "Notice", il y a certains hébergeurs qui les cachent, vu que c'est juste des informations sur le code, mais que ce n'est pas une erreur en soit.
7 Décembre 2011 10:38:44

j'ai modifié la condition çà fonctionne parfaitement, il me reste à te remercier à nouveau
7 Décembre 2011 13:55:07

script terminé
  1. <?php
  2. mysql_select_db($database_dream, $dream);
  3. $query = 'SELECT item_menu, id_menu FROM menu WHERE id_menu_dir is NULL';
  4. $data = mysql_query($query) or die(mysql_error());
  5. echo '<div id="menu">';
  6. $i = 1;
  7. while($row = mysql_fetch_assoc($data)) {
  8. echo '<div class="menu" id="menu' . $i . '" onclick="afficheMenu(this);"><a href="#">' . $row['item_menu'] . '</a></div>';
  9. $subQuery = 'SELECT id_menu, item_menu FROM menu WHERE id_menu_dir =' . $row['id_menu'];
  10. $subData = mysql_query($subQuery) or die(mysql_error());
  11. echo '<div id="sousmenu' . $i . '" style="display:none;">';
  12. while ($subRow = mysql_fetch_assoc($subData)) {
  13. echo '<div class="sousmenu"><a href="catalogue.php?id_menu='.$subRow['id_menu'].'">' . $subRow['item_menu'] . '</a></div>';
  14. if (isset($_GET['id_menu']) && $subRow['id_menu'] == $_GET['id_menu']){
  15. echo '<script type="text/javascript">afficheMenu(document.getElementById(\'menu' . $i . '\'));</script>';
  16. }
  17. }
  18. echo '</div>';
  19. $i++;
  20. }
  21. echo '</div>';
  22. ?>
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS