bonjour,
je vous soumet mon problème
j'ai un formulaire avec deux listes en auto-complétion tiré du tutoriel trouvé sur developpez.com
http://x-zolezzi.developpez.com/tuto...utocompletion/
je l'ai un peu modifié pour que ça m'affiche dans le même select la ville et le département , ainsi qu'une deuxième liste pour l'arrivé ça fonctionne bien. je peux donc envoyer pour une insertion dans la table la ville de départ , le département de départ et la ville d'arrivé.
les deux liste interroge la même table "commune"( id_commune , villes, departement )
hors le script insert dans la table , systématiquement le département d'arrivé au lieu du département de départ.
je pense que la valeur du département renvoyé est celle du dernier select envoyé par le formulaire..
le formulaire
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <label for="ville">Ville de départ :*</label> <input id="ville1" name="vil_depart" type="text" /> <input type="hidden" id="departement" name="departement" value="" /> <label for="ville">Ville de déstination :*</label> <input id="villes" name="vil_arrive" type="text"/>
le js
Code javascript : 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
72
73
74
75
76
77 var cache = {}; $(function () { $("#departement, #villes,#ville1").autocomplete({ source: function (request, response) { //Si la réponse est dans le cache if (('FR' + '-' + request.term) in cache) { response($.map(cache['FR' + '-' + request.term], function (item) { return { label: item.departement + " / " + item.villes, value: function () { if ($(this).attr('id') == 'departement') { $('#villes').val(item.villes); return item.departement; } else { $('#departement').val(item.departement); return item.villes; } } } })); } //Sinon -> Requete Ajax else { var objData = {}; if ($(this.element).attr('id') == 'departement') { objData = { departement: request.term, pays: 'FR', maxRows: 10 }; } else { objData = { villes: request.term, pays: 'FR', maxRows: 10 }; } $.ajax({ url: "./autocomplete.php", dataType: "json", data: objData, type: 'POST', success: function (data) { //Ajout de reponse dans le cache cache[('FR' + '-' + request.term)] = data; response($.map(data, function (item) { return { label:item.villes + " / " +item.departement , value: function () { if ($(this).attr('id') == 'departement') { $('#villes').val(item.villes); return item.departement; } else { $('#departement').val(item.departement); return item.villes; } } } })); } }); } }, minLength: 3, delay: 600 }); });
le fichier autocomplete.php
et le fichier AutoCompletionCPVille.class.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 //Construction de la requete $strQuery = "SELECT villes,departement,id_commune FROM communes WHERE "; if (isset($_POST["villes"])) { $strQuery .= "villes LIKE :villes "; } else { $strQuery .= "departement LIKE :departement AND id_commune LIKE :id_commune "; } if (isset($_POST["maxRows"])) { $strQuery .= "LIMIT 0, :maxRows"; } $query = $db->prepare($strQuery); if (isset($_POST["villes"])) { $value = $_POST["villes"]."%"; $query->bindParam(":villes", $value, PDO::PARAM_STR); } else { $value = $_POST["id_commune"]."%"; $query->bindParam(":id_commune", $value, PDO::PARAM_STR); } if (isset($_POST["maxRows"])) { $valueRows = intval($_POST["maxRows"]); $query->bindParam(":maxRows", $valueRows, PDO::PARAM_INT); } $query->execute(); $list = $query->fetchAll(PDO::FETCH_CLASS, "AutoCompletionCPVille");; echo json_encode($list);
merci pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?php class AutoCompletionCPVille { public $villes; public $departement; public $id_commune; } ?>
Partager