A voir également:
- Problème pour lier 2 listes déroulantes PHP
- Faire des listes déroulantes excel - Guide
- 2 ecran pc - Guide
- Word numéro de page 1/2 - Guide
- Supercopier 2 pour pc - Télécharger - Gestion de fichiers
- France 2 uhd - Accueil - TV & Vidéo
19 réponses
Si tu veux inspires toi de ce code (trois fichies) qui fonctionne en AJAX / Javascript, c'es tà dire sans avoir à recharger la page.
fichier config.php:
fichier liste_liees.php:
</code>
fichier config.php:
<?php $host="localhost"; $Login="xxxxx"; $Pass="xxxxx"; $DB="test"; $Table="etudiants"; $champ_niv="niveau"; $champ_etud="etudiants"; ?>
fichier liste_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> fichier repPhpAjax.php: <code><?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; ?>
</code>
le problème c'est que je ne me connecte pas à une base MySQL mais Oracle... en fait je souhaiterai finir en php tel que le code que j'ai rédigé ci-dessus est à compléter, je sais que j'y suis presque mais quoi faire?
Il faut que je récupère la valeur de la première liste pour m'en servir afin de nourrir le contenu de la deuxième liste...
Merci de m'avoir répondu. J'espère que vous pourriez m'aider dans ce sens là
Il faut que je récupère la valeur de la première liste pour m'en servir afin de nourrir le contenu de la deuxième liste...
Merci de m'avoir répondu. J'espère que vous pourriez m'aider dans ce sens là
Le fait d'utiliser Oracle plutôt que Mysql ne change pas grand chose à la méthode que je t'ai donné, il suffit que tu adaptes les lignes qui concernent les requettes à la base
Par contre dans le script que tu as donné plus haut, plusieurs remarques:
echo "<select name = 'Pays' size ='1'>";
echo"<INPUT TYPE=HIDDEN NAME="id" VALUE=".$data['idpays'].">\n";
while ($data=$res->FetchRow())
{
echo "<option> ".$data['nom_pays']." </OPTION>";
}
echo "</select>";
1- size="1" il vaut mieux mettre plus car c'est le nombre d'items affichés, ça veut dire que il faudra scrooler pour tout voir, mets 10
2- il ne faut pas mettre la ligne echo"<INPUT TYPE=HIDDEN NAME="id" VALUE=".$data['idpays'].">\n"; entre les balises <select> </select> ça risque de gêner la liste découlante, mets la en dehors
3- echo "<option> ".$data['nom_pays']." </OPTION>";
si tu mets <option en minuscules mets <:options> pareil
et rajoute value="...." car c'est ça qui sera posté et récupérable par $_POST !
echo "<option value=".$data['id_pays']."> ".$data['nom_pays']." </option>
tu peux mettre une valeur dans value="..." différente de ce qui s'affiche dans la ligne de la liste déroulante
4- $db->Execute("SELECT nom_ville FROM villes WHERE villes.idpays='.$data['idpays']." );
si tu veux utiliser la valeur postée alors:
$data_id_pays=$_POST['Pays'];
$db->Execute("SELECT nom_ville FROM villes WHERE villes.idpays='.$data_id_pays." );
tu remarqueras que c'est l'id qui est posté car c'est cette valeur qui est mise dans les lignes <options
Par contre dans le script que tu as donné plus haut, plusieurs remarques:
echo "<select name = 'Pays' size ='1'>";
echo"<INPUT TYPE=HIDDEN NAME="id" VALUE=".$data['idpays'].">\n";
while ($data=$res->FetchRow())
{
echo "<option> ".$data['nom_pays']." </OPTION>";
}
echo "</select>";
1- size="1" il vaut mieux mettre plus car c'est le nombre d'items affichés, ça veut dire que il faudra scrooler pour tout voir, mets 10
2- il ne faut pas mettre la ligne echo"<INPUT TYPE=HIDDEN NAME="id" VALUE=".$data['idpays'].">\n"; entre les balises <select> </select> ça risque de gêner la liste découlante, mets la en dehors
3- echo "<option> ".$data['nom_pays']." </OPTION>";
si tu mets <option en minuscules mets <:options> pareil
et rajoute value="...." car c'est ça qui sera posté et récupérable par $_POST !
echo "<option value=".$data['id_pays']."> ".$data['nom_pays']." </option>
tu peux mettre une valeur dans value="..." différente de ce qui s'affiche dans la ligne de la liste déroulante
4- $db->Execute("SELECT nom_ville FROM villes WHERE villes.idpays='.$data['idpays']." );
si tu veux utiliser la valeur postée alors:
$data_id_pays=$_POST['Pays'];
$db->Execute("SELECT nom_ville FROM villes WHERE villes.idpays='.$data_id_pays." );
tu remarqueras que c'est l'id qui est posté car c'est cette valeur qui est mise dans les lignes <options
Je suis reparti vers votre solution mais ça ne marche pas...cela fait deux semaines qu je suis bloqué. Mon projet passe par ces lignes de code...
Je veux deux listes : une qui contient des processus de la table "processes"(:idprocess et heading=intitulé) et l'autre des procédures de la table "procedures" (:idprocedure et heading=intitulé)
fichier config.php:
fichier liste_liees.php:
fichier repPhpAjax.php:
Aidez moi s'il vous plaît!!!!
MErci
bbk974
Je veux deux listes : une qui contient des processus de la table "processes"(:idprocess et heading=intitulé) et l'autre des procédures de la table "procedures" (:idprocedure et heading=intitulé)
fichier config.php:
<?php $champ_pros="idprocess"; $champ_prod="idprocedure"; ?>
fichier liste_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) { // 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 } } 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 // Connexion a la base de donnees include "modules/adodb/adodb.inc.php"; include "config/config.php"; // Connexion a la base de donnees $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); $req = "select heading from processes order by idprocess ASC"; $res=$db->Execute($req); $nombre_enr=mysql_num_rows($result_recherche);// *****Equivalent, pas en MySQL? ?> <body> <form name="test1" method="post" action="liste_liees.php" > <div id="id_list1">Processus:<br> <select name="pros1" id="id_pros1" onChange="makeRequest('rep_PhpAjax.php','id_pros1','id_list2')"> <option>-- Choisissez --</option> <?php while ($data=$res->FetchRow()){ ?> <option value="<?php echo $row[$champ_pros]?>"><?php echo $row[$champ_pros]?></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>
fichier repPhpAjax.php:
<?php // script PHP interrogation Base de donnees pour reponse a la requete AJAX include "modules/adodb/adodb.inc.php"; include "config/config.php"; // Connexion a la base de donnees $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); $req = "select * from processes where ".$champ_pros."= '".$_POST[val_sel]."' ORDER BY ".$champ_prod." ASC " ;"; $res=$db->Execute($req); // construction de la liste deroulante $aff==""; $aff=$aff."Procédure:<br> //***il manquerait apparement une ; ou je sais pas quoi sur les deux lignes dessus <select name='pros1' id='cont_list2' > <option>-- Choisissez --</option>"; while ($data=$res->FetchRow()) { $aff.="<option value=".$data[$champ_prod].">".$data[$champ_prod]."</option>"; } $aff=$aff."</select><br><br>"; // envoi reponse Php a Ajax echo $aff; ?>
Aidez moi s'il vous plaît!!!!
MErci
bbk974
Merci de m'avoir répondu mais entre temps je me suis orienté vers une autre solution qui est :
Merci d'avance
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <head> <?php include "modules/adodb/adodb.inc.php"; include "config/config.php"; $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); ?> <script type="text/javascript"> function Choix(formulaire) { i = formulaire.boite1.selectedIndex; if (i == 0) { $nrows = $res-> Fieldcount(); } for(i=0;i<nrows;i++) //la ca serait por prendre en compte le nombre de cas mais je ne sais pas comment l'exprimer { formulaire.boite2.options[i].text=""; } return; } switch (i) { <?php while("select * from processes order by processus.heading") ; { echo "case 'idprocedure' : var txt = new Array ("select * from procedures where procedures.idprocess='boite1' order by procedures.heading");break; //comment utiliser "case" avec des requetes SQL pour générer automatiquement le contenu de la deuxième liste? } echo ,"procedures" ?> close recordset } formulaire.boite2.options[0].text="--- Choisissez une procedure ---"; for (i=0;i<$nrows;i++) { formulaire.boite2.options[i+1].text=txt[i]; } } </script> </head> <body> <form action="#" name="formulaire"> <?php $req="SELECT * FROM processes ORDER BY idprocess"; $res=$db->Execute($req); ?> <select name="boite1" onChange='Choix(this.form)'> <option selected>--- Choisissez un processus ---</option> <?php while ($data=$res->FetchRow()) { echo "<option> ".$data['HEADING']." </option>"; } ?> <select name="boite2" OnChange="alert('vous avez choisi : \n Le processus ' + formulaire.boite1.selectedIndex + ' et la page ' +formulaire.boite2.selectedIndex+ '')"> <option selected>--- Choisissez une procédure ---</option> <option></option> <option></option> <option></option> </select> </form> </body>
Merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je suis reparti vers votre solution mais ça ne marche pas...cela fait deux semaines qu je suis bloqué. Mon projet passe par ces lignes de code...
Je veux deux listes : une qui contient des processus de la table "processes"(:idprocess et heading=intitulé) et l'autre des procédures de la table "procedures" (:idprocedure et heading=intitulé)
fichier config.php:
fichier liste_liees.php:
fichier repPhpAjax.php:
Aidez moi s'il vous plaît!!!!
MErci
bbk974
Je veux deux listes : une qui contient des processus de la table "processes"(:idprocess et heading=intitulé) et l'autre des procédures de la table "procedures" (:idprocedure et heading=intitulé)
fichier config.php:
<?php $champ_pros="idprocess"; $champ_prod="idprocedure"; ?>
fichier liste_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) { // 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 } } 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 // Connexion a la base de donnees include "modules/adodb/adodb.inc.php"; include "config/config.php"; // Connexion a la base de donnees $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); $req = "select heading from processes order by idprocess ASC"; $res=$db->Execute($req); $nombre_enr=mysql_num_rows($result_recherche);// *****Equivalent, pas en MySQL? ?> <body> <form name="test1" method="post" action="liste_liees.php" > <div id="id_list1">Processus:<br> <select name="pros1" id="id_pros1" onChange="makeRequest('rep_PhpAjax.php','id_pros1','id_list2')"> <option>-- Choisissez --</option> <?php while ($data=$res->FetchRow()){ ?> <option value="<?php echo $row[$champ_pros]?>"><?php echo $row[$champ_pros]?></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>
fichier repPhpAjax.php:
<?php // script PHP interrogation Base de donnees pour reponse a la requete AJAX include "modules/adodb/adodb.inc.php"; include "config/config.php"; // Connexion a la base de donnees $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); $req = "select * from processes where ".$champ_pros."= '".$_POST[val_sel]."' ORDER BY ".$champ_prod." ASC " ;"; $res=$db->Execute($req); // construction de la liste deroulante $aff==""; $aff=$aff."Procédure:<br> //***il manquerait apparement une ; ou je sais pas quoi sur les deux lignes dessus <select name='pros1' id='cont_list2' > <option>-- Choisissez --</option>"; while ($data=$res->FetchRow()) { $aff.="<option value=".$data[$champ_prod].">".$data[$champ_prod]."</option>"; } $aff=$aff."</select><br><br>"; // envoi reponse Php a Ajax echo $aff; ?>
Aidez moi s'il vous plaît!!!!
MErci
bbk974
ted470
Messages postés
28
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
27 février 2009
19
6 août 2007 à 14:43
6 août 2007 à 14:43
salut à tous, ce lien vous aidera :
http://www.roodali.com/index.php?2007/07/03/9-2-listes-deroulantes-liees-avec-ajax-mysql-php
http://www.roodali.com/index.php?2007/07/03/9-2-listes-deroulantes-liees-avec-ajax-mysql-php
Slt, j'aimerai savoir a qoui correspond bien_immo? car moi je voudrais travailler qu'avec deux tables
"processes" et "procedures" et je crois que dans l'exemple il y en a 3... liste des procedures nourrit grâce à la sélection d'un processus dans la première liste...
"processes" et "procedures" et je crois que dans l'exemple il y en a 3... liste des procedures nourrit grâce à la sélection d'un processus dans la première liste...
Non dans mon exemple ci dessus il n'y a que 2 listes
Par contre:
// construction de la liste deroulante
$aff=="";
$aff=$aff."Procédure:<br> //***il manquerait apparement une ; ou je sais pas quoi sur les deux lignes dessus <select name='pros1' id='cont_list2' >
<option>-- Choisissez --</option>";
while ($data=$res->FetchRow()) {
$aff.="<option value=".$data[$champ_prod].">".$data[$champ_prod]."</option>";
}
$aff=$aff."</select><br><br>";
// envoi reponse Php a Ajax
echo $aff;
une erreur:
ce n'est pas $aff==""; mais $aff="";
-concatenes bien en faisant $aff.=" à chaque fois
Si tu veux visualiser ce que tu reçoit de repAjaxPhp.php mets un
alert("Reponse PHP: "+http_request.responseText);
après // cas avec reponse de PHP en mode texte:
dans la fonction Traitement de la réponse
Par contre:
// construction de la liste deroulante
$aff=="";
$aff=$aff."Procédure:<br> //***il manquerait apparement une ; ou je sais pas quoi sur les deux lignes dessus <select name='pros1' id='cont_list2' >
<option>-- Choisissez --</option>";
while ($data=$res->FetchRow()) {
$aff.="<option value=".$data[$champ_prod].">".$data[$champ_prod]."</option>";
}
$aff=$aff."</select><br><br>";
// envoi reponse Php a Ajax
echo $aff;
une erreur:
ce n'est pas $aff==""; mais $aff="";
-concatenes bien en faisant $aff.=" à chaque fois
Si tu veux visualiser ce que tu reçoit de repAjaxPhp.php mets un
alert("Reponse PHP: "+http_request.responseText);
après // cas avec reponse de PHP en mode texte:
dans la fonction Traitement de la réponse
merci beaucoup de m'aider alain42!
et pour cette partie de code?
quel est l'équivalent de la dernière ligne de code, je ne sais pas comment faire?
CDLT
bbk974
et pour cette partie de code?
<?php // Connexion a la base de donnees include "modules/adodb/adodb.inc.php"; include "config/config.php"; // Connexion a la base de donnees $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); $req = "select heading from processes order by idprocess ASC"; $res=$db->Execute($req); $nombre_enr=mysql_num_rows($result_recherche);// *****Equivalent, pas en MySQL? ?>
quel est l'équivalent de la dernière ligne de code, je ne sais pas comment faire?
CDLT
bbk974
$nombre_enr=mysql_num_rows($result_recherche);
Cette ligne tu peux la suprimer je l'avais mise pour moi au début pour débugger le script je faisait un echo $nombre_enr pour voir si on lisait qq chose dans la base, donc inutile maintenant
une petite remarque en passant, pour une meilleure lisibilité il vaut mieux ecrire:
que
$req = "select heading from processes order by idprocess ASC";
ça marche pareil mais c'est plus facile à lire donc à débugger
Cette ligne tu peux la suprimer je l'avais mise pour moi au début pour débugger le script je faisait un echo $nombre_enr pour voir si on lisait qq chose dans la base, donc inutile maintenant
une petite remarque en passant, pour une meilleure lisibilité il vaut mieux ecrire:
$req = "SELECT heading FROM processes ORDER BY idprocess ASC";
que
$req = "select heading from processes order by idprocess ASC";
ça marche pareil mais c'est plus facile à lire donc à débugger
merci, le problème ,c'est qu'il n'y a rien qui apparaît dans la première liste, je ne sais pourquoi ce n'est pas encore bon
donc voila mon code dans l'intégralité:
fichier liste_liees.php:
fichier rePHPAjax.php:
Merci
donc voila mon code dans l'intégralité:
fichier liste_liees.php:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <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) { // 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 } } 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 alert("Reponse PHP: "+http_request.responseText); 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 // Connexion a la base de donnees include "modules/adodb/adodb.inc.php"; include "config/config.php"; // Connexion a la base de donnees $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); $req = "SELECT heading FROM processes ORDER BY idprocess ASC"; $res=$db->Execute($req); ?> <body> <form name="test1" method="post" action="liste_liees.php" > <div id="id_list1">Processus:<br> <select name="pros1" id="id_pros1" onChange="makeRequest('rep_PhpAjax.php','id_pros1','id_list2')"> <option>-- Choisissez --</option> <?php while ($data=$res->FetchRow()){ ?> <option value="<?php echo $data[$champ_pros]?>"><?php echo $data[$champ_pros]?></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>
fichier rePHPAjax.php:
<?php // script PHP interrogation Base de donnees pour reponse a la requete AJAX include "modules/adodb/adodb.inc.php"; include "config/config.php"; // Connexion a la base de donnees $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); $req = "SELECT * FROM processes WHERE ".$champ_pros."= '".$_POST[val_sel]."' ORDER BY ".$champ_prod." ASC " ;"; $res=$db->Execute($req); // construction de la liste deroulante" . $aff=""; $aff.="Procédure:"; echo"<br>"; echo"<select name='pros1' id='cont_list2' >"; echo"<option>-- Choisissez --</option>"; while ($data=$res->FetchRow()) { $aff.="<option value=".$data[$champ_prod].">".$data[$champ_prod]."</option>"; } $aff=$aff."</select><br><br>"; // envoi reponse Php a Ajax echo $aff; ?>
Merci
Normal tu utilises
<?php
while ($data=$res->FetchRow()){
?>
<option value="<?php echo $data[$champ_pros]?>"><?php echo $data[$champ_pros]?></option>
or FetchRow renvoi le rang donc accessible par le numero (le rang) du champ de la base
si $champ_pros est ton premier champ de ta table, sinon adaptes
Ou si tu veux conserver le nom du champ, ce qui est plus "parlant" tu utilises FetchAssoc()
<?php
while ($data=$res->FetchRow()){
?>
<option value="<?php echo $data[$champ_pros]?>"><?php echo $data[$champ_pros]?></option>
or FetchRow renvoi le rang donc accessible par le numero (le rang) du champ de la base
<?php while ($data=$res->FetchRow()){ ?> <option value="<?php echo $data[0]?>"><?php echo $data[0]?></option>
si $champ_pros est ton premier champ de ta table, sinon adaptes
Ou si tu veux conserver le nom du champ, ce qui est plus "parlant" tu utilises FetchAssoc()
oki merci, la première liste est remplie mais quand je sélectionne un processus, le message "un pb est survenu avec la requete" apparaît...
Je sais que j'y suis presque...mais je pense que le fichier repPhpAjax.php n'est pas juste
merci alain42
bbk974
Je sais que j'y suis presque...mais je pense que le fichier repPhpAjax.php n'est pas juste
merci alain42
bbk974
Oui tu as une erreur à cette ligne:
il y avait ;" en trop à la fin
$req = "SELECT * FROM processes WHERE ".$champ_pros."= '".$_POST[val_sel]."' ORDER BY ".$champ_prod." ASC ";
il y avait ;" en trop à la fin
Mets ce code dans le fichier repAjaxPhp.php:
Il y avait la aussi le pb de FetchRow, plus qq echo qui n'avaient rien a y faire.
<?php // script PHP interrogation Base de donnees pour reponse a la requete AJAX include "modules/adodb/adodb.inc.php"; include "config/config.php"; // Connexion a la base de donnees $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); $req = "SELECT * FROM processes WHERE ".$champ_pros."= '".$_POST[val_sel]."' ORDER BY ".$champ_prod." ASC " ; $res=$db->Execute($req); // construction de la liste deroulante" . $aff=""; $aff.="Procédure:"; $aff.="<br>"; $aff.="<select name='pros1' id='cont_list2' >"; $aff.="<option>-- Choisissez --</option>"; while ($data=$res->FetchAssoc()) { $aff.="<option value=".$data[$champ_prod].">".$data[$champ_prod]."</option>"; } $aff.="</select><br><br>"; // envoi reponse Php a Ajax echo $aff; ?>
Il y avait la aussi le pb de FetchRow, plus qq echo qui n'avaient rien a y faire.
Bonjour Alain42,
J'ai effectué le remplacement de fichier et modifié une petite faute dans liste_liees.php mais ça ne fonctionne toujours pas. quand je sélectionne un processus, cela m'affiche comme message "réponse PHP" dans une fenêtre Attention....
Je sais que ça doit être une petite errur qui traîne cela dit je ne sais pas où!
bbk974
J'ai effectué le remplacement de fichier et modifié une petite faute dans liste_liees.php mais ça ne fonctionne toujours pas. quand je sélectionne un processus, cela m'affiche comme message "réponse PHP" dans une fenêtre Attention....
Je sais que ça doit être une petite errur qui traîne cela dit je ne sais pas où!
bbk974
kore62
Messages postés
9
Date d'inscription
samedi 4 août 2007
Statut
Membre
Dernière intervention
23 août 2007
10
6 août 2007 à 22:47
6 août 2007 à 22:47
https://www.developpez.net/forums/d354143/java/developpement-web-java/frameworks-web/struts-1/menu-deroulant-dynamiquepstruts/
Va sur ce lien il ya la reponse a ta question ;)
En fait j crois que ca te servira a rien, cette solution utilise struts ca rien a voir j suis fatigué moi... j ele laisse a k ou lol Bonne soiree!!
Va sur ce lien il ya la reponse a ta question ;)
En fait j crois que ca te servira a rien, cette solution utilise struts ca rien a voir j suis fatigué moi... j ele laisse a k ou lol Bonne soiree!!
Il doit y avoir un pb dans le fichier repAjaxPhp.php
Essaye en mettant comme ça dans ce fichier, tu devrais avoir quelque chose dans ta boite d'alaerte après Reponse PHP.
J'ai mis en commentaire la partie concernant la BD, on verra si c'est ça qui gène.
Essaye en mettant comme ça dans ce fichier, tu devrais avoir quelque chose dans ta boite d'alaerte après Reponse PHP.
J'ai mis en commentaire la partie concernant la BD, on verra si c'est ça qui gène.
<?php // script PHP interrogation Base de donnees pour reponse a la requete AJAX /*include "modules/adodb/adodb.inc.php"; include "config/config.php"; // Connexion a la base de donnees $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); $req = "SELECT * FROM processes WHERE ".$champ_pros."= '".$_POST[val_sel]."' ORDER BY ".$champ_prod." ASC " ; $res=$db->Execute($req); */ // construction de la liste deroulante" . $aff=""; $aff.="Procédure:"; $aff.="<br>"; $aff.="<select name='pros1' id='cont_list2' >"; $aff.="<option>-- Choisissez --</option>"; /* while ($data=$res->FetchAssoc()) { $aff.="<option value=".$data[$champ_prod].">".$data[$champ_prod]."</option>"; } */ $aff.="</select><br><br>"; // envoi reponse Php a Ajax echo $aff; ?>
oui cela m'affiche apres "reponse PHP" la ligne de code suivante :
sans les $aff.=
Apres que jai clicqué sur ok, le menu procedure s'affiche mais il n' a que la ligne "choisissez" bien entendu!
Est ce un pb de BD?
$aff.="Procédure:"; $aff.="<br>"; $aff.="<select name='pros1' id='cont_list2' >"; $aff.="<option>-- Choisissez --</option>";
sans les $aff.=
Apres que jai clicqué sur ok, le menu procedure s'affiche mais il n' a que la ligne "choisissez" bien entendu!
Est ce un pb de BD?
Oui c'est ta procedure d'interro de la BD qui pose pb puisque en l'isolant ça repond.
donc tu enlèves les /* */ pour la remettre et tester
(La methode que je viens te te faire utiliser pour debugger, j'appelle ça saucissonner, c a d découper le pb en tranches pour isoler ou ça coince)
Par contre je ne peux pas t'aider pour la partie BD, je ne la connais pas .
Compares avec la même partie dans le fichier listes_deroulantes.php
donc tu enlèves les /* */ pour la remettre et tester
(La methode que je viens te te faire utiliser pour debugger, j'appelle ça saucissonner, c a d découper le pb en tranches pour isoler ou ça coince)
Par contre je ne peux pas t'aider pour la partie BD, je ne la connais pas .
Compares avec la même partie dans le fichier listes_deroulantes.php
en fait j'ai deux tables comme tu as pu le voir :
*processes avec idprocess comme identifiant et heading(pour l'intitulé)
*procedures avec idprocedure comme identifiant,heading et idprocess comme clé étrangère.
L'erreur ne viendrait elle pas de :
**
-> val_sel est-il approprié pour le renvoi d'info car c'est la première fois qu'elle apparaît.
OU
-> la requete porte sur les processes mais ne devrait-elle pas être sur les procedures comme je voudrais que la 2eme liste dépende du choix dans la 1ere liste.
**
-> Est ce bien pros1 et cont_list2 ? car à la base pros1 est déja utilisé pour les processes
CDLT
bbk974
*processes avec idprocess comme identifiant et heading(pour l'intitulé)
*procedures avec idprocedure comme identifiant,heading et idprocess comme clé étrangère.
L'erreur ne viendrait elle pas de :
**
$req = "SELECT * FROM processes WHERE ".$champ_pros."= '".$_POST[val_sel]."' ORDER BY ".$champ_prod." ASC " ;
-> val_sel est-il approprié pour le renvoi d'info car c'est la première fois qu'elle apparaît.
OU
-> la requete porte sur les processes mais ne devrait-elle pas être sur les procedures comme je voudrais que la 2eme liste dépende du choix dans la 1ere liste.
**
$aff.="<select name='pros1' id='cont_list2' >";
-> Est ce bien pros1 et cont_list2 ? car à la base pros1 est déja utilisé pour les processes
CDLT
bbk974
val_sel est le nom de la variable postée par Ajax (voir dans fonction makerequest) donc c'est normal.
peux tu en laissant les /* */ comme precedement dans la partie interro BD et mettre après echo $aff;
echo "<br><br>Valeur postee: ".$_POST['val_sel']; pour voir ce que tu reçois de Ajax, si c'est bien la selection première liste
peux tu en laissant les /* */ comme precedement dans la partie interro BD et mettre après echo $aff;
echo "<br><br>Valeur postee: ".$_POST['val_sel']; pour voir ce que tu reçois de Ajax, si c'est bien la selection première liste
Si ça ne marche toujours pas envoie moi le code des trois fichiers en leur état actuel, je vais essayer de simuler chez moi sur une base Mysql.
Merci alain42.
malheureusement ça ne marche toujours pas, je suis dépité.
Voici les fichiers:
fichier liste_liees.php
fichier repPhpAjax.php
Voici les tables:
CREATE
TABLE PROCEDURES (
IDPROCEDURE NUMBER NOT NULL,
IDPARENT NUMBER NULL,
HEADING VARCHAR2(45) NULL,
SUMMARY VARCHAR2(255) NULL,
IDUSER NUMBER NULL,
IDPROCESS NUMBER NULL
)
/
ALTER TABLE PROCEDURES
ADD CONSTRAINT PROCEDURES_PK PRIMARY KEY (
IDPROCEDURE
)
/
ALTER TABLE PROCEDURES
ADD CONSTRAINT FK_PROCEDURES FOREIGN KEY (
IDPROCESS
) REFERENCES PROCEDURES (
IDPROCEDURE
)
/
-----------------------------------------------------------------
CREATE
TABLE PROCESSES (
IDPROCESS NUMBER NOT NULL,
HEADING VARCHAR2(45) NULL,
IDUSER NUMBER NULL
)
/
Voila, j'espere que tu pourras m'aider.
Merci
bbk974
malheureusement ça ne marche toujours pas, je suis dépité.
Voici les fichiers:
fichier liste_liees.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <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) { 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 } } else if (window.ActiveXObject) { 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 alert("Reponse PHP: "+http_request.responseText); var affich_list=http_request.responseText; obj = document.getElementById(id_ecrire); obj.innerHTML = affich_list; } else { alert('Un probleme est survenu avec la requete.'); } } } </script> </head> <?php // Connexion a la base de donnees include "modules/adodb/adodb.inc.php"; include "config/config.php"; // Connexion a la base de donnees $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); $req = "SELECT * FROM processes ORDER BY idprocess ASC"; $res=$db->Execute($req); ?> <body> <form method="post" action="liste_liees.php"> <div id="id_list1">Processus:<br> <select name="pros1" id="id_pros1" onChange="makeRequest('repPhpAjax.php','id_pros1','id_list2')"> <option>-- Choisissez --</option> <?php while ($data=$res->FetchRow()) { ?> <option value="<?php echo $data[0]?>"><?php echo $data[0]?></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>
fichier repPhpAjax.php
<?php // script PHP interrogation Base de donnees pour reponse a la requete AJAX include "modules/adodb/adodb.inc.php"; include "config/config.php"; // Connexion a la base de donnees $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); $req = "SELECT * FROM procedures WHERE idprocess= '".$_POST[val_sel]."' ORDER BY idprocedure " ; $res = $db->Execute($req ); // construction de la liste deroulante" . $aff=""; $aff.="Procédure:"; $aff.="<br>"; $aff.="<select name='prod1' id='cont_list2' >"; $aff.="<option>-- Choisissez --</option>"; while ($data=$res->FetchAssoc()) { $aff.="<option value=".$data['idprocedure'].">".$data['heading']."</option>"; } $aff.="</select><br><br>"; // envoi reponse Php a Ajax echo $aff; echo "<br><br>Valeur postee: ".$_POST['val_sel']; ?>
Voici les tables:
CREATE
TABLE PROCEDURES (
IDPROCEDURE NUMBER NOT NULL,
IDPARENT NUMBER NULL,
HEADING VARCHAR2(45) NULL,
SUMMARY VARCHAR2(255) NULL,
IDUSER NUMBER NULL,
IDPROCESS NUMBER NULL
)
/
ALTER TABLE PROCEDURES
ADD CONSTRAINT PROCEDURES_PK PRIMARY KEY (
IDPROCEDURE
)
/
ALTER TABLE PROCEDURES
ADD CONSTRAINT FK_PROCEDURES FOREIGN KEY (
IDPROCESS
) REFERENCES PROCEDURES (
IDPROCEDURE
)
/
-----------------------------------------------------------------
CREATE
TABLE PROCESSES (
IDPROCESS NUMBER NOT NULL,
HEADING VARCHAR2(45) NULL,
IDUSER NUMBER NULL
)
/
Voila, j'espere que tu pourras m'aider.
Merci
bbk974
Rebonjour,
Je viens de faire l'essai chez moi sur une base mysql de test que j'ai essayé de remplir avec des valeurs "bidon"
J'ai remis bien sur tes procedures d'appel de base oracle.
Juste deux remarques, si tu veux que ds la première liste s'affiche le heading, mets:
ensuite il faudra
alors essayes avec ces fichiers:
listes_liees.php:
repPhpAjax.php:
Je viens de faire l'essai chez moi sur une base mysql de test que j'ai essayé de remplir avec des valeurs "bidon"
J'ai remis bien sur tes procedures d'appel de base oracle.
Juste deux remarques, si tu veux que ds la première liste s'affiche le heading, mets:
<option value="<?php echo $data[0]?>"><?php echo $data[2]?></option>
ensuite il faudra
alors essayes avec ces fichiers:
listes_liees.php:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <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) { 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 } } else if (window.ActiveXObject) { 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 //alert("Reponse PHP: "+http_request.responseText); var affich_list=http_request.responseText; obj = document.getElementById(id_ecrire); obj.innerHTML = affich_list; } else { alert('Un probleme est survenu avec la requete.'); } } } </script> </head> <?php // Connexion a la base de donnees //include "modules/adodb/adodb.inc.php"; // Connexion a la base de donnees $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); $req = "SELECT * FROM processes ORDER BY idprocess ASC"; $res=$db->Execute($req); ?> <body> <form method="post" action="liste_liees.php"> <div id="id_list1">Processus:<br> <select name="pros1" id="id_pros1" onChange="makeRequest('repPhpAjax.php','id_pros1','id_list2')"> <option>-- Choisissez --</option> <?php while ($data=$res->FetchRow()){ ?> <option value="<?php echo $data[0]?>"><?php echo $data[0]?></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 requete AJAX include "modules/adodb/adodb.inc.php"; include "config/config.php"; // Connexion a la base de donnees $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); $req = "SELECT * FROM procedures WHERE idprocess= '".$_POST['val_sel']."' ORDER BY idprocedure " ; $res = $db->Execute($req ); // construction de la liste deroulante" . $aff=""; $aff.="Procédure:"; $aff.="<br>"; $aff.="<select name='prod1' id='cont_list2' >"; $aff.="<option>-- Choisissez --</option>"; while ($data=$res->FetchAssoc()) { $aff.="<option value=".$data['idprocedure'].">".$data['heading']."</option>"; } $aff.="</select><br><br>"; // envoi reponse Php a Ajax echo $aff; //echo "<br><br>Valeur postee: ".$_POST['val_sel']; ?>
Le message est parti en cours de frappe de ma deuxième remarque, c'était :
il faudra que tu modifies dans la balise <form .... action="listes_liees.php" par le nom du script que tu vas appeler pour traitement ensuite lorsque l'utilisateur appuiera sur le bouton Envoyer, et traitement des valeurs deuxième liste. Parceque je suppose que si tu as fait ces listes c'est qu'ensuite tu vas en faire qq chose.
il faudra que tu modifies dans la balise <form .... action="listes_liees.php" par le nom du script que tu vas appeler pour traitement ensuite lorsque l'utilisateur appuiera sur le bouton Envoyer, et traitement des valeurs deuxième liste. Parceque je suppose que si tu as fait ces listes c'est qu'ensuite tu vas en faire qq chose.
C'est ce que je pensais faire, c'est ce que j'ai fait d'ailleurs car j'ai effectué un renvoi d'infos qui permettra de visualiser les infos saisies avant validation finale.
Mais il me manque toujours ces....listes liées! Je ne comprends toujours pas pourquoi je n'y arrive pas!
Mis à part vous, personne ne peut m'aider et je dois tout rendre venadredi prochain....snif!
CDLT
bbk91
Mais il me manque toujours ces....listes liées! Je ne comprends toujours pas pourquoi je n'y arrive pas!
Mis à part vous, personne ne peut m'aider et je dois tout rendre venadredi prochain....snif!
CDLT
bbk91
Pour simplifier on va abandonner la solution par Ajax, voici donc une solution entiérement PHP, la pge se recharge, mais la sélection faite dans la première liste est conservée grace à:
<?php if($_POST['pros1']==$data[0]){echo "selected";} ?> que j'ai rajouté dans la ligne <option> liste 1
Ca marche avec ma BD mysql, alors si pas bon avec Oracle vois de ce côté la (cle etrangère ?)
donc le fichier listes_liees.php: ( si tu changes le nom, changes aussi dans la balise <form action= .....
<?php if($_POST['pros1']==$data[0]){echo "selected";} ?> que j'ai rajouté dans la ligne <option> liste 1
Ca marche avec ma BD mysql, alors si pas bon avec Oracle vois de ce côté la (cle etrangère ?)
donc le fichier listes_liees.php: ( si tu changes le nom, changes aussi dans la balise <form action= .....
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <html> <head> </head> <?php include "modules/adodb/adodb.inc.php"; // Connexion a la base de donnees $db = NewADOConnection("oci8"); $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=$PROTOCOL)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SID=$SID)))"; $db->Connect($cstr, $USER, $PWD); $req = "SELECT * FROM processes ORDER BY idprocess ASC"; $res=$db->Execute($req); ?> <body> <form method="post" action="listes_liees.php"> <div id="id_list1">Processus:<br> <select name="pros1" id="id_pros1" onChange="submit()"> <option>-- Choisissez --</option> <?php while ($data=$res->FetchRow()){ ?> <option value="<?php echo $data[0]?>" <?php if($_POST['pros1']==$data[0]){echo "selected";} ?>><?php echo $data[1]?></option> <?php } ?> </select> <br><br> </div> <?php if(isset($_POST['pros1']) && $_POST['pros1']!=""){ //echo "valeur postee: ".$_POST['pros1']; $cnx=mysql_connect('localhost','scriptPhp','script63') or die(mysql_error()); $db=mysql_select_db('test',$cnx)or die(mysql_error()); $req = "SELECT * FROM procedures WHERE idprocess= '".$_POST['pros1']."' ORDER BY idprocedure " ; $res=mysql_query($req); ?> <select name="prod1" id="id_prod1" > <option>-- Choisissez --</option> <?php while ($data=$res->FetchRow()){ ?> <option value="<?php echo $data[0]?>" ><?php echo $data[2]?></option> <?php } ?> </select> <br><br> <?php } ?> </form> </body> </html>
oooooooooooooooooouuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuaaaaaaaaaaaiiiiiiiiiiiiissssss!!!!
Merci 1 million de fois alain42, ça marche enfin, j'ai adapté les 2-3lignes MySQL et ça marche!
Heureusement que des gens comme toi existent pour nous faire avancer et redonner le sourire!
Merci encore et encore!
PS:peut être que j'aurais 2/3 questions pour la suite de mes aventures!!!!!
CDLT
bbk874
Merci 1 million de fois alain42, ça marche enfin, j'ai adapté les 2-3lignes MySQL et ça marche!
Heureusement que des gens comme toi existent pour nous faire avancer et redonner le sourire!
Merci encore et encore!
PS:peut être que j'aurais 2/3 questions pour la suite de mes aventures!!!!!
CDLT
bbk874
Je suis absent de demain matin à après le 15 Aôut
salut
c'est hichem
j'ai déja utiliser le script suivant pour rélier deux liste la prémiére liste présente le ville de départ et selon la prémiére liste une deuxiéme liste doit être chargé selon la valeur choisi dans la prémiéere liste en faisant tjs selection à partir de la base de donnée sans réchargé la page , bon j'ai utiliser votre script mais un message s'affiche"Un problème est survenu avec la requête."
alors je ne saisd pas c'est quoi le problémé ou , ou il est ele probléme voila le script:
*************************page *****************************
<?php
// script PHP interrogation Base de donnees pour reponse a la requette AJAX
$host="mysql5-6";
$Login="voyagesneet";
$Pass="Oi61QY3m";
$DB="voyagesneet";
$Table="vol";
$champ_niv="depart";
$champ_etud="retour";
// 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;
?>
*****************************************************************************
*****************************page listes_liees**********************************
<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
$host="mysql5-6";
$Login="voyagesneet";
$Pass="Oi61QY3m";
$DB="voyagesneet";
$Table="vol";
$champ_niv="depart";
$champ_etud="retour";
// 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>
*******************************************************
merçi j'attend votre réponse mr sachant que j'utlise un seul table 'vol' qui contient un champ intitulé 'depart' et un autre 'retour'
php/mysql
merçi
c'est hichem
j'ai déja utiliser le script suivant pour rélier deux liste la prémiére liste présente le ville de départ et selon la prémiére liste une deuxiéme liste doit être chargé selon la valeur choisi dans la prémiéere liste en faisant tjs selection à partir de la base de donnée sans réchargé la page , bon j'ai utiliser votre script mais un message s'affiche"Un problème est survenu avec la requête."
alors je ne saisd pas c'est quoi le problémé ou , ou il est ele probléme voila le script:
*************************page *****************************
<?php
// script PHP interrogation Base de donnees pour reponse a la requette AJAX
$host="mysql5-6";
$Login="voyagesneet";
$Pass="Oi61QY3m";
$DB="voyagesneet";
$Table="vol";
$champ_niv="depart";
$champ_etud="retour";
// 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;
?>
*****************************************************************************
*****************************page listes_liees**********************************
<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
$host="mysql5-6";
$Login="voyagesneet";
$Pass="Oi61QY3m";
$DB="voyagesneet";
$Table="vol";
$champ_niv="depart";
$champ_etud="retour";
// 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>
*******************************************************
merçi j'attend votre réponse mr sachant que j'utlise un seul table 'vol' qui contient un champ intitulé 'depart' et un autre 'retour'
php/mysql
merçi
J'arrive sans doute un peu tard mais déjà je voudrais remercier la personne qui a coder ces listes (Alain42 me semble - t -il)
Quant à votre problème hichem j'avais le même car mon fichier ajax ne portait pas le même nom que dans le onChange onChange="makeRequest('rep_PhpAjax.php','id_niv1','id_list2')"
Quant à votre problème hichem j'avais le même car mon fichier ajax ne portait pas le même nom que dans le onChange onChange="makeRequest('rep_PhpAjax.php','id_niv1','id_list2')"