[AJAX] 3ème liste déroulante vide

Résolu/Fermé
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007 - 27 juin 2007 à 19:45
 Alain42 - 2 juil. 2007 à 16:59
Bonjour,

Je suis étudiante en licence multimédia et je n'ai commencé que depuis octobre le HTML puis depuis janvier j'ai commencé à voir les langages PHP et Javascript et la technologie AJAX. Je me galère depuis deux semaines à trouver une solution pour 3 listes déroulantes. C'est très important pour moi, je suis toute seule et personne pour m'aider. Je lis des tutoriaux toute la journée mais j'ia du mal à tout saisir.'ai repris le code sur les livres et auteurs https://siddh.developpez.com/articles/ajax/#LIV-A. D'ailleurs qui est un excellent tutorial.
J'ai voulu rajouter une 3ème liste, mais malheureusement, elle ne se charge pas.

Je ne demande pas de réponse toute faite, mais comprenez ça fait plus de deux semaines que je suis dessus...S'il-vous-plait de l'aide

Voici une partie de mon formulaire dans lequel il y a mes trois listes déroulantes:
<div id="corps">
<form method="POST" name="formulaire" action="inscription1.php" onsubmit="return validateForm(this)">
<div id="titreForm">Inscription à une formation</div>
<div id="corpForm">
	<fieldset id="formation">
		<legend>Formation</legend>
			<br />
			<p>
				<label for="forma" title="Veuillez sélectionner la formation souhaitée" class="oblig">*Formation souhaitée :</label>
				 <? include 'liste-formations2.php'; ?>
			</p>
			<p>
				<label for="date_forma" title="Veuillez sléectionner la date souhaitée" class="oblig">*Date:</label>
				 <span id="date_form" style='display:inline'>
				 <? include 'liste-dates2.php'; ?>
			
				 </span>
			</p>
			<p>	
				  <label for="ref_forma" title="Veuillez saisir le lieu souhaité" class="oblig">Lieu :</label>
				  <span id="lieu_form" style='display:inline'>
    			<? include 'liste-lieux2.php'; ?>
				 </span>
			</p>

	</fieldset>


Voici mes fonctions AJAX :
  
			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;
			}
			
			
			
			///// relation formation-date //////
			/**
			* Méthode qui sera appelée sur le click du bouton
			*/
			function getDatte(){
				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 en utilisant l'id du span
						document.getElementById('date_form').innerHTML = leselect;
					}
				}

				// Ici on va voir comment faire du post
				xhr.open("POST","liste-dates2.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 du select de la formation
				sel = document.getElementById('formations');
				idForma = sel.options[sel.selectedIndex].value;
				xhr.send("id_formations="+idForma);
			}
			
			
			
			
			///// relation date-lieu //////
			/**
			* Méthode qui sera appelée sur le click du bouton
			*/
			function getLieu(){
				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 en utilisant l'id du span
						document.getElementById('lieu_form').innerHTML = leselect;
					}
				}

				// Ici on va voir comment faire du post
				xhr.open("POST","liste-lieux2.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 du select de la date
				sel = document.getElementById('date_for');
				idDatte = sel.options[sel.selectedIndex].value;
				xhr.send("id_date="+idDatte);
			}



Puis ma page liste-formations2.php :
<?PHP
// include("connexionbd.php");
// Variables de connexion : ajustez ces paramètres selon votre propre environnement 
/* */$serveur = "localhost";
$user   = "root";
$mdp     = "";
$base    = "agilicom"; 

$connexion = mysql_connect($serveur, $user, $mdp) or die ("Connexion au serveur impossible");
if (!$connexion) {
	die('Could not connect: ' . mysql_error());
}
$choixbase = mysql_select_db($base, $connexion);
?>

<select name='forma' id='formations' onchange='getDatte()'>
<option value='-1'>Formations</option>
<?php
$sql = "SELECT id_formations, nom_formations
		FROM formation
		ORDER BY nom_formations";
$res = mysql_query ($sql) or die ("Exécution de la requête impossible");
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row['id_formations']."'>".$row['nom_formations']."</option>";
}
?>
</select>



