[AJAX] listes déroulantes imbriquées
Bonjour,
Débutant sur Ajax, j'utilise un script connu pour créer des listes déroulantes qui est le suivant:
seule différence c'est que j'utilise une base Oracle et non mysql.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <script type="text/javascript">
/**
* Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest
*/
function sendData(param, page)
{
if(document.all)
{
//Internet Explorer
var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
}//fin if
else
{
//Mozilla
var XhrObj = new XMLHttpRequest();
}//fin else
//définition de l'endroit d'affichage:
var content = document.getElementById("contenu");
XhrObj.open("POST", page);
//Ok pour la page cible
XhrObj.onreadystatechange = function()
{
if (XhrObj.readyState == 4 && XhrObj.status == 200)
content.innerHTML = XhrObj.responseText ;
//alert(content.innerHTML);
}
XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
XhrObj.send(param);
}//fin fonction SendData
</script> |
puis la partie select :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| echo "<TR><TD class=\"tnav\"> Choix de la session : </TD>";
echo "<TD>";
// connexion a oracle pour la liste des options de session disponibles
Putenv("ORACLE_HOME=/oracle/product/920");
$db = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL = TCP) (HOST = xxxxx) ( PORT = xxxxx))) (CONNECT_DATA =(SID=xxxxx)))";
$login='xxx';$mdp='xxx';
$conn=OCILogon($login,$mdp,$db);
$i=0; // variable de test
$j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage
if (!$conn) {
echo "l'utilisateur n'a pu se connecter";
} else {
if (!isset($session)) {
$query0="select COD_SESSION,LIBELLE from session";
$state0=ociparse($conn,$query0);
OCIexecute($state0);
echo "<form method='POST' action='valid.php'>";
?>
<select size='1' name='cat' OnChange="sendData('id='+this.value,'lire_rdv.php')" onKeyUp="sendData('id='+this.value,'lire_rdv.php')">
<?php
while (ociFetchInto($state0,$result0))
{
// Remplir la liste déroulante des catégories
echo "<option value=".$result0[0].">".$result0[1]."</option>";
if ($i==0) { $j=$result0[0]; $i=1; } // garder la valeur du premier enregistrement
}
}
echo "</select></TD></TR>";
echo "<div id=\"contenu\">";
echo "<TR><TD class=\"tnav\"> Choix du rendez-vous : </TD>";
echo "<TD><select size='1' name='souscat'>";
$query1="select COD_SESS,DATE_RDV,HEURE_RDV from rdv where COD_SESS=$j";
//echo $query1;
$state1=ociparse($conn,$query1);
OCIexecute($state1);
$i=0;
while (ociFetchInto($state1,$result1))
{
echo "<option value=".utf8_encode($result1[0]).">".utf8_encode($result1[1])." ".utf8_encode($result1[2])."</option><br>";
}
}
OCILogoff($conn);
echo "</select></TD></TR>";
echo "</table>";
echo "<table>";
echo "</div>"; |
puis le script d'appel dans OnChange :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| <?php
header('Content-type: text') ; // on déclare ce qui va être affiché
$html = "";
// test des POST emis
if(isset($_POST['id']) && !empty($_POST['id']) ){
Putenv("ORACLE_HOME=/oracle/product/920");
$db = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL = TCP) (HOST = xxxx) ( PORT = xxxx))) (CONNECT_DATA =(SID=xxxxx)))";
$login='xxx';$mdp='xxx';
$conn=OCILogon($login,$mdp,$db);
if (!$conn){
$html = "l'utilisateur n'a pu se connecter";
} else {
$query1="select COD_SESS,DATE_RDV,HEURE_RDV from rdv where COD_SESS=".$_POST['id'];
$state1=ociparse($conn,$query1);
OCIexecute($state1);
// $i = initialise la variable i
$i=0;
/*if (ociFetchStatement($state1,$result1)>0)
{
$html = "<select size='1' name='souscat'>";
}
else
{
$html = utf8_encode("Pas de rdv disponible");
}*/
$html = "<select size='1' name='souscat'>";
while (ociFetchInto($state1,$result1))
{
$html .= "<option value=".utf8_encode($result1[0]).">".utf8_encode($result1[1])." ".utf8_encode($result1[2])."</option><br>";
}
$html .= "</select>";
}
OCILogoff($conn);
}
print $html;
?> |
premier problème : ça marche dans Firefox et pas du tout sous IE7
deuxième problème : sous Firefox ça m'affiche un nouveau select au lieu de rafraichir le select déja existant.
une solution ? merci de votre aide