[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
Alain42 - 2 juil. 2007 à 16:59
A voir également:
- [AJAX] 3ème liste déroulante vide
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Supprimer liste déroulante excel ✓ - Forum Excel
- Effacer le contenue d'une cellule avec liste déroulante - Forum Excel
- Formate pour taxer client frigo vide - Forum Loisirs / Divertissements
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
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...
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...
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;
?>
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;
?>
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
27 juin 2007 à 21:10
Merci ! Je regarde ça ce soir si je peux ou au pire demain matin et te tiens au courant !
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.
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.
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
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 :
Le formulaire n'a pas changé formulaire.php :
Le select sur ma page liste-formations12.php :
Le select sur ma page liste-dates12.php :
Peux-tu encore m'aiguiller s'il-te-plait...Merci en tout cas de ton aide !
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 !
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
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
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>
(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>
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
Et si tu veux je peux te faire les fichiers complets qui fonctionnent, je les testerai sur mon serveur.
Bon courabge
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
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 !
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
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 :
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...
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...
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
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>
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
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 !!!!
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.
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.
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);
}
}
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);
}
}
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
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 ;-)
Merci de ton aide précieuse ;-)
27 juin 2007 à 21:07
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 ! :-(