Ma page liste-dates2.php :
<?PHP
// include("connexionbd.php");
// Variables de connexion : ajustez ces paramètres selon votre propre environnement 
/* */$serveur = "localhost";
$user   = "root";
$mdp     = "";
$base    = "agilicom"; 

echo "<select name='date_formation' id='date_for' onchange='getLieu()'>";
if(isset($_POST["id_formations"])){

$connexion = mysql_connect($serveur, $user, $mdp) or die ("Connexion au serveur impossible");
if (!$connexion) {
	die('Could not connect: ' . mysql_error());
}

$choixbase = mysql_select_db($base, $connexion);

$res = mysql_query("SELECT*
					FROM date_formations
					WHERE id_formations= '".$_POST["id_formations"]."'
					ORDER BY date_date");
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row["id_date"]."'>".$row["date_date"]."</option>";
}
}
else
echo "<option value='-1'>Choisir une date</option>";
echo "</select>";


?>


Enfin ma page liste-lieux2.php :
<?PHP
// include("connexionbd.php");
// Variables de connexion : ajustez ces paramètres selon votre propre environnement 
/* */$serveur = "localhost";
$user   = "root";
$mdp     = "";
$base    = "agilicom"; 



	// Affichage du lieu
echo "<select name='lieu_formation'>";
if(isset($_POST["id_formations"])&& isset($_POST["id_date"])){


$connexion = mysql_connect($serveur, $user, $mdp) or die ("Connexion au serveur impossible");
if (!$connexion) {
	die('Could not connect: ' . mysql_error());
}
$choixbase = mysql_select_db($base, $connexion);

$res = mysql_query("SELECT*
					FROM date_formations
					WHERE id_formations='".$_POST["id_formations"]."'
					AND id_date='".$_POST["id_date"]."'
					ORDER BY lieu_date");
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row["id_date"]."'>".$row["lieu_date"]."</option>";
}
}
else
echo "<option value='-1'>Choisir un lieu</option>";
echo "</select>";

?>



Please help me !

10 réponses

Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 398
27 juin 2007 à 20:41
Je t'avoue que j'ai pas tout lu ton code parce que, je suis pas encore très callé en AJAX mais, je voudrais savoir;
est-ce que les deux premières listes marchent?
est-ce que les trois listes sont dépendantes?

ou bien la 2ème liste dépend de la 1ère et la 3ème liste dépend de la 2ème? Parce que dans ce cas, tu n'aurais qu'à répéter exactement le code de l'exemple mais, en changeant les données de la liste.

ou peut-être que je suis fatigué et que je dis n'importe quoi...
0
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007
27 juin 2007 à 21:07
Mes deux premières listes fonctionnent.
En fait, l'internaute sélectionne une formation pour ensuite sélectionner une date et enfin en fonction de cette date un lieu.
Donc la deuxième (date) qui dépend de la 1ère (formation) et la troisième (lieu) dépend de la seconde, donc j'ai fait comme tu as dit j'ai répété le code...Et ça ne marche pas....J'ai vérifié si je m'étais trompée dans les noms ou id et je ne vois rien..Alors peut-être que je suis bigleuse..Enfin ça oui depuis le temps que je suis dessus ! :-(
0
J'avais fait ça pour un autre internaute de CCm: si tu veux t'en inspirer

trois fichiers:
config.php

<?php
$host="localhost";
$Login="root";
$Pass="allaurejul";
$DB="test";
$Table="etudiants";
$champ_niv="niveau";
$champ_etud="etudiants"
?>

listes_liees.php

<html>
<head>
<!-- Script de listes deroulantes liees avec appel par AJAX, (evite le rechargement de la page) -->
<script language="Javascript"type="text/JavaScript">
// Requette AJAX
function makeRequest(url,id_niveau,id_ecrire){
var http_request = false;
//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}

if (!http_request) {
alert('Abandon :( Impossible de créer une instance XMLHTTP');
return false;
}
http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire); } //affectation fonction appelée qd on recevra la reponse
// lancement de la requete
http_request.open('POST', url, true);
//changer le type MIME de la requête pour envoyer des données avec la méthode POST , !!!! cette ligne doit etre absolument apres http_request.open('POST'....
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
obj=document.getElementById(id_niveau);
data="val_sel="+obj.value;
http_request.send(data);
}

