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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?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