Liste déroulante dépendante avec base mysql

Maillard69
Invité n'ayant pas de compte PHPfrance

05 oct. 2010, 08:22

Bonjour a tous,

Tout est dans le titre mais je vais vous intégrer le code pour que vous compreniez...
Ce post va en même temps en PHP et MYSQL!
J'explique :
- J'ai une première liste qui choisi une agence.
- De cette agence découle des services, différent ou pareil suivant les agences.
- Maintenant j'aimerais que à chaque service de chaque agence assigné une adresse mail...

Concernant ma base de donnée elle est constitué de la manière suivante :
- 1 table Agence : avec 2 champ soit id_agence et agence.
- 1 table Service : avec 3 champ soit id_service, service, id_agence.

Quelqu'un aurait-il une astuce pour réaliser cela?!
Créer une nouvelle table?
Modifier une existante?

Le code:

Code : Tout sélectionner

<?php echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"); /* Variables de connexion : ajustez ces paramètres selon votre propre environnement */ $serveur = "localhost"; $admin = "root"; $mdp = ""; $base = "conge"; /* On récupère si elle existe la valeur de l'agence envoyée par le formulaire */ $idr = isset($_POST['agence'])?$_POST['agence']:null; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" /> <title>Sélectionner un service selon l'agence choisie</title> <meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" /> <meta name="keywords" content="" /> <meta name="author" content="Cyrano" /> <meta name="generator" content="Zend Studio Environnement et WebExpert 5" /> <meta http-equiv="imagetoolbar" content="no" /> <meta http-equiv="Pragma" content="no-cache" /> </head> <body style="font-family: verdana, helvetica, sans-serif; font-size: 85%"> <h3>Version 100% PHP</h3> <p>TEST</p> <?php if(isset($_POST['ok']) && isset($_POST['service']) && $_POST['service'] != "") { $agence_selectionnee = $_POST['agence']; $service_selectionne = $_POST['service']; ?> <p>Vous avez sélectionné le service <?php echo($service_selectionne); ?> dans l'agence <?php echo($agence_selectionnee); ?></p> <?php } ?> <h3>Trouver un service</h3> <?php /* On établit la connexion à MySQL avec mysql_pconnect() * besoin de la connexion plus loin dans le script */ $connexion = mysql_pconnect($serveur, $admin, $mdp); if($connexion != false) { $choixbase = mysql_select_db($base, $connexion); $sql1 = "SELECT `id_agence`, `agence`". " FROM `agence`". " ORDER BY `id_agence`"; $rech_agence = mysql_query($sql1); $code_agence = array(); $agence = array(); /* On active un compteur pour les régions */ $nb_agence = 0; if($rech_agence != false) { while($ligne = mysql_fetch_assoc($rech_agence)) { array_push($code_agence, $ligne['id_agence']); array_push($agence, $ligne['agence']); /* On incrémente le compteur */ $nb_agence++; } } ?> <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept"> <fieldset style="border: 3px double #333399"> <legend>Sélectionnez une agence</legend> <select name="agence" id="agence" onchange="document.forms['chgdept'].submit();"> <option value="-1">- - - Choisissez une agence - - -</option> <?php for($i = 0; $i < $nb_agence; $i++) { ?> <option value="<?php echo($code_agence[$i]); ?>"<?php echo((isset($idr) && $idr == $code_agence[$i])?" selected=\"selected\"":null); ?>><?php echo($agence[$i]); ?></option> <?php } ?> </select> <?php mysql_free_result($rech_agence); /* On commence par vérifier si on a envoyé un numéro d'agence et le cas échéant s'il est différent de -1 */ if(isset($idr) && $idr != -1) { /* Cération de la requête pour avoir les service de cette agence */ $sql2 = "SELECT `id_service`, `service`". " FROM `service`". " WHERE `id_agence` = ". $idr ."". " ORDER BY `id_service`;"; if($connexion != false) { $rech_service = mysql_query($sql2, $connexion); /* Un petit compteur pour les service */ $nd = 0; /* On crée deux tableaux pour les numéros et les noms des service */ $code_service = array(); $nom_service = array(); /* On met les numéros et noms des service dans les deux tableaux */ while($ligne_service = mysql_fetch_assoc($rech_service)) { array_push($code_service, $ligne_service['id_service']); array_push($nom_service, $ligne_service['service']); $nd++; } /* Construction liste déroulante */ ?> <select name="service" id="service"> <?php for($d = 0; $d<$nd; $d++) { ?> <option value="<?php echo($code_service[$d]); ?>"<?php echo((isset($service_selectionne) && $service_selectionne == $code_service[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_service[$d]." (". $code_service[$d] .")"); ?></option> <?php } ?> </select> <?php } /* Nettoyage */ mysql_free_result($rech_service); } ?> <br /><input type="submit" name="ok" id="ok" value="Envoyer" /> </fieldset> </form> <?php /* on ferme la connexion */ mysql_close($connexion); } else { ?> <p>Un incident s'est produit lors de la connexion à la base de données, veuillez essayer à nouveau ultérieurement.</p> <?php } ?> <p><a href="./index2.php" title="Aller vers la version JavaScript">FIN TEST</a></p> </body> </html>
En vous remerciant tous d'avance,

Maillard Cédric

Eléphant du PHP | 288 Messages

05 oct. 2010, 18:15

Si j'ai bien compris tu veux associer une adresse email à chaque combinaison de service et agence.

Du genre

agence 1 + service 1 => email
agence 1 + service 2 => email

Si oui tu n'as qu' à ajouter un champ email de plus dans ta table service et le tour est joué