Page 1 sur 1

Menu déroulants liés sur plus de 2 niveaux

Posté : 17 sept. 2006, 23:06
par tchobec
Bonsoir,

voilà, j'ai emprunté dans la FAQ le code PHP pour créer des menus déroulants liés.
Jusqu'à 2 ça marche, je recopie le code, je change les attributs pour mettre en place un 3ème menu dépendant du 2ème, et là ça ne marche plus, j'ai bien vérifié les accolades, etc ... je n'ai pas d'erreur mais le 3ème menu ne s'affiche pas. (pour info je dois imbriquer 6 menus déroulant les uns derrière les autres).

J'ai essayer celui qui est en JS, mais là c'est encore pire, je n'arrive même pas à afficher le 2ème et comme je débute, c'est pas la joie pour tout comprendre de suite.

Alors voilà le souci :
- j'affiche le menu "pays", je sélectionne, c'est OK je visualise même l'Id_etat par une ligne de test.
- apparaît le menu "region", sans l'attribut onChange du Select, je peux choisir la région mais le menu "departement" n'apparaît pas et je ne visualise pas l'Id_region par la ligne de test --> logique; avec l'attribut onChange identique au précédent je peux choisir la région mais aussitôt le champ revient sur la position initiale et toujours pas de menu "departement" ni de visualisation sur la ligne de test --> je crois que c'est logique, à confirmer.

Là, je ne vois pas ce que je pourrais mettre comme attribut au différents Select puisqu'ils dépendent tous du même formulaire.
Voici le code, Quel est votre avis ?.
<?php
/* CONNEXION A LA BDD MySQL PAR mysql_pconnect() AU LIEU DE mysql_connect()
   car on aura besoin de la connexion un peu plus loin dans le script */
	$connexion = mysql_pconnect($hostname_genealogie, $username_genealogie, $password_genealogie);
?>
<!-- MISE EN FORME DU FORMULAIRE CONTENANT LE TABLEAU DE DONNEES -->
<div align="center">
	<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="insert_commune">
		<table width="69%" bgcolor="#99CCFF">
/* REQUETE DE RECUPERATION DU PAYS */
if($connexion != false)
	{
	    $choixbase = mysql_select_db($database_genealogie, $genealogie);
	    $requete_etat = "SELECT Ref_etat, Nom_etat FROM liste_etats ORDER BY Nom_etat";
	    $rech_etat = mysql_query($requete_etat);
/* CREATION DE 2 TABLEAUX POUR LES REFERENCES ET NOMS DE PAYS */
	    $code_etat = array();
	    $etat = array();
/* ACTIVATION D'UN COMPTEUR POUR LES PAYS */
		$nb_etat = 0;
 		if($rech_etat != false)
			{
			while($ligne_etat = mysql_fetch_assoc($rech_etat))
				{
 			    	array_push($code_etat, $ligne_etat['Ref_etat']);
			        array_push($etat, $ligne_etat['Nom_etat']);
/* INCREMENTATION DU COMPTEUR ETAT*/
			        $nb_etat++;
			    }
			}
?>
		      <td>Pays</td>
			  <td><select name="etat" id="etat" [b]onchange="document.forms['insert_commune'].submit();[/b]">
				  <option value="-1">- - - Choisissez un Pays - - -</option>
					<?php
					for($e = 0; $e < $nb_etat; $e++)
						{
					?>
							<option value="<?php echo($code_etat[$e]); ?>"<?php echo((isset($id_etat) && $id_etat == $code_etat[$e])?" selected=\"selected\"":null); ?>><?php echo($etat[$e]); ?></option>
						<?php
						}
						?>
					</select>
					<?php
					mysql_free_result($rech_etat);					
/* VERIFICATION D'ENVOI D'UN NUMERO DE PAYS ET S'IL EST DIFFERENT DE -1 */
					if(isset($id_etat) && $id_etat != -1)
						{
					?>
				</td>
			</tr>
			<tr><?php echo ("l'Id_etat est égal à ".$id_etat) // [b]affiche bien l'Id_etat[/b] ?></tr>
			<?php
			
			
/* CREATION DE LA REQUETE DE RECUPERATION DES REGIONS */
						$requete_region = "SELECT Ref_region, Nom_region, Ref_etat FROM liste_regions WHERE Ref_etat = ". $id_etat .""." ORDER BY Nom_region;";
						$rech_region = mysql_query($requete_region, $connexion);
/* CREATION DE 2 TABLEAUX POUR LES REFERENCES ET NOMS DE REGIONS */
					    $code_region = array();
					    $region = array();
/* ACTIVATION D'UN COMPTEUR POUR LES REGIONS */
            			$nb_region = 0;
				 		if($rech_region != false)
							{
/* INSERTION DES REFERENCES ET DES NOMS DANS LES TABLEAUX */
				           		while($ligne_region = mysql_fetch_assoc($rech_region))
					           		{
				                		array_push($code_region, $ligne_region['Ref_region']);
				                		array_push($region, $ligne_region['Nom_region']);
/* INCREMENTATION DU COMPTEUR REGION*/
				               		 	$nb_region++;
				            		}
							}
/* CONSTRUCTION DE LA LISTE DEROULANTE POUR LES REGIONS DANS LA LIGNE DU TABLEAU */
			?>
			<tr>
				<td>Région</td>
				<td><select name="region" id="region" [b]onChange ici ne fonctionne pas[/b]>
					<option value="-1">- - - Choisissez une Région - - -</option>
			        <?php  
			            for($r = 0; $r < $nb_region; $r++)
				            {
				    ?>
								<option value="<?php echo($code_region[$r]); ?>"<?php echo((isset($id_region) && $id_region == $code_region[$r])?" selected=\"selected\"":null); ?>><?php echo($region[$r]); ?></option>
					    	<?php
					        }
							?>
					</select>
					<?php
					mysql_free_result($rech_region);
/* VERIFICATION D'ENVOI D'UN NUMERO DE REGION ET S'IL EST DIFFERENT DE -1 */
					if(isset($id_region) && $id_region != -1)
						{
					?>
				</td>
			</tr>
			<tr><?php echo ("l'Id_region est égal à ".$id_region) // [b]n'affiche pas l'Id_region[/b] ?></tr>
			<?php



/* CREATION DE LA REQUETE DE RECUPERATION DES DEPARTEMENTS */
					   	$requete_departement = "SELECT Ref_departements, Nom_departement, Ref_region FROM liste_departement WHERE Ref_region = ". $id_region .""." ORDER BY Nom_departement;";
		        		$rech_departement = mysql_query($requete_departement, $connexion);
/* ACTIVATION D'UN COMPTEUR POUR LES DEPARTEMENTS */
   						$nb_departement = 0;
				 		if($rech_departement != false)
							{
/* CREATION DE 2 TABLEAUX POUR LES REFERENCES ET NOMS DE DEPARTEMENTS */
			           		$code_departement = array();
			           		$departement = array();
/* INSERTION DES REFERENCES ET DES NOMS DANS LES TABLEAUX */
					           	while($ligne_departement = mysql_fetch_assoc($rech_departement))
						           	{
					                	array_push($code_departement, $ligne_departement['Ref_departement']);
					                	array_push($departement, $ligne_departement['Nom_departement']);
						                	$nb_departement++;
					            	}
								}
/* CONSTRUCTION DE LA LISTE DEROULANTE POUR LES DEPARTEMENTS DANS LA LIGNE DU TABLEAU */
			?>
			<tr>
				<td>Département</td>
				<td><select name="departement" id="departement">
					<option value="-1">- - - Choisissez un département - - -</option>
			        <?php  
			            for($d = 0; $d<$nb_departement; $d++)
				            {
				    ?>
								<option value="<?php echo($code_departement[$d]); ?>"<?php echo((isset($choix_departement) && $choix_departement == $code_departement[$d])?" selected=\"selected\"":null); ?>><?php echo($departement[$d]." (". $code_departement[$d] .")"); ?></option>
					    	<?php
					        }
							?>
					</select>
					<?php
					mysql_free_result($rech_departement);
/* VERIFICATION D'ENVOI D'UN NUMERO DE REGION ET S'IL EST DIFFERENT DE -1 */
				if(isset($id_departement) && $id_departement != -1)
						{
					?>
				</td>
			</tr>
			<tr><?php echo ("l'Id_departement est égal à ".$id_departement);
						}
					}
				}
			 ?></tr>
	</td>
	</tr>
</table>
<br /><input type="submit" name="ok" id="ok" value="Envoyer" />
</fieldset>
</form>
</div>
<?php
    /* Terminé, on ferme la connexion */
    mysql_close($connexion);
}

Posté : 18 sept. 2006, 07:37
par Cyrano
Jette un coup d'oeil sur ceci

Posté : 18 sept. 2006, 19:30
par tchobec
OK merci, ça m'a l'air très interressant tout ça (le site).

Je test et je dirais ce qu'il en est.