Bonjour mon problème est que je voudrais pourvoir sélectionner dans une première liste un processus afin de pouvoir choisir dans une deuxième liste une procédure parmis des procédures liées au processus choisi. J'arrive à remplir la première liste mais pas la seconde...help me, j'ai pris trop de retard et il faut que je passe à autre chose le plus vite possible

TABLE PROCESSES:

CREATE
TABLE PROCESSES (
IDPROCESS NUMBER NOT NULL,
HEADING VARCHAR2(45) NULL,
IDUSER NUMBER NULL
)
/

ALTER TABLE PROCESSES
ADD CONSTRAINT PROCESSES_PK PRIMARY KEY (
IDPROCESS
)
/

TABLE PROCEDURES:

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
)
/


J'ai un premier fichier liste_liees.php:

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
 
<!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 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('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>

Et un fichier repAjaxPhp.php qui permet de nourrir la deuxième liste:

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
<?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 ".$champ_pros."= '".$_POST[val_sel]."' ORDER BY ".$champ_prod." ASC " ;
$res=$db->Execute($req);
 
// construction de la liste deroulante" .
$aff="";
$aff.="Proc&eacutedure:";
$aff.="<br>";
$aff.="<select name='prod1' 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; 
echo "<br><br>Valeur postee: ".$_POST['val_sel'];
 
?>
MERCI

CDLT bbk91