function traitementReponse(http_request,id_ecrire) {
var affich="";
if (http_request.readyState == 4) {
if (http_request.status == 200) {
// cas avec reponse de PHP en mode texte:
//chargement des elements reçus dans la liste
var affich_list=http_request.responseText;
obj = document.getElementById(id_ecrire);
obj.innerHTML = affich_list;
}
else {
alert('Un problème est survenu avec la requête.');
}
}
}
</script>
</head>
<?php
include ("config.php");
// Connexion a la base de donnees
$AccesBase = mysql_connect($host,$Login,$Pass);
mysql_select_db($DB,$AccesBase);
$QuestionBase = "SELECT DISTINCT $champ_niv FROM $Table ORDER BY $champ_niv ASC " ;
$result_recherche=mysql_db_query($DB, $QuestionBase) or die (mysql_error());
$nombre_enr=mysql_num_rows($result_recherche);
?>
<body>
<form name="test1" method="post" action="liste_liees.php" >
<div id="id_list1">Niveau:<br>
<select name="niv1" id="id_niv1" onChange="makeRequest('rep_PhpAjax.php','id_niv1','id_list2')">
<option>-- Choisissez --</option>
<?php
while ($row=mysql_fetch_assoc($result_recherche)){
?>
<option value="<?php echo $row[$champ_niv]?>"><?php echo $row[$champ_niv]?></option>
<?php
}
?>
</select>
<br><br>
</div>


<div id="id_list2">
<!-- ici sera charge la reponse mode texte de PHP à la request AJAX -->
</div>
</form>
</body>
</html>

repPhpAjax.php

<?php
// script PHP interrogation Base de donnees pour reponse a la requette AJAX
include ("config.php");

// Connexion a la base de donnees
$AccesBase = mysql_connect($host,$Login,$Pass);
mysql_select_db($DB,$AccesBase);
$QuestionBase = "SELECT * FROM $Table WHERE ".$champ_niv."='".$_POST[val_sel]."' ORDER BY ".$champ_etud." ASC " ;
$result_recherche=mysql_db_query($DB, $QuestionBase) or die (mysql_error());
// construction de la liste deroulante
$aff=="";
$aff=$aff."Etudiants:<br>
<select name='niv1' id='cont_list2' >
<option>-- Choisissez --</option>";
while ($row=mysql_fetch_assoc($result_recherche)){
$aff.="<option value=\"$row[$champ_etud]\">$row[$champ_etud]</option>";
}
$aff=$aff."</select><br><br>";
// envoi reponse Php a Ajax
echo $aff;
?>
0
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007
27 juin 2007 à 21:10
Merci ! Je regarde ça ce soir si je peux ou au pire demain matin et te tiens au courant !
0
Le principe avec AJAX:

Tu affiches une première liste avec dans la balise <select onChange="appel_fonction_Ajax("nom_liste1","id_a_ecrire2")"

Cette fonction vient lire le choix dans la liste par document.nom_formulaire.nom_liste.value
et envoie cette valeur en POST à un script php unique qui fait la requette vers la BD et renvoi le résultat sous forme d'une liste <select ...
avec les <options lues dans la BD

Ajax dès la réception charge cette liste dans la page HTML dans le div repéré par id="id_a_ecrire" grace à
document.getElementById("id_a_ecrire").innerHTML

Lorsque l'utilisateur fait son choix dans la deuxième liste par le <select onChange="appel_fonction_Ajax("nom_liste2","id_a_ecrire3")" le processus recomence mais c'est toujours le même script PHP qui est appelé, mais pas avec les mêmes parametres

Etc....

Donc avec l'exemple ci dessus tu devrait pouvoir refaire ton programme.
0
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007 > Alain42
27 juin 2007 à 22:57
Bon je dois vraiment être nulle parce que j'ai essayé ta solution et ça ne marche pas. Je ne comprends pas je suis tout ce que tu m'as dit à la lettre..J'arrive pas à voir où je me trompe....

Je t'envoie ce que j'ai fait :

