IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Le code postal met à jour la liste des villes (Ajax/PHP)


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut Le code postal met à jour la liste des villes (Ajax/PHP)
    Bonjour,

    J'ai essayé de m'inspirer de ceci http://siddh.developpez.com/articles/ajax/ pour réaliser un liste déroulante qui se remplit en fonction du code postal saisi dans une zone de texte adjacente.

    J'ai testé, le "Saisissez le code postal" est bien remplacé par "Choisissez la ville" sur le onchange(), mais la liste ne se remplit pas :

    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
    <html>
    	<head>
    		<title>Tutoriel Ajax (XHTML + JavaScript + XML)</title>
    		<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 sur le click du bouton
    			*/
    			function go(){
    				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('ville').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","v_inc/ajaxVilles.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				// ici, l'id de l'auteur
    				sel = document.getElementById('codePostal');
    				//codePostal = sel.options[sel.selectedIndex].value;
    				codePostal = document.forms.a.codePostal.value;				
    				xhr.send("codePostal="+codePostal);
    			}
    		</script>
    	</head>
    	<body>
    		<form name="a">
    			<fieldset style="width: 500px">
    				<legend>Liste liées</legend>
    				<label>Code Postal</label>
    				<input type="text" name='codePostal' id='codePostal' onchange='go()'/>
    				<label>Ville</label>
    				<div id='ville' style='display:inline'>
    				<select name='ville'>
    					<option value='-1'>Saisissez le code postal</option>
    				</select>
    				</div>
    			</fieldset>
    		</form>
    	</body>
    </html>
    fichier ajaxVilles.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
            echo '<select name="ville">';
            if(isset($_POST["codePostal"])){
                    /*mysql_connect("localhost","root","root");
                    mysql_select_db("test");*/
                    $res = mysql_query("SELECT * FROM sg_ville WHERE codePostal=".$_POST["codePostal"]." ORDER BY ville");
                    echo '<option value="-1">Choisissez la ville</option>';
                    while($row = mysql_fetch_assoc($res)){
                            echo '<option value="'.$row["idVille"].'">'.$row["ville"].'</option>';
                    }
            }
            echo '</select>';
    ?>
    Et le contenu de ma table :
    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
    --
    -- Structure de la table `sg_ville`
    --
     
    CREATE TABLE IF NOT EXISTS `sg_ville` (
      `idVille` int(11) NOT NULL AUTO_INCREMENT,
      `pays` text NOT NULL,
      `codePostal` int(11) NOT NULL,
      `ville` text NOT NULL,
      PRIMARY KEY (`idVille`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
     
    --
    -- Contenu de la table `sg_ville`
    --
     
    INSERT INTO `sg_ville` (`idVille`, `pays`, `codePostal`, `ville`) VALUES
    (1, 'FR', 68440, 'BRUEBACH'),
    (2, 'FR', 68440, 'HABSHEIM'),
    (3, 'FR', 68000, 'COLMAR'),
    (4, 'FR', 68040, 'INGERSHEIM');
    J'ai annulé la connexion à la bbd car elle est déjà établie dans Joomla.
    Pour l'instant je teste dans des pages php vierges le code sera intégré à mes formulaires chronoforms une fois fonctionnel.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Attention !

    name != id

    ton select a un name
    ton javascript attribue un innerHTML à un element avec getElementById()

    rajoute un id à ton select

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    en complément (pour IE !), il ne faut pas que l'id du div corresponde au name du select.
    Donc quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	<div id='div_ville' style='display:inline'>
    <select name='ville' id='ville'>
    Ta fonction Ajax (pour le innerHTML) devra donc faire référence au div_ville ...

    A+

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    oui un id doit être unique sur la page ...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    OK j'ai corrigé cela :
    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
    <html>
    	<head>
    		<title>Tutoriel Ajax (XHTML + JavaScript + XML)</title>
    		<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 sur le click du bouton
    			*/
    			function go(){
    				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('div_ville').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","v_inc/ajaxVilles.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				// ici, l'id de l'auteur
    				sel = document.getElementById('codePostal');
    				//codePostal = sel.options[sel.selectedIndex].value;
    				codePostal = document.forms.a.codePostal.value;				
    				xhr.send("codePostal="+codePostal);
    			}
    		</script>
    	</head>
    	<body>
    		<form name="a">
    			<fieldset style="width: 500px">
    				<legend>Liste liées</legend>
    				<label>Code Postal</label>
    				<input type="text" name="codePostal" id="codePostal" onchange="go()"/>
    				<label>Ville</label>
    				<div id="div_ville" style="display:inline">
    				<select name="ville" id="ville">
    					<option value="-1">Saisissez le code postal</option>
    				</select>
    				</div>
    			</fieldset>
    		</form>
    	</body>
    </html>
    Mais j'ai toujours le même résultat...

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Ton paramètre ne doit pas être passé correctement car tu mélanges 2 syntaxes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    codePostal = document.forms.a.codePostal.value;
    Utilise soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    codePostal = document.forms['a'].elements['codePostal'].value;
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    codePostal = document.a.codePostal.value;
    La 1° est à privilégier
    (de loin !)

    A+

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    Je l'ai corrigé (la n° 1) mais ça ne change rien...
    C'est ça quand on essaye d'adapter !!

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    En fait (j'avais pas fait attention ) tu pouvais faire plus simple avec ton code existant, puisque tu avais déjà ciblé l'input avec getElementById() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sel = document.getElementById('codePostal');
    //codePostal = sel.options[sel.selectedIndex].value;
    codePostal = sel.value;
    Mais ça aurait dû fonctionner quand même

    Du coup, il faudrait nous remontrer le code actuel.

    A+

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Arf !

    C'est en me relisant que je vois le problème : il faut nommer ta variable autrement sinon elle correspond à l'id de l'input (pas glop )

    Appelle-là varCodePostal par exemple ...

    A+

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    J'ai modifié en conséquence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    				sel = document.getElementById('codePostal');
    				//codePostal = sel.options[sel.selectedIndex].value;
    				varCodePostal = document.forms['a'].elements['codePostal'].value;			
    				xhr.send("codePostal="+CodePostal);
    Puis comme ça ne donnait toujours pas de résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    				sel = document.getElementById('codePostal');
    				//codePostal = sel.options[sel.selectedIndex].value;
    				varCodePostal = document.forms['a'].elements['codePostal'].value;			
    				xhr.send("codePostal="+varCodePostal);
    Et j'en suis toujours au même stade..
    Donc dans le post suivant, le code de la page codepostal.php (la page ajaxVilles.php n'ayant pas été modifiée depuis le départ).

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    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
    <html>
    	<head>
    		<title>Tutoriel Ajax (XHTML + JavaScript + XML)</title>
    		<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 sur le click du bouton
    			*/
    			function go(){
    				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('div_ville').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","v_inc/ajaxVilles.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				// ici, l'id de l'auteur
    				sel = document.getElementById('codePostal');
    				//codePostal = sel.options[sel.selectedIndex].value;
    				varCodePostal = document.forms['a'].elements['codePostal'].value;			
    				xhr.send("codePostal="+varCodePostal);
    			}
    		</script>
    	</head>
    	<body>
    		<form name="a">
    			<fieldset style="width: 500px">
    				<legend>Liste liées</legend>
    				<label>Code Postal</label>
    				<input type="text" name="codePostal" id="codePostal" onChange="go()"/>
    				<label>Ville</label>
    				<div id="div_ville" style="display:inline">
    				<select name="ville" id="ville">
    					<option value="-1">Saisissez le code postal</option>
    				</select>
    				</div>
    			</fieldset>
    		</form>
    	</body>
    </html>

  12. #12
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par LadyArwen Voir le message
    Et j'en suis toujours au même stade..
    Lequel, au fait ?
    Tu ne nous as pas dit ce que tu obtenais ?
    Une erreur ?

    Que te renvoie le responseText ?

    A+

  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    attribues le responseText en innrHTML à ne balise <pre> ou fais en un alert pour voir ce qu'il y a dedans

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut

    Merci pour le tuyau,
    j'ai testé le responseText sur ton conseil (c'est pas mon langage de prédilection le Javascript, je fais du devinage) et ça m'a permis de trouver la faille... un truc à la con comme d'hab !
    Il fallait quand même se reconnecter à la bdd... Bizarre, pour tous mes autres forms j'ai pas eu besoin !
    Donc a y est j'ai mes patelins, trop génial !!
    Mille milliards de mercis pour votre aide, comme d'hab !


    je vais maintenant pourvoir l'intégrer à mon chronoforms en espérant que ça marche toujours après !

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    ah merci spacefrog pour ta réponse qui est arrivée entre temps, j'ai fait un alert effectivement !
    Quelques vieux souvenirs de mes cours d'y a 6 ans

  16. #16
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Oui je me disais bien que l'on avait déja du se croiser, c'était sur le forum js ou vb ?

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut J'aimerais aller plus loin...
    J'enlève le résolu parce que j'aimerais aller plus loin.
    Je souhaiterais que lorsqu'il n'y a pas de ville pour le code postal l'affichage change et que l'utilisateur ait la possibilité de saisir une ville manuellement (lorsque c'est une adresse en Suisse par exemple, ce qui arrive de temps en temps). Je ne vais pas m'amuser à intégrer la liste de toutes les localités du monde dans notre base de données !

    Donc en résumé ce que j'aimerais obtenir :
    [texte: saisie code postal] --on change()--> 2 cas de figure avec 2 affichages :
    1) code postal répertorié dans la base --> [liste déroulante : avec les villes]
    2) code postal non répertoiré --> message ["Code postal non répertoiré, vérifiez votre saisie ou saisissez la ville ci-dessous, si étranger"] --> [zone de texte : saisie de la ville]

    J'ai essayé de modifier le fichier ajaxVilles en rajoutant un test :

    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
    <?php
    if(isset($_POST["codePostal"])){
    mysql_connect("localhost","root","");
    mysql_select_db("joserfages");
    $res = mysql_query("SELECT * FROM sg_ville WHERE codePostal=".$_POST["codePostal"]." ORDER BY ville");
    	if (mysql_num_rows($res)>0) {
    		echo '<select name="ville">';
    		echo '<option value="-1">Choisissez la ville</option>';
    		while($row = mysql_fetch_assoc($res)) {
    		echo '<option value="'.$row["idVille"].'">'.$row["ville"].'</option>';
    		}
    	echo '</select>';
    	}
    	else {
    		//echo 'le code postal n\'est pas répertoiré...';		
    		echo '<input type="text" name="ville" id="txtVille"/>';
    	}
    }
     
    ?>
    Bien évidemment ça n'a pas fonctionné, j'en ai déduit que le champ texte en question devrait peut-être exister dans le formulaire de la page codePostal.php ?

    En fait je n'ai pas trop compris comment cette partie-là (en vert) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    		<form name="a">
    			<fieldset style="width: 500px">
    				<legend>Liste liées</legend>
    				<label>Code Postal</label>
    				<input type="text" name="codePostal" id="codePostal" onChange="go()"/>
    				<label>Ville</label>
    				<div id="div_ville" style="display:inline">
    				<select name="ville" id="ville">
    					<option value="-1">Saisissez le code postal</option>
    				</select>				</div>
    			</fieldset>
    		</form>
    Pouvait être remplacée par celle-ci (j'ai pas saisi la logique d'AJAX je crois bien) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	echo '<select name="ville">';
    	if(isset($_POST["codePostal"])){
    		mysql_connect("localhost","root","");
    		mysql_select_db("joserfages");
    		$res = mysql_query("SELECT * FROM sg_ville WHERE codePostal=".$_POST["codePostal"]." ORDER BY ville");
    		echo '<option value="-1">Choisissez la ville</option>';
    		while($row = mysql_fetch_assoc($res)){
    			echo '<option value="'.$row["idVille"].'">'.$row["ville"].'</option>';
    		}
    	}
    	echo '</select>';

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Oui je me disais bien que l'on avait déja du se croiser, c'était sur le forum js ou vb ?
    Peut-être bien les deux, je faisais un peu de VB vers 2000-2002 pour un stage.

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    Je me documente et je crois comprendre que cette ligne (et plus particulièrement responseText) affecte le résultat du traitement effectué dans ajaxVilles au div div_ville :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    leselect = xhr.responseText;
    document.getElementById('div_ville').innerHTML = leselect;
    Si c'est bien ça je DEVRAIS pouvoir remplacer le select par un champ text...

    Eh bien non pas moyen, la seule chose que j'arrive à faire c'est changer la valeur d'un élement qui existe déjà dans le formulaire d'origine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <form name="a">
    			<fieldset style="width: 500px">
    				<legend>Liste liées</legend>
    				<label>Code Postal</label>
    				<input type="text" name="codePostal" id="codePostal" onChange="go()"/>
    				<label>Ville</label>
    				<div id="div_ville" style="display:inline">
    				<select name="ville" id="ville">
    					<option value="-1">Saisissez le code postal</option>
    				</select>
                    <input type="text" name="verif" id="verif" value="Vérif"/>
    				</div>
    			</fieldset>
    		</form>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    	echo '<select name="ville">';
    	if(isset($_POST["codePostal"])){
    		mysql_connect("localhost","root","");
    		mysql_select_db("joserfages");
    		$res = mysql_query("SELECT * FROM sg_ville WHERE codePostal=".$_POST["codePostal"]." ORDER BY ville");
    		echo '<option value="-1">Choisissez la ville</option>';
    		while($row = mysql_fetch_assoc($res)){
    			echo '<option value="'.$row["idVille"].'">'.$row["ville"].'</option>';
    		}
    	}
    	echo '</select>';
    	echo '<input type="text" name="verif" value="'. mysql_num_rows($res) .'"/>';
    ?>
    Et si je supprime la ligne
    <input type="text" name="verif" id="verif" value="Vérif"/>
    Plus rien ne fonctionne...

    Or je ne veux pas rajouter de zone de texte dans mon formulaire au départ, j'aimerais qu'elle s'affiche à la place de la liste déroulante en cas où le code postal n'existe pas dans la base...
    Ca y est je monologue, ça craint mdr !

  20. #20
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    tu es sur que :
    1- tes id sont uniques sur la page
    2- ton responseTexte est bien formé ??

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Mettre à jour la liste des items de combobox
    Par sagesse2 dans le forum VB.NET
    Réponses: 8
    Dernier message: 05/01/2015, 09h56
  2. Mettre a jour la liste des modules innexistant.
    Par yoanneox dans le forum Odoo (ex-OpenERP)
    Réponses: 6
    Dernier message: 08/02/2014, 10h43
  3. Réponses: 2
    Dernier message: 08/01/2013, 14h08
  4. Liste des villes et codes postaux
    Par CynO dans le forum Services
    Réponses: 11
    Dernier message: 27/09/2007, 01h07
  5. Mettre à jour la liste des packages
    Par roi_soleil dans le forum Mandriva / Mageia
    Réponses: 13
    Dernier message: 11/08/2006, 08h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo