Bonjour à tous

Mon besoin :

3 listes déroulantes en cascade : lstFonctionRomeN1, lstFonctionRomeN2 et lstFonctionRomeN3.
Le script php effectue les 3 requetes sur une base mysql avant l'affichage de la page, chaque liste étant alimentée par une table différente.
Je récupère donc les 3 résultats de requete (Je ne veux pas faire de requetes en javascript).

J'affiche mon formulaire : la 1ere liste est remplie, les deux autres sont vides.

Lorsque l'utilisateur sélectionne un élément de la liste 1, la 2eme liste est peuplée par une fonction javascript appellée par l'évènement onchange de la 1ere liste. Et ainsi de suite pour la 3eme liste.

Mon problème :

Passer le résultat d'une requete en argument à la fonction javascript qui remplit la liste suivante !
Pour cela, je transforme d'abord le résultat de la requete sous forme de tableau (fonction "fncConvertir_ResultSQL_Array($resultSQL)") puis j'utilise json_encode pour convertir ce tableau en chaine. Ensuite, je pensais pouvoir reconvertir la chaine en tableau avec json_decode dans la fonction javascript...

Ce qui ne fonctionne pas :

La transformation du résultat d'une requete en chaine semble bien fonctionner, mais lorsque je transfère cette chaine à la fonction javascript, celle-ci ne s'éxecute pas...

Merci d'avance pour toute l'aide que vous pourrez m'apporter (ça fait 2 jours que je rame sur ce truc !)

Le code :

Le bout de programme qui crée la 1ère 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
$sourceRomeN2 = fncConvertir_ResultSQL_Array($resultRomeN2);
$vSourceDataCode = "";
$vSourceDataCode = json_encode($sourceRomeN2);
echo $vSourceDataCode;
echo '<select name="lstFonctionRomeN1" size="1" class="large" id="lstFonctionRomeN1" '
	.'onchange="javascript:jsRemplirListeFille(\'lstFonctionRomeN2\', this.options[this.selectedIndex].value, '
	.'\''.$vSourceDataCode.'\');" tabindex="'.$tabindex.'">';
	// Crée les lignes d'options du select
	echo '<option value="-1" selected="selected">'.utf8_encode('-- choisissez une fonction --')
		.'</option>';
	mysql_data_seek($resultRomeN1,0);
	while ($row=mysql_fetch_array($resultRomeN1)) {
		if ($row['RomeN1'] == 'FR') {
			$selected = 'selected="selected"';
		} else {
			$selected = '';
		}
		echo '<option value="'.utf8_encode($row['RomeN1']).'" '.$selected.'>'
			.utf8_encode($row['RomeN1'].' - '.$row['LibRomeN1']).'</option>';
	}

la fonction de conversion du résultat d'une requete en tableau :

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
function fncConvertir_ResultSQL_Array($resultSQL) {
	//==================================================================================
	// Crée un tableau associatif de la forme tableau["nomchamp"][n°ligne]
	// contenant le résultat d'une requête mysql.
	// $resultSQL : résultat d'une requête SELECT.
	// $nomArray : nom de la variable tableau à créer.
//==================================================================================
	$taille = mysql_num_rows($resultSQL);
	// Ecriture de la déclaration du tableau si la requête
	// contient quelque chose, sinon déclaration d'un tableau null.
	$numfields = mysql_num_fields($resultSQL);
	if($numfields > 0) {
		// Déclaration de la variable tableau.
		$nomArray = Array($numfields);
		// Déclaration des tableaux de valeurs pour chaque champs.
		for($i=0; $i < $numfields; $i++) {
			$nomArray[mysql_field_name($resultSQL, $i)] = Array($taille);
		}
		if($taille>0) {
			// Déclaration du reste des valeurs du résultat de la requête.
			$i=0;
			while($data = mysql_fetch_assoc($resultSQL)) {
				foreach($data as $key => $value) {
					$nomArray[mysql_escape_string($key)][$i] = mysql_escape_string($value);
				}
				$i++;
			}
		}
	} else {
		$nomArray = null;
	}
	return $nomArray;
}

la fonction javascript qui refuse de s'éxecuter :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
function jsRemplirListeFille(vNomListeCible, vValeurFiltre, vSourceDataCode) {
	alert ('vNomListeCible : ' + vNomListeCible + '  |  vValeurFiltre : ' + vValeurFiltre);
}
et le contenu de $vSourceDataCode que je veux transférer à la fonction javascript et qui parait correct:

{"0":3,"RomeN1":["0", "11", "11", "11", "12", "12", "13", "13", "13", "14", "14", "14", "21", "22", "22", "23", "23", "24", "24", "24", "31", "31", "32", "32", "32", "33", "33", "33", "41", "41", "42", "42", "43", "43", "43", "43", "44", "44", "44", "45", "45", "45", "45", "46", "46", "46", "47", "47", "47", "47", "51", "51", "52", "52", "52", "53", "53", "53", "61", "61", "61"], "RomeN2":["0", "111", "112", "113", "121", "122", "131", "132", "133", "141", "142", "143", "211", "221", "222", "231", "232", "241", "242", "243", "311", "312", "321", "322", "323", "331", "332", "333", "411", "412", "421", "422", "431", "432", "433", "434", "441", "442", "443", "451", "452", "453", "454", "461", "462", "463", "471", "472", "473", "474", "511", "512", "521", "522", "523", "531", "532", "533", "611", "612", "613"],"LibRomeN2":["","Personnel des services aux personnes","Personnel des services aux entreprises et aux collectivites","Personnel de la securite publique","Personnel des services administratifs","Personnel des services commerciaux","Personnel de l\'hotelerie","Personnel de la restauration","Personnel de cafe, bar-brasserie","Personnel de la distribution","Personnel de la vente","Personnel des forces de vente","Professionnels des arts","Professionnels de la formation initiale","Professionnels de la formation continue","Professionnels de l\'intervention sociale et culturelle","Professionnels de l\'intervention socio-economique","Professionnels des soins paramedicaux","Professionnels medico-techniques","Professionnels de la reeducation et de l\'appareillage","Praticiens de la sante","Praticiens medico-techniques","Cadres de la gestion administrative","Professionnels de l\'information et de la communication","Professionnels de l\'informatique","Cadres de la gestion commerciale","Cadres de la banque, des assurances et de l\'immobilier","Cadres dirigeants","Personnel de la production agricole","Personnel de la peche et de la navigation maritime et fluviale","Personnel du gros oeuvre et des travaux publics","Personnel du second oeuvre","Conducteurs d\'engins de transport terrestre","Conducteurs d\'engins de manoeuvre, de genie civil et agricole","Personnel de la logistique (manutention, gestion, exploitation des transports)","Personnel d\'accompagnement du transport","Personnel de la construction mecanique et du travail des metaux","Personnel de la construction electrique et electronique","Personnel d\'entretien, maintenance","Conducteur d\'installation des industries chimiques, production d\'energie et industries agroalimentaire","Conducteur d\'installation de la metallurgie et des materiaux","Conducteur d\'installation de l\'industrie lourde du bois et du papier-carton","Personnel des fonctions trans-sectorielles aux industries de process","Personnel des industries des materiaux souples (textile, habillement, cuir)","Personnel des industries graphiques","Personnel des industries de l\'ameublement et du bois","Personnel de l\'alimentation","Personnel artisanal de l\'habillement, du cuir et du textile","Personnel du travail artisanal des materiaux","Personnel artisanal divers","Agents d\'encadrement de fabrication industrielle","Agent d\'encadrement de maintenance","Techniciens de preparation de la production","Techniciens de fabrication, controle","Techniciens d\'installation, maintenance","Cadres techniques de preparation de la production","Cadres techniques de production","Cadres technico-commerciaux et de maintenance","Agents de maitrise, techniciens, ingenieur de l\'agriculture et de la peche","Agents de maitrise, techniciens, ingenieur du btp et de l\'extraction","Techniciens et cadres du transport et de la logistique"]}