<ul><li> dynamique [MENU]

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : <ul><li> dynamique [MENU]

Re: <ul><li> dynamique [MENU]

par visualight » 08 mars 2010, 17:47

:oops: :oops: :oops: :oops: :oops:

Autant pour moi ... j'étais dans le mauvais fichier :oops: :oops:

Re: <ul><li> dynamique [MENU]

par visualight » 08 mars 2010, 17:31

Juste une dernière chose bizzare : si je veux trier mes résultats (ORDER BY) de la seconde requete (celle des options), ça ne trie pas.
Une idée ?
$req_opt = $connexion->prepare("SELECT gallery_title FROM $CfgTableMain  WHERE gallery_id IN ($point) AND gallery_place = '$places' ORDER BY gallery_title DESC");
Est dû au fait que c'est une boucle imbriquée que ca ne marche pas ?
Que dois-je faire pour arriver à trier les résultats ?

PS: j'ai testé ma requete sous phpmyadmin et elle focntionne et trie correctement les résultats mais pas dans mon code.
Pour dernier code complet fonctionnel de mes listes à puce dynamique, voir message précédent.

Merci,
raph

Re: <ul><li> dynamique [MENU]

par visualight » 08 mars 2010, 12:56

Calimero,

Je te remercie énormément pour ta réponse qui m'a franchement aidé.
En effet, je n'avais jamais pensé à tester ma requête en phpmyadmin.

Chose faite je me suis aperçu d'une erreur que j'ai de suite corrigé.

Donc pour afficher une liste à puce dynamiquement, je fais d'abord une requete sur mon premier filtrage (les villes) :
$req_place = $connexion->prepare("SELECT DISTINCT gallery_place FROM $CfgTableMain WHERE gallery_id IN ($point)");
Ensuite dans la boucle while de cette requete, je fais appel à une autre requete qui va rechercher les options liées à chaques villes par le biais du résultat obtenu précédemment en FETCH_ASSOC ($places = $res_place['gallery_place'];) et le tour est joué !
$req_opt = $connexion->prepare("SELECT gallery_title, gallery_place FROM $CfgTableMain WHERE gallery_id IN ($point) AND gallery_place = '$places'");
En fait j'avais déjà testé ce type de boucles imbriquées mais sans succès car je devais faire appel à $place (résultat obtenu dans la 1er boucle en fetch_assoc) DANS DES QUOTES ! et j'avais testé sans les quotes en me disant que c'était une variable et qu'il n'y avait pas besoin de mettre des quotes.

Dis moi si je me trompe (au risque de me faire passer pour un con) mais si je fais une variable comme ceci et que je met cette variable dans une requête, j'ai testé et je ne dois pas mettre de quotes dans la requête :
$test = 'paris';


Par contre, la variable (obtenue via fecth_assoc) n'est pas générée avec des quotes ...
si je résume, elle est génére comme ceci (grosso-modo) :

$test=$row['test']; ==> $test=valeurdetest

il faut donc mettre des quotes dans la requête.



BREF, comme d'hab, c'était tout con et ça ma quand même pris 4heure hier pour m'en aperçevoir aujourd'hui ! :oops:

Mon code fonctionnel est donc :
 echo '<div class="container4">
<div class="menu4">

<ul>
<li class="documents"><a href="#docs" onclick="ShowDivMenu(\'document'.$galid.'\')">Documents</a></li>
<li class="videos"><a href="#" onclick="ShowDivMenu(\'video'.$galid.'\')">Videos</a></li>
<li class="photos"><a href="#" onclick="ShowDivMenu(\'gallery'.$galid.'\')">Photos</a></li>
<li class="monitor"><a href="#" onclick="ShowDivMenu(\'options'.$galid.'\')">Options liées</a>
			 
<ul>';
			 			 
$req_place = $connexion->prepare("SELECT DISTINCT gallery_place FROM $CfgTableMain WHERE gallery_id IN ($point)");
$req_place->execute($auth_id);
				 				 			 
				 
while ($res_place = $req_place->fetch(PDO::FETCH_ASSOC)) {
				 
$places = $res_place['gallery_place'];
				 				 
echo '<li class="monitor"><a href="#">'.$places.'</a>';
echo '<ul>';
								 
				 
$req_opt = $connexion->prepare("SELECT gallery_title, gallery_place FROM $CfgTableMain WHERE gallery_id IN ($point) AND gallery_place = '$places'");
$req_opt->execute($auth_id);
				 
while ($res_opt = $req_opt->fetch(PDO::FETCH_ASSOC)) {
$opt_title = $res_opt['gallery_title'];

echo '<li class="monitor"><a href="#">'.$opt_title.'</a></li>';
				 
}
echo '</ul></li>';
}
				
				
echo '</ul></li>
<li class="aide"><a href="#">Aide</a></li>
</ul>