la page listeAJAX.php :
// Requette AJAX pour la liaison formation-date
function makeRequest('liste-dates12.php','formations','date_form'){ 
var http_request = false; 
//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs 
if (window.XMLHttpRequest) { // Mozilla, Safari,... 
http_request = new XMLHttpRequest(); 
if (http_request.overrideMimeType) { 
http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla 
} 
} else if (window.ActiveXObject) { // IE 
try { 
http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
} catch (e) { 
try { 
http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
} catch (e) {} 
} 
} 

if (!http_request) { 
alert('Abandon :( Impossible de créer une instance XMLHTTP'); 
return false; 
} 
http_request.onreadystatechange = function() { traitementReponse(http_request,'date_form'); } //affectation fonction appelée qd on recevra la reponse 
// lancement de la requete 
http_request.open('POST', 'liste-dates12.php', true); 
//changer le type MIME de la requête pour envoyer des données avec la méthode POST , !!!! cette ligne doit etre absolument apres http_request.open('POST'.... 
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
obj=document.getElementById('formations'); 
data="id_formations="+obj.value; 
http_request.send(data); 
} 

function traitementReponse(http_request,'date_form') { 
var affich=""; 
if (http_request.readyState == 4) { 
if (http_request.status == 200) { 
// cas avec reponse de PHP en mode texte: 
//chargement des elements reçus dans la liste 
var affich_list=http_request.responseText; 
obj = document.getElementById('date_form'); 
obj.innerHTML = affich_list; 
} 
else { 
alert('Un problème est survenu avec la requête.'); 
} 
} 
} 


Le formulaire n'a pas changé formulaire.php :
<form method="POST" name="formulaire" action="inscription1.php" onsubmit="return validateForm(this)">
<div id="titreForm">Inscription à une formation</div>
<div id="corpForm">
	<fieldset id="formation">
		<legend>Formation</legend>
			<br />
			<p>
				<label for="forma" title="Veuillez sélectionner la formation souhaitée" class="oblig">*Formation souhaitée :</label>
				<span id="form">
				 <? include 'liste-formations12.php'; ?>
				 </span>
			</p>
			<p>
				<label for="date_forma" title="Veuillez sléectionner la date souhaitée" class="oblig">*Date:</label>
				 <span id="date_form" >
				 <? include 'liste-dates12.php'; ?>
			
				 </span>
			</p>
			<p>	
				  <label for="ref_forma" title="Veuillez saisir le lieu souhaité" class="oblig">Lieu :</label>
				  <span id="lieu_form" >
    			<? include 'liste-lieux12.php'; ?>
				 </span>
			</p>

	</fieldset>


Le select sur ma page liste-formations12.php :

<select name='forma' id='formations' onChange="makeRequest('liste-dates12.php','formations','date_form')">
<option value='-1'>Formations</option>
<?php		
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row['id_formations']."'>".$row['nom_formations']."</option>";
}
?>
</select>


Le select sur ma page liste-dates12.php :
<select name='date_formation' id='date_for' onChange="makeRequest2('liste-lieux12.php','date_for','lieu_form')">";
<?php
if(isset($_POST['id_formations'])){
$sql = mysql_query("SELECT*
					FROM date_formations
					WHERE id_formations= '".$_POST['id_formations']."'
					ORDER BY date_date");
$res = mysql_query ($sql) or die ("Exécution de la requête impossible");
$nombre_enr=mysql_num_rows($res);
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row["id_date"]."'>".$row["date_date"]."</option>";
}
}
else
echo "<option value='-1'>Choisir une date</option>";?>
</select>


Peux-tu encore m'aiguiller s'il-te-plait...Merci en tout cas de ton aide !
0
dans ta fonction AJAX, ne mets pas les parametres en "dur" mais laisse url,id_liste,id_ecrire

et tu passes les valeurs ces parametres lorsque tu appeles la fonction sur le onChange de la liste deroulante comme tu l'a fait.

Supprimes les include des trois scripts des listes.
Copie la une à sa place.

et mets des <div à la place des <span des deux autres listes

