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

AJAX Discussion :

[AJAX] Remplir un formulaire après sélection dans une liste déroulante


Sujet :

AJAX

  1. #1
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut [AJAX] Remplir un formulaire après sélection dans une liste déroulante
    Bonjour,

    j'ai recherché sur le forum et sur Google avant de poster ici mais rien ne correspond à mon problème (ou alors la solution ne fonctionne pas).

    J'ai une liste déroulante liste_name de noms alimentée par une requête SQL, et à côté, les champs d'un formulaire form_nom.
    J'aimerai, dès que je sélectionne un nom dans la liste, que les champs se remplissent (prénom et age) avec les données correspondantes.

    Ex : je clique sur "machin" dans la liste, et directement je remplis prenom : truc, age : 15.

    J'ai vu une solution sur le forum qui ne faisait qu'utiliser Javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function choicecepage()
    {
    	document.form_nom.prenom.value = document.form_nom.liste_name.options[document.form_nom.liste_name.selectedIndex].text;
     
    	document.form_nom.age.value = document.form_nom.liste_name.options[document.form_nom.liste_name.selectedIndex].text;
     
    }
    Et la liste associée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $req = 'SELECT nom,prenom,age FROM Personnes;';
    echo '<select id="liste_name" name="liste_name" multiple size="8">';
    $res = mysql_query($req);
    // Affichage des valeurs dans la liste
    while ($ligne = mysql_fetch_array($res))
    {
    	echo '<option value='.$ligne[0].' onClick="choicecepage();">'.$ligne[1].'</option>';
    }
    echo '</select>';
    Quand je fais ceci, mes champs sont tous remplis avec la valeur sur laquelle j'ai cliqué (par exemple, prenom et age seront remplis avec la valeur "machin").

    Je me suis donc dit que je devais me tourner vers Ajax.
    J'ai créé une page saisie.php dans laquelle je mets mon XMLHttpRequest, ainsi que le code pour la liste déroulante.

    saisie.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
    <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 appelée dès click sur un élément de la liste déroulante
    			function go(){
    				var xhr = getXhr()
    				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){
    						alert(xhr.responseText);
    					}
    				}
    				// On envoie la page dans laquelle se trouve l'action à faire dès click sur un élément
    				xhr.open("GET","Ajax.php",true);
    				xhr.send(null);
    			}
    </script>
     
    <?php
     
    $req = 'SELECT nom,prenom,age FROM Personnes;';
    echo '<select id="liste_name" name="liste_name" multiple size="8">';
    $res = mysql_query($req);
    // Affichage des valeurs dans la liste
    while ($ligne = mysql_fetch_array($res))
    {
            echo '<option value='.$ligne[0].' onClick="choicecepage();">'.$ligne[1].'</option>';
    }
    echo '</select>';
    ?>
    Et une autre page Ajax.php dans laquelle il n'y a qu'un bête echo pour le moment.
    Et je ne vois pas où est-ce que je devrais écrire les valeurs que doivent prendre mes champs de formulaire, ni comment.

    Donc puis-je garder la solution Javascript (mais il y aura des choses à changer) ou dois-je obligatoirement passer par Ajax (mais je ne vois pas comment écrire mon code :/) ?

    Merci !

  2. #2
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Oui il faut que tu passes par Ajax.

    En gros, la façon de faire est la suivante:
    1/ Sur ton select, tu mets une fonction ajax sur onchange qui va envoyer au serveur l'id du name choisi.
    2/ Sur ton serveur, tu récupères cet id, tu vas chercher dans ta base tes infos correspondantes et tu les écrit dans la réponse (par exemple via JSON)
    3/ Dans le callback, tu recupères les infos que t'as envoyé le serveur, et tu les mets dans chacun de tes inputs.

  3. #3
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Merci DoubleU pour ta réponse ! Je testerai dès que possible ce que tu m'as dit !

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    bonjour,


    as-tu réussi à faire fonctionner le tout ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 25
    Points : 22
    Points
    22
    Par défaut recherche d'exemple
    Citation Envoyé par DoubleU Voir le message
    Oui il faut que tu passes par Ajax.

    En gros, la façon de faire est la suivante:
    1/ Sur ton select, tu mets une fonction ajax sur onchange qui va envoyer au serveur l'id du name choisi.
    2/ Sur ton serveur, tu récupères cet id, tu vas chercher dans ta base tes infos correspondantes et tu les écrit dans la réponse (par exemple via JSON)
    3/ Dans le callback, tu recupères les infos que t'as envoyé le serveur, et tu les mets dans chacun de tes inputs.
    bonjour
    je recherche un exemple sur cette façon de faire
    merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/01/2016, 11h30
  2. Réponses: 12
    Dernier message: 19/06/2014, 11h28
  3. Réponses: 8
    Dernier message: 18/02/2013, 20h01
  4. [ODBC] Garder une saisie après sélection dans une liste déroulante
    Par nawak.seb dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 27/08/2008, 14h48
  5. Réponses: 16
    Dernier message: 04/07/2008, 08h07

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