</div>
</div>';


Merci pour tout,
raph

Re: <ul><li> dynamique [MENU]

par Calimero » 08 mars 2010, 02:34

Bonjour visualight,

Une bonne démarche pour résoudre ton problème serait de :
  1. Remplacer les variables dans la requête SQL par des valeurs de test (des valeurs réalistes, pour pouvoir se concentrer sur le SQL et rien d'autre). Tu peux, et je te le conseille, faire un simple echo de ta requête pour atteindre rapidement cet objectif.
  2. Lancer la requête obtenue dans PHPMyadmin (ou outil de test SQL équivalent, en tout cas pas dans ton code PHP) pour bénéficier d'éventuels messages informatifs/d'erreur, le cas échéant.

Tout ça te mettrait déjà dans de meilleures conditions, car tu pourrais te concentrer sur le SQL et rien d'autre. Mais en admettant que ça ne suffise pas :
  • Ton prochain post sera dans le forum "SQL et bases de données", situé un peu en dessous de celui-ci.
  • Tu y indiqueras le nom de ta base de données ainsi que sa version (par exemple : MySQL 5.0.24)
  • Tu y copieras le schéma (export de la structure) des tables concernées (sous forme d'instructions CREATE TABLE), ainsi qu'un échantillon de données (export des données) suffisant pour reproduire le problème (sous forme d'instruction(s) INSERT)
  • Enfin, tu y mettras la fameuse requête qui ne renvoie pas ce que tu veux, ainsi qu'une description la plus précise possible de ce qu'elle produit chez toi quand tu la lances dans ton environnement de test (PHPMyAdmin ou équivalent) : message d'erreur si tu en as un, description d'en quoi le résultat n'est pas satisfaisant si tu n'en as pas, et enfin une description du résultat souhaité.
Pourquoi tout ceci ? Pour donner une chance aux lecteurs du forum de se mettre dans les mêmes conditions que toi, et donc de comprendre ce qui déconne et/ou de construire pour toi une requête qui fonctionne selon tes souhaits, adaptée à ta structure.

Re: <ul><li> dynamique [MENU]

par visualight » 07 mars 2010, 19:39

Voilà ou j'en suis et la, franchement, j'ai tout essayé :

echo '<li class="monitor"><a href="#" onclick="ShowDivMenu(\'options'.$galid.'\')">Options liées</a>
<ul>';
			 			 
$req_place = $connexion->prepare("SELECT DISTINCT gallery_place FROM $CfgTableMain WHERE gallery_id IN ($point)");
$req_place->execute($auth_id);
		 			 
				 
while ($res_place = $req_place->fetch(PDO::FETCH_ASSOC)) {
$places = $res_place['gallery_place'];

				 				 
echo '<li class="monitor"><a href="#">'.$places.'</a>';
echo '<ul>';
								 
				 
$req_opt = $connexion->prepare("SELECT gallery_title FROM $CfgTableMain WHERE gallery_id IN ($point)");
$req_opt->execute($auth_id);
				 
while ($res_opt = $req_opt->fetch(PDO::FETCH_ASSOC)) {
$opt_title = $res_opt['gallery_title'];
				 
echo '<li class="monitor"><a href="#">'.$opt_title.'</a></li>';
				 
}
echo '</ul></li>';
}
				
				
echo '</ul>
</li>

Le nom des villes apparaissent bien dans le menu déroulant et son unique (utilisation de SELECT DISTINCT).
Quant aux options, ça déconne complet.

Si j'ai 3 villes dans ma base de donnée, J'ai 3 options par ville qui s'affichent.
Les 3 options sont en plus identiques pour chaques ville !

Je ne sais plus quoi faire.

Juste à savoir, les données (ville et option) proviennent d'une seule et même table.


Pouvez -vous m'aider à résoudre mon probleme svp ?

Merci,
raph

Re: <ul><li> dynamique [MENU]

par visualight » 07 mars 2010, 16:56

Je reviens aux nouvelles.

Si je fait une requete : SELECT gallery_place, gallery_title FROM $CfgTableMain WHERE gallery_id IN ($point) GROUP BY gallery_place
Il me sort bien les ville regroupées par nom MAIS il n'affiche qu'une seule option par ville alors que certaines villes ont plusiers options.

A mon avis c'est tout bête mais je ne parviens pas à faire en sorte de :

1. Afficher les villes uniques (select distinct ou group by)
2. Afficher toutes les options liées aux ville

C'est dans la requete que ça cloche et je pense que le fait de fusionner deux requetes en une me permettra d'arriver à mes fins ... oui, mais comment ?
[VOIR MESSAGE PRECEDENT]

Merci,
raph

Re: <ul><li> dynamique [MENU]

par visualight » 07 mars 2010, 16:54

Salut,

J'ai en partie résolu mon problème mais il me reste un problème.
J'ai fusionné mes deux requetes pour en faire une seule mais aucuns résultats ne s'affiche.
"SELECT DISTINCT gallery_place (SELECT gallery_title FROM $CfgTableMain WHERE gallery_id IN ($point)) FROM $CfgTableMain WHERE gallery_id IN ($point)"
C'est un peu barbare mais moins que mon message précédent et je me demandais si quelqu'un pouvait vérifier ma requete et me dire ce qui cloche.
Je suis obligé de faire 2 requetes en une car j'ai un DISTINCT pour afficher les villes.

Si je fais : "SELECT DISTINCT gallery_place, gallery_title FROM $CfgTableMain WHERE gallery_id IN ($point)"
Les options liées aux villes ne s'affichent pas ET j'ai des doublons dans mes villes

Donc je me dit qu'en fusionnant deux requetes ça devrait marcher ... encore faut il savoir comment...

Merci,
raph

<ul><li> dynamique [MENU]

par visualight » 07 mars 2010, 16:12

Bonjour,

Je suis entrain d'essayer de réaliser un menu dont les éléments sont chargés dynamiquement sur base de liste à puce.
Ce que j'aimerai pouvoir faire c'est afficher les éléments de l'ITEM : options liées dynamiquement (à partir d'un base de donnée)

Voici ce que j'ai tenté de faire mais ça ne marche qu'à moitié.
En effet, j'arrive à afficher les lieux (places) en tant que submenu de options liées mais je n'arrive pas à afficher (pour chaque lieux (places)) les éléments associés.

Voici comment ça devrait marcher :

Code : Tout sélectionner

+ OPTIONS LIEES - ville n°1 - option 1 ville 1 - option 2 ville 1 - option 3 ville 1 - ville n°2 - option 1 ville 2 - option 2 ville 2 - option 3 ville 2
... et ainsi de suite ... pour chaques villes je dois afficher un sous menu avec les options ratachées à cette ville.
Chaque ville étant également un sous-menu de options liées.

Voici mon code (foireux, comme d'hab) :
<div class="container4">
<div class="menu4">

<ul>
<li class="documents"><a href="#docs" onclick="ShowDivMenu(\'document'.$galid.'\')">Documents</a></li>
<li class="videos"><a href="#" onclick="ShowDivMenu(\'video'.$galid.'\')">Videos</a></li>
<li class="photos"><a href="#" onclick="ShowDivMenu(\'gallery'.$galid.'\')">Photos</a></li>
<li class="monitor"><a href="#" onclick="ShowDivMenu(\'options'.$galid.'\')">Options liées</a>
			 
<ul>

// Connexion à la table principale pour récupérer le nom unique de chaques ville
$req_place = $connexion->prepare("SELECT DISTINCT gallery_place FROM $CfgTableMain WHERE gallery_id IN ($point)");
$req_place->execute($auth_id);

// Connexion à la table proncipale pour récupérer le titre de chaque options				 
$req_opt = $connexion->prepare("SELECT gallery_title FROM $CfgTableMain WHERE gallery_id IN ($point)");
$req_opt->execute($auth_id);
				 
// On fait une boucle pour récupérer toutes les villes et on affiche la ville
while ($res_place = $req_place->fetch(PDO::FETCH_ASSOC)) {
$places = $res_place['gallery_place'];
				 				 
echo '<li class="monitor"><a href="#">'.$places.'</a><ul>';


// C'EST ICI QUE CA COINCE
// On fait un autre boucle 	pour récupérer le titre des options liées à chaques villes et on affiche l'option			 
while ($res_opt = $req_opt->fetch(PDO::FETCH_ASSOC)) {
$opt_title = $res_opt['gallery_title'];
				 
echo '<li class="monitor"><a href="#">'.$opt_title.'</a></li>';
}

echo '</ul></li>';
}
				
</ul>
</li>
</ul>

</div>
</div>

Dans mon code, toutes les options de toutes les villes s'affichent dans la première ville au lieux d'avoir les options liées à chaque villes.

J'ai essayé pas mal de chose, mais quand ça marche pas, ça bug.

Pouvez-vous me donner un super coup de main en m'indiquant ce que je dois faire ?

Merci,
raph