bonsoir, j ai récupéré sur le net un code ajax pour liée 3 liste, je l ai testé en local et il fonctionne, j ai voulu l adapté pour ma situation
a première vu j ai cru qu' il fonctionnait, cependant le résultat sur mon select 3 n est pas bon et je sais pas pourquoi
j ai mis ma liste liée en ligne pour que vous puissiez comprendre concrètement a cette adresse http://www.creaweb68.fr/CW/autotran/liste_dynamique/
si dans le select catégorie on choisi CABRIOLET le 2 eme donne Peugeot... jusque la tout va bien mais si je click sur Peugeot il me renvoi dans le troisième select plusieurs modèle alors que j en possède Qu' un dans ma base ..
voici le code que j utilise:
mon ajax
mon php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
62
63
64
65
66
67
68
69
70
71 // JavaScript Document $(document).ready(function() { var $Carosserie = $('#Carosserie'); var $Marque = $('#Marque'); var $Modele = $('#Modele'); // chargement de la liste de localité un $.ajax({ url: 'liste.php', data: 'go', // on envoie $_GET['go'] dataType: 'json', // on veut un retour JSON success: function(json) { $.each(json, function(index, value) { // pour chaque noeud JSON // on ajoute l option dans la liste $('#Carosserie').append('<option value="'+ index +'">'+ value +'</option>'); }); } }); // à la sélection de la localité un dans la liste $Carosserie.on('change', function() { var val = $(this).val(); // on récupère la valeur de la localité un if(val != '') { $Marque.empty(); // on vide la liste de localité deux $Marque.append('<option value="">Marque</option>'); $.ajax({ url: 'liste.php', data: 'Carosserie='+ val, // on envoie $_GET['localite_un'] dataType: 'json', success: function(json) { $.each(json, function(index, value) { $Marque.append('<option value="'+ index +'">'+ value +'</option>'); }); } }); } else { $Marque.empty(); $Marque.append('<option value="">Marque</option>'); $Modele.empty(); // on vide la liste de localité deux $Modele.append('<option value="">Modele</option>'); } }); // à la sélection de la localité deux dans la liste $Marque.on('change', function() { var val = $(this).val(); // on récupère la valeur de la localité deux if(val != '') { $Modele.empty(); // on vide la liste de localité trois $Modele.append('<option value="">Modele</option>'); $.ajax({ url: 'liste.php', data: 'Marque='+ val, // on envoie $_GET['localite_deux'] dataType: 'json', success: function(json) { $.each(json, function(index, value) { $Modele.append('<option value="'+ index +'">'+ value +'</option>'); }); } }); } else { $Modele.empty(); $Modele.append('<option value="">Modele</option>'); } }); });
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php // Vérification des paramètres d'accès au fichier liste.php if(isset($_GET['go']) || isset($_GET['Carosserie']) || isset($_GET['Marque'])) { // connexion à la base de données try { $bdd = new PDO('mysql:host=localhost;dbname=Autotransaction', 'root', ''); } catch(Exception $e) { exit('Impossible de se connecter à la base de données.'); } $json = array(); if(isset($_GET['go'])) { // requête qui récupère les localités un $requete = "SELECT DISTINCT(Carosserie) FROM autotran "; // exécution de la requête $resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo())); // Création de la liste while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) { // je remplis un tableau et mettant l'id en index $json[$donnees["Carosserie"]][] = utf8_encode($donnees["Carosserie"]); //execute la requete,recupere les resultats et fusionne avec le modele html } } elseif(isset($_GET['Carosserie'])) { // requête qui récupère les localités un $requete = "SELECT DISTINCT(Marque) FROM autotran WHERE Carosserie = '".$_GET['Carosserie']."' "; // exécution de la requête $resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo())); // Création de la liste while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) { // je remplis un tableau et mettant l'id en index $json[$donnees["Marque"]][] = utf8_encode($donnees["Marque"]); } } elseif(isset($_GET['Marque'])) { // requête qui récupère les localités un $requete = "SELECT DISTINCT(Modele) FROM autotran WHERE Marque = '".$_GET['Marque']."'"; // exécution de la requête $resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo())); // Création de la liste while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) { // je remplis un tableau et mettant l'id en index $json[$donnees["Carosserie"]][] = utf8_encode($donnees["Modele"]); } } // envoi du résultat au success echo json_encode($json); } ?>
et mon html
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <html> <head> <script type="text/javascript" src="jquery-1.7.1.min.js"></script> <script type="text/javascript" src="liste.js"></script> </head> <body> <select id="Carosserie"> <option value="">Catégories</select> </select> <br /> <select id="Marque"> <option value="">Marque</select> </select> <br /> <select id="Modele"> <option value="">Modele</select> </select> </body> </html>
merci d avance pour l aide apporté
Partager