Essaye de comprendre comment ça marche en suivant le principe que je t'ai donné plus haut
0
J'ai essayé de te corriger tes fichiers:
(utilises seulement une seule requette Ajax)
Formulaire.php:

<html>
<head>
<script language="Javascript"type="text/JavaScript">
// Requette AJAX pour la liaison formation-date
function makeRequest(url,id_niveau,id_ecrire,id_suivant){
var http_request = false;
//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}

if (!http_request) {
alert('Abandon :( Impossible de créer une instance XMLHTTP');
return false;
}
http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire); } //affectation fonction appelée qd on recevra la reponse
// lancement de la requete
http_request.open('POST', url, true);
//changer le type MIME de la requête pour envoyer des données avec la méthode POST , !!!! cette ligne doit etre absolument apres http_request.open('POST'....
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
obj=document.getElementById(id_niveau);
data="val_select="+obj.value;
http_request.send(data);
}

function traitementReponse(http_request,'date_form') {
var affich="";
if (http_request.readyState == 4) {
if (http_request.status == 200) {
// cas avec reponse de PHP en mode texte:
//chargement des elements reçus dans la liste
var affich_list=http_request.responseText;
obj = document.getElementById('date_form');
obj.innerHTML = affich_list;
}
else {
alert('Un problème est survenu avec la requête.');
}
}
}
</script>
</head>
<body>
<form method="POST" name="formulaire" action="inscription1.php" onsubmit="return validateForm(this)">
<div id="titreForm">Inscription à une formation</div>
<div id="corpForm">
<fieldset id="formation">
<legend>Formation</legend>
<br />
<p>
<label for="forma" title="Veuillez sélectionner la formation souhaitée" class="oblig">*Formation souhaitée :</label>
<span id="form">
<?PHP
// include("connexionbd.php");
// Variables de connexion : ajustez ces paramètres selon votre propre environnement
/* */$serveur = "localhost";
$user = "root";
$mdp = "";
$base = "agilicom";

$connexion = mysql_connect($serveur, $user, $mdp) or die ("Connexion au serveur impossible");
if (!$connexion) {
die('Could not connect: ' . mysql_error());
}
$choixbase = mysql_select_db($base, $connexion);
?>

<select name='forma' id='formations' onChange="makeRequest('liste-dates12.php','formations','date_form',')">
<option value='-1'>Formations</option>
<?php
$sql = "SELECT id_formations, nom_formations
FROM formation
ORDER BY nom_formations";
$res = mysql_query ($sql) or die ("Exécution de la requête impossible");
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row['id_formations']."'>".$row['nom_formations']."</option>";
}
?>
</select>
</span>
</p>
<!-- Liste 2 -->
<p>
<label for="date_forma" title="Veuillez sléectionner la date souhaitée" class="oblig">*Date:</label>
<div id="date_form" >
<!-- ici sera chargee la Liste 2 par Ajax-->

</div>
</p>
<!-- Liste 3 -->
<p>
<label for="ref_forma" title="Veuillez saisir le lieu souhaité" class="oblig">Lieu :</label>
<div id="lieu_form" >
<!-- ci sera chargee la Liste 3 par Ajax-->
</div>
</p>

</fieldset>
</body>
</html>

liste-dates12.php:

<select name='date_formation' id='date_for' onChange="makeRequest('liste-lieux12.php','date_for','lieu_form')">";
<?php
if(isset($_POST['val_select'])){
$sql = mysql_query("SELECT*
FROM date_formations
WHERE id_formations= '".$_POST['val_select']."'
ORDER BY date_date");
$res = mysql_query ($sql) or die ("Exécution de la requête impossible");
$nombre_enr=mysql_num_rows($res);
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row["id_date"]."'>".$row["date_date"]."</option>";
}
}
else
echo "<option value='-1'>Choisir une date</option>";?>
</select>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Si tu n'y arrives pas je reviens en fin de semaine.

Et si tu veux je peux te faire les fichiers complets qui fonctionnent, je les testerai sur mon serveur.

