|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
![]() ![]() |
Bonjour,
Je découvre Ajax et, grâce notamment à l'exemple donné dans cette discussion, je suis presque arrivé à faire ce que je veux. Sauf que mon formulaire de recherche contient 4 zones de liste et non pas 2. L'utilisateur peut rechercher des anales d'examens selon :
J'ai mis la partie Ajax dans le programme index1.php qui initialise le formulaire et la génération des listes de choix dans le programme listeschoix.php. index1.php : Code PHP :
Code PHP :
Mais si l'utilisateur choisit maintenant une option supplémentaire dans une autre liste pour affiner son choix, la première sélection est annulée. Je ne trouve pas comment garder en mémoire, en deux appels Ajax, la ou les premières sélections qui ont été faites afin que le WHERE de mes requêtes s'alimente petit à petit de toutes les options choisies et que ces options choisies restent affichées comme sélectionnées dans les listes. Une idée ou une solution à me proposer ? Merci d'avance à ceux qui répondront.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||
|
00
|
|
|
#2 | |||||||||||
![]() ![]() |
Citation:
Une recherche dans les selles ?Bref. Avec 3 listes, ca se complique. Avec 4 listes ... encore plus. Exemple avec 4 listes : - onchange sur liste1 -> modifier liste2 + vider liste3 + vider liste4 - onchange sur liste2 -> modifier liste3 + vider liste4 - onchange sur liste3 -> modifier liste4 A chaque fois, on va transmettre a ajax les 4 valeurs (des 4 listes) Sauf erreur, ca pourrait donner ca : Code :
Code :
- listeslieesAjax-liste2.php Code :
Code :
Code :
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément." Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique. Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
|
|||||||||||
|
|
00
|
|
|
#3 |
![]() ![]() |
Merci pour la réponse mais ce n'est pas tout à fait comme ça que ça doit fonctionner.
Ce n'est pas d'abord choix dans liste 1 qui détermine le contenu de la liste 2 puis choix dans la liste 2 qui détermine le contenu de la liste 3... L'utilisateur peut faire un choix dans n'importe quelle liste en premier puis, s'il veut affiner sa recherche, dans n'importe laquelle des 3 autres listes etc... comme il veut et dans l'ordre qu'il veut. Mais ta réponse me donne quand même une idée que je testerai demain : passer en paramètre à la fonction AJAX les 4 choix qui peuvent potentiellement être vides et repasser en data à PHP ces 4 choix pour construire le WHERE et actualiser les listes. À suivre...
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#4 | ||||
|
Expert Confirmé
![]() ![]() |
Bonjour,
je me permets de me mêler de la conversation car ayant fait des tonnes de listes liées, je m'étais déjà penché sur la problématique et je vous soumets une piste de travail que j'ai adaptée à la problématique de CinePhil. L'approche diffère dans la mesure ou je profite de jQuery pour faire tout le boulot. Bon, c'est schématique, pas sécurisé mais l'approche est optimisée. L'idée consiste à ne mettre à jour que ce qui est nécessaire à savoir : les liste non encore sélectionnées. Celles qui l'ont été n'ont pas besoin de mise à jour, elles doivent nous donner leur sélection afin de pouvoir filtrer pour les autres listes. Donc nous avons 2 fichiers : un fichier initial avec les listes vierges et un fichier qui réceptionne et traite la requête de mise à jour. J'ai l'habitude d'échanger les données en xml donc je les renvoie au format xml et jQuery parcourt la réponse et fait les modifications nécessaires. Voici le fichier initial : Code :
Code :
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
||||
|
20
|
|
|
#5 |
![]() ![]() |
Ton expertise est toujours bienvenue.
Ton code me confirme que Jquery est vraiment plus facile à utiliser et très clair dans son écriture. Et ta gestion du $where est plus élégante que la mienne ...
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément." Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique. Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
|
|
|
00
|
|
|
#6 |
|
Membre éclairé
![]() Cyril Ingénieur développement logiciels Inscription : avril 2007 Messages : 205 ![]() |
Je suis d'accord, je n'avais jamais pensé à implode()
Sympa l'astuce
|
|
|
00
|
|
|
#7 |
![]() ![]() |
Merci pour ta réponse rawsrc mais, autant je suis arrivé à comprendre le fonctionnement du script de jreaux62, autant avec le tien, j'ai l'impression de déchiffrer de l'italien ou de l'espagnol : il y a des mots et des bouts de phrases que je comprends, d'autres qui m'échappent et des tournures de phrases qui me laissent très dubitatif quant à la compréhension de l'ensemble !
Comme dit dans mon premier message, je découvre Ajax. J'ajoute que je suis aussi un noob en Javascript ! En attendant, je crois que je vais tester mon idée émise hier soir après l'intervention de jreaux62.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#8 | |||||||||
|
Expert Confirmé
![]() ![]() |
Citation:
L'utilisation de jQuery fait que tu n'as plus à t'occuper du camboui de JS et accessoirement de la gestion de l'ajax, il s'occupe de tout et fait presque le café. En ayant les bases du javascript, il n'y a qu'à lire un peu la doc de jQuery pour s'en sortir. Le traitement des appels ajax et le remplacement du contenu des listes liées est réalisé que par cette unique fonction (que je m'empresse de commenter) : Code :
Code :
J'ai défini par convention que les nouvelles données des listes liées seront renvoyées au navigateur au format xml : Code :
Code :
Le script vérifie les données sélectionnées pour chaque liste afin de créer le filtre where. Les listes qui sont sans sélection, seront mises à jour en fonction des critères des listes voisines. Deuxièmement : Comme toujours n'ayant aucune données, je t'ai mis la chaine sql correspondant à ton modèle d'exemple (variable $sql) et j'ai simulé un retour de données de la base afin de pouvoir montrer l'alimentation du résultat xml. Troisièmement : Une fois toutes les données des listes sans sélection filtrées et assemblées, je les renvoies au navigateur en ayant au préalabale envoyé l'en-tête qui va bien. Et zou, un converti un Alors
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|||||||||
|
10
|
|
|
#9 | ||||
![]() ![]() |
Merci rawsc, je comprends mieux comment ça doit fonctionner... sauf que mon adaptation de ton code ne fonctionne pas.
index1.php : Code PHP :
Je passe sur le programme listechoix qui construit les listes d'origine car elles sont correctement construites avec toutes les valeurs nécessaires. majlistes.php : Code PHP :
Les listes ne se filtrent pas mutuellement, j'ai toujours toutes les valeurs dans toutes les listes.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||
|
00
|
|
|
#10 | ||
|
Expert Confirmé
![]() ![]() |
Eh bonsoir,
Mon exemple fonctionne bien mieux une fois corrigé une faute de syntaxe de ma part : j'ai oublié le # pour le sélecteur de jQuery dans cette partie de code. A ma décharge, j'ai utilisé le notepad sans tester, mais bon pas d'excuses qui tiennent, ça mérite ![]() Code :
Si intéressé, je publie
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
||
|
00
|
|
|
#11 |
![]() ![]() |
Merci.
J'ai eu du mal à le faire fonctionner mais j'y suis arrivé. J'étais embêté par le fait que la première ligne de mes listes contenait en quelque sorte le titre du contenu de la liste (--Diplôme--, --Année-- ...). Je pensais que ce qui était récupéré par Jquery était le paramètre value de l'option mais ce n'est pas le cas ? C'est ce qu'il y a entre <option> et </option> ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#12 | ||||||
|
Candidat au titre de Membre du Club
![]() |
Merci rawsrc pour votre exemple
J’ai essaye d'adapter votre code sur mon besoin J’ai une liste des projets, chaque projet possède des thèmes et des rondes alors lorsque je choisi un projet il va me filtrer la liste des rondes et des projets selon mon choix mais malheuresement ca marche pas Code :
Code :
Code :
|
||||||
|
00
|
|
|
#13 |
![]() ![]() |
Tu as adapté les requêtes SQL mais tu ne les a pas envoyées au serveur !
Il te manque le mysql_query. Regarde mon code dans majlistes.php mais laisse bien la première option totalement vide, contrairement à ce que j'avais fait et qui figure encore dans le code que j'ai posté. De plus, puisque tes identifiants sont numériques, ne fait pas un strlen mais un ctype_digit("{$res['num']}"). De même, dans la requête SQL, n'utilise pas mysql_escape_string pour des entiers mais intval et ne mets pas ces entiers entre apostrophes.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#14 |
|
Invité de passage
![]() Ingénieur après-vente Inscription : mai 2011 Messages : 11 ![]() |
Bonjour à tous,
Merci pour ces exemples, c'est en partie ce que je recherchais, particulièrement l'exemple de 4 listes de Jérôme. J'ai donc copié ses codes pour les tester, et ça fonctionne mais...ce n'est pas dynamique ! Je m'explique : -si je fais un choix dans la liste 1, ma liste 2 se modifie et affiche bien ce que j'ai mis dans listeslieesAjax-liste2.php -par contre, si je REFAIS un nouveau choix dans cette même liste 1, rien ne change dans la liste 2 ! Est-ce normal ? Merci d'avance pour votre aide |
|
|
00
|
|
|
#15 |
![]() ![]() |
Bonjour,
@elmanu13 : ouvre une autre discussion, stp. Sinon, on risque de faire des tirs croisés, et ne plus rien comprendre. [Edit] ok, pour
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément." Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique. Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
|
|
|
00
|
|
|
#16 | |||||
|
Candidat au titre de Membre du Club
![]() |
Citation:
j'ai fait comme vous avez dit Code php :
Code php :
mais le probleme existe encore le formualire ne marche pas |
|||||
|
00
|
|
|
#17 |
![]() ![]() |
Bonjour, pour citer Cirano : "c'est un peu court !" (comme explication)
As-tu mis des alert('...'); dans le javascript ? des echo '...'; ou var_dump() dans le php ? Ca te/nous permettrait au moins de savoir où ça coince, non ?
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément." Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique. Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
|
|
|
00
|
|
|
#18 |
|
Expert Confirmé
![]() ![]() |
Bonjour,
Dans le cadre de cette discussion et histoire de dépanner certains, j'ai publié un tutorial sur mon blog dvp concernant les listes liées : voir ici. Ce tutorial fournit une approche parmi d'autres (on verra plus tard les autres approches avec l'aide d'autres rédacteurs).
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|
10
|
|
|
#19 |
![]() ![]() |
Je viens de détecter un souci avec ce code de listes liées en testant l'appli.
Si l'utilisateur fait une sélection dans une liste, affiche un résultat puis veut faire une sélection différente en remettant une liste à la valeur vide puis en choisissant une autre valeur dans cette liste ou une autre, toutes les autres listes se vident et bien sûr aucun résultat n'est affiché. Euh... un peu compliquée mon explication ? Je détaille... 1) L'utilisateur choisit "Antilles" dans la liste "Session". => La liste des diplômes s'est réduite à 3 éléments 2) L'utilisateur clique sur le bouton "Chercher" => Le tableau de résultats est affiché, les listes sont remplies totalement et la liste "Session" affiche la sélection de l'utilisateur : "Antilles". Jusque là, tout va bien. 3) Ne trouvant pas ce qu'il cherche, l'utilisateur annule sa sélection dans la liste "Session" en y choisissant la ligne blanche. => Toutes les listes sont complètes, tout va bien ! 4) Il choisit maintenant "Réunion" dans la même liste "Session". => Toutes les autres listes se vident et un clic sur le bouton Chercher n'affiche aucun résultat alors qu'il y a effectivement des données pour la Réunion ! ![]() Je vais essayer d'analyser ce qui se passe au niveau du code mais si quelqu'un a une idée avant moi, il est le bienvenu !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#20 | |
|
Expert Confirmé
![]() ![]() |
Citation:
Sur le tuto que j'ai posté, je n'ai pas cet os.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com