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 !