En effet, ma première liste déroulante va contenir toute les valeurs d'une table et dans la deuxième les valeurs d'une autre table quand la première a des valeurs de la seconde.
Un exemple pour illustrer mon propos :
première liste de département
Direction
Administration
Compta
La direction n'a pas de sous service, alors que l'administration et la compta en on :
deuxieme liste :
si direction, pas de liste s'affiche
si administration ou compta, une liste avec ses services doit s'afficher.
J'utilise pour le lien entre les listes déroulante le code javascript présent sur ce forum : faq-tutoriels/formulaires-listes-deroul ... t4562.html
J'ai adapté le code à mon problème. Le code de base ne prend que les correspondance, donc dans mon cas, n'aurait pas prit Direction. J'ai donc dû faire quelque modifications, peut-être sont-elles mal faîtes. Mais j'arrive à obtenir tout d'abord la liste contenant tout les départements, et si ils y a un sous service la 2nd liste s'affiche, mais dans le cas ou je clic d'abord sur (ici) Administration, j'ai la 2nd liste, mais si je change vers Direction, la liste d'administration reste toujours. Par contre si je reviens sur l'option de départ, où la value prend "vide" c'est bon la deuxième liste disparaît, mais cela implique que l'utilisateur doit tout d'abord allez sur l'option vide, puis resélectionner un champ, ce que je dois éviter pour des soucis de rapidité.
voici le code que j'utilise :
La page où se trouve le code php et d'appel à la fonction javascript :
<?php
session_start();
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
include('./menu.html');
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "localhost";
$admin = "root";
$mdp = "";
$base = "paper";
?>
<head>
<title>Ajouts dans journal</title>
</head>
<body>
<?php
$sql4 = "SELECT departement.id_departement AS idd, departement_name, section_departement ".
"FROM departement ".
"ORDER BY departement.departement_name ;";
$sql3 = "SELECT id_service AS ids, name_service AS serv, departement.id_departement AS idd, departement_name, section_departement ".
"FROM service, departement ".
"WHERE service.id_departement = departement.id_departement ".
"ORDER BY departement.departement_name ;";
/* Connexion et exécution de la requête */
$connexion = mysql_pconnect($serveur, $admin, $mdp);
if($connexion == false){
?>
<p>La connexion au serveur de base de données a échoué. Aucun élément ne peut être affiché.</p>
<?php
}
else {
?>
<?php
$choixbase = mysql_select_db($base, $connexion);
$recherche3 = mysql_query($sql3, $connexion);
$recherche4 = mysql_query($sql4, $connexion);
/* Pour ne pas écraser mes tableaux, je crée un témoin */
$temoin_ts = 0;
/* Création du tableau PHP des valeurs récupérées */
$departements = array();
/* Index tableau */
$idd = 0;
/* Pour les service */
while($ligne = mysql_fetch_assoc($recherche3)){
$d = $ligne['idd'];
$s = $ligne['ids'];
/* Je vérifie si je suis toujours dans le même departement, sinon je crée les tableaux nécessaires */
if($temoin_ts != $d)
{
$departements[$d] = array();
/* J'ajoute le departement */
$departements[$d][0] = $ligne['departement_name']." - ".$ligne['section_departement'];
$departements[$d][1] = array();
$departements[$d][2] = array();
$temoin_ts = $d;
$idd = 0;
}
/* J'ajoute les objets */
$departements[$d][1][$idd] = $s;
$departements[$d][2][$idd] = $ligne['serv'];
$idd++;
}
while($ligne = mysql_fetch_assoc($recherche4)){
$d = $ligne['idd'];
/* Je vérifie si je suis toujours dans le même departement, sinon je crée les tableaux nécessaires */
if($temoin_ts != $d)
{
/* J'ajoute le departement */
$departements[$d][0] = $ligne['departement_name']." - ".$ligne['section_departement'];;
}
$idd++;
}
/* On sérialise le tableau obtenu pour traitement par JavaScript */
$chaines = htmlspecialchars(serialize($departements), ENT_QUOTES);
?>
<script type="text/javascript">
var tableau_service = new PhpArray2Js('<?php echo $chaines; ?>');
var tab_service = tableau_service.retour();
</script>
<form name="journal" action="traitement.php" method="post">
<p>Sélectionnez un departement</p>
<select name="departement" id="departement" onchange="changeService(tab_service,this.value);">
<option value="vide">- - - Choisissez un departement - - -</option>
<?php
/* Construction de la première liste : on se sert du tableau PHP */
$nbr = count($departements);
foreach($departements as $nrd => $nom){
?>
<option value="<?php echo($nrd); ?>"><?php echo($nom[0]); ?></option>
<?php
}
?>
</select>
<!-- un bloc avec un id ou va s'insérer le code de la seconde liste déroulande -->
<br/><br/><span id="blocservice"></span>
</form>
<?php
}
include('./footer.html');
?>
</body>
</html>
ensuite celui de changeService.js
[javascript]
/* On crée la fonction qui va construire la seconde liste déroulante */
function changeService(tab_service,ids)
{
if(ids != "vide")
{
/* On compte les objets de ce departement */
var nbs = tab_service[ids][1].length;
if (nbs != 0) {
var form_dep = '<select name="service" id="service">';
form_dep += '<option value="vide">- - - Choisissez un service - - -</option>';
for(var j = 0; j < nbs; j++)
{
form_dep += ' <option value="'+ tab_service[ids][1][j] +'">'+ tab_service[ids][2][j] +'<\/option>';
}
form_dep += '<\/select>';
}
else
{
form_dep = "";
}
}
else
{
form_dep = "";
}
document.getElementById("blocservice").innerHTML = form_dep;
}
[/javascript]
Merci d'avance de votre aide, n'hésitez pas à me demander des infos pour compléter mon explication ou carrément reformuler certains points.
Raitei