Bon courabge
0
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007
28 juin 2007 à 09:19
Je dois vraiment être un cas désespéré....J'ai essayé de faire les modifications sans reprendre les fichiers que tu m'as donné ...Ca ne marchait pas, alors j'ai repris directement les fichiers modifiés que tu m'as mis..Et ca ne marche pas, ça vient donc de mon code...Mais où je le lis et relis, enlève, remets, change, rien n'y fait...Au secours..Merci de ton aide...Merci !
0
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007
28 juin 2007 à 10:42
Alors récapitulons, j'ai continué mes recherches avec mon premier code. Et on m'a un peu aidé à comprendre mon problème, il me manquait pour la deuxième fonction AJAX un bout de code, je vous le mets :
sel = document.getElementById('date_for');
idDatte = sel.options[sel.selectedIndex].value;
var data = ("id_formations="+idForma+"&id_date="+idDatte) ;
xhr.send(data);


Mais j'ai encore un souci : lorsque je sélectionne une formation, ça me met direct la date, et non <-- choisir une date -->, ce qui fait que le lieu ne change que si j'ai plusieurs dates et que je clique sur une autre de ses dates, si je n'ai qu'une date alors le lieu ne change pas...Faut que je continue à chercher...
0
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007
28 juin 2007 à 12:01
Mes trois listes fonctionnent !!! J'ai changé la place de l'option avec valeur null dans la page liste-dates.php :
<select name='date_formation' id='date_for' onchange='getLieu()'>
<option value='null'>Choisir une date</option>
<?php 
if(isset($_POST["id_formations"])){


$res = mysql_query("SELECT*
					FROM date_formations
					WHERE id_formations= '".$_POST["id_formations"]."'
					ORDER BY date_date");
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row["id_date"]."'>".$row["date_date"]."</option>";
}
}?>
</select>
0
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007
28 juin 2007 à 12:02
Un énorme merci à Alain42 qui m'a aidé, ce qui m'a redonné le moral et que je n'ai pas abandonné!Merci !!!!
0
Alors félicitations !!
Très content d'avoir pu t'aider.

Par contre il n'est pas logique que tu utilises deux fonctions MaqueRequest AJAX.
C'est la raison pour laquelle on utilise des arguments sous forme de varaibles
Maquerequest(url,id_lire_id_ecrire)

Et c'est lors de l'appel de la fonction dans la page que tu lui passe les valeurs de ces arguments.


C'est tout l' intêret des fonctions, c'est de pouvoir servir plusieurs fois;

Bon continuation pour tes études.
0
C'est moi qui revient au cas ou tu repasserait par là.

Je veux aussi te signaler un bug possible/

- si l'utilisateur sélectionne une valeur dans la liste 1, puis dans la liste 2, il aura la liste 3 correspondante à cette valeur (lue dans la BD).

Et si l'utilisateur modifie ensuite son choix dans la liste 1, la liste 2 s'affiche bien avec les valeurs de la BD lues par rapport à ce nouveau choix, mais la liste 3 ne correspond plus au dernier choix , si l'utilisateur ne modifie pas son choix dans la liste 2 !!!.

Donc il faudrait passer par une fonction Javascript intermediaire
dans l'appel depuis la liste 1 au lieu de makeRequest(.......
tu mets MiseAJ(........... et les mêmes parametres

et tu crée une fonction JS qui va d'abord effacer puispeller la fct MakeRequest

function MiseAJ(tous les arguments){
document.getElementById(id_liste2).innerHTML="";
document.getElementById(id_liste3).innerHTML="";
makeRequest(tous les arguments);
}



}
0
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007
2 juil. 2007 à 14:46
Merci pour toute cette aide, ça fait du bien ! Lol ! Tu sais je ne suis pas encore très calée c'est pour ça que je ne sais pas encore optimier et que j'utilise deux fonctions. J'ai vérifié pour le bug que tu m'indiques mais en fait ça fonctionne bien. Ce que j'ai fait, c'est ce que quand l'internaute choisi une autre formation, la liste déroulante des dates réaffiche aussitot choisir une date, et la nouvelles dates correspondantes n'ont plus qu'à être sélectionnées...Et donc enfin une fois que la nouvelle date est sélectionnée, s'affiche le lieu correspondant.

Merci de ton aide précieuse ;-)
0
Ok alors c'est bon.
0