Page 1 sur 1

champ texte et liste déroulante

Posté : 24 oct. 2019, 19:18
par leblaireau
Bonjour

Je suis bloque sur un script qui doit me permettre d'avoir dans une liste déroulante le département par rapport au code postal rentré dans le champ texte
Dans ma table département j'ai un iddepartement qui n'est pas le n° du département (par exemple la gironde 33 a l'id 5) J'ai fait cela au cas ou il y aurait des changements de département ou autre
J'ai déjà posté mon problème sur d'autres forum mais je me dis que plus je pourrais exposer mon problème j'aurais peut être plus de chance à a voir la solution
J'essaie d'utiliser Ajax car ce formulaire n'est qu'un bout d'un formulaire que j'enregistre
Donc voici mon formulaire avec le script utilisant ajax

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/javascript"> function getXhr(){ var xhr = null; if(window.XMLHttpRequest) // Firefox et autres xhr = new XMLHttpRequest(); else if(window.ActiveXObject){ // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } } else { // XMLHttpRequest non supporté par le navigateur alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); xhr = false; } return xhr; } /** * Méthode qui sera appelée après avoir "quitter" le champ input codepostal */ function select_dept_from_cp(){ var xhr = getXhr(); // On défini ce qu'on va faire quand on aura la réponse xhr.onreadystatechange = function(){ // On ne fait quelque chose que si on a tout reçu et que le serveur est ok if(xhr.readyState == 4 && xhr.status == 200){ leselect = xhr.responseText; // On se sert de innerHTML pour rajouter les options a la liste document.getElementById('lst_departements').innerHTML = leselect; } } // Ici on va voir comment faire du post xhr.open("POST","choixdepartement.php",true); // rajout pour le post xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); // ici la valeur du code postal codepostal = document.getElementById('codepostal').value; console.log(codepostal); xhr.send("codepostal="+codepostal); } //--> </script> </head> <?php include('../01_scripts/connexion.php'); ?> <body> <form id="cp" method="post" action=""> <table width="100%" border="1" cellspacing="1" cellpadding="0"> <tbody> <tr> <td>Code Postal</td> <td><input type="text" name="codepostal" id="codepostal" size="6" onkeyup="select_dept_from_cp();"></td> </tr> <tr> <td>Le département </td> <td> <div id='lst_departements' style='display:inline'> <select name='lst_departements'></select> </div> </td> </tr> <tr> <td colspan="2">&nbsp;</td> </tr> <tr> <td colspan="2"><input type="submit" name="envoyer" value="Enregistrer"</td> </tr> </tbody> </table> </form> </body> </html>
et voici mon fichierchoixdepartement.php qui gère les départements

Code : Tout sélectionner

<?php header('Content-type:text/html; charset=UTF-8'); include('../01_scripts/connexion.php'); // connexion à la base echo "<select name='lst_departements'>"; if(isset($_POST['codepostal'])) { $codePostal=$_POST['codepostal']; $departementNumero = substr($codePostal,0,-3); $sql = "SELECT departementId,departementLibelle,departementNumero FROM gp_departements WHERE departementNumero = '$departementNumero'"; $req = $db->prepare($sql); $req->bindValue(':departementNumero', $departementNumero,PDO::PARAM_INT); $req->execute(); $r = $req->fetch(); $departementId=$r['departementId']; $departementLibelle=$r['departementLibelle']; while ($r = $req->fetch()) { echo "<option value='".$r["departementId"]."'>".$r["departementLibelle"]."</option>"; } } echo "</select>"; ?>
Dans ma console js je vois bien quand je tape les numéros du code postal mais impossible d'afficher le département correspondant à mon code postal
Cela fait une semaine que je suis dessus et là je commence à craquer !!
Ou est mon erreur ???

Cordialement

Re: champ texte et liste déroulante

Posté : 24 oct. 2019, 19:56
par or 1
dans la console, il faut vérifier que le fichier fichierchoixdepartement.php est bien appelé. ensuite, il faut l'ouvrir pour voir si des erreurs s'affichent. par exemple, un paramètre est passé à la requete sql mais il n'existe pas dans la requete.
une fois que le php fonctionne, le reste devrait aller mieux.
faire de l'ajax avec jquery ou autre librairie, c'est plus simple.
je ne vois pas l'interet d'une liste déroulante car il ne peut y avoir qu'un seul département pour un code postal.
en tapant entremont dans http://www.monbeauvillage.fr/saint on peut voir que 2 villages qui ont le même nom, le même code postal ne sont pas dans le même département. donc déduire le département du code postal n'est pas juste dans 100% des cas.

Re: champ texte et liste déroulante

Posté : 25 oct. 2019, 08:57
par leblaireau
Salut

Tout d'abord merci de ta réponse

J'ai mis dans mon fichier choixdepartement.php avant le select de la liste un echo "toto"; et la quand je rentre 12100 dans mon input je vois bien toto au dessus de ma liste (qui est vide) : apparemment je rentre pas dans le select pour construire ma liste : pourtant dans mon post je passe bien le code postal mais apparemment il ne le prend pas !!
Pourquoi ??? That is the question ??

Cordialement