Demande d'assistance sur plusieurs listes liées

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Demande d'assistance sur plusieurs listes liées

Re: Demande d'assistance sur plusieurs listes liées

par Cyrano » 25 oct. 2012, 21:36

Djimson, évite de faire du multipostage : poster ici, c'est bien, mais m'envoyer une copie en message privé n'était peut-être pas indispensable.

Ceci dit, vérifie tes messages privés, je t'ai donné des éléments de réflexion pour avancer.

@+

Demande d'assistance sur plusieurs listes liées

par djimson » 25 oct. 2012, 20:57

Bonsoir
Je m'excuse de vous deranger.
J'ai vue une sur 3 listes déroulantes liées.
J'arrive a suivre jusqu'à deux listes mais la partie ou je bloc, c'est la ou vous aviez dit : <!-- ICI, le secret : on met un bloc avec un id ou va s'insérer le code de la seconde liste déroulande --> pour pouvoir ajouter d'autres listes.
J'arrive pas.
J'ai cinq tables : Region, Province - Commune - Village - Lieu qui sont liées. En selectionnant, la region, on a les provinces ainsi de suite.
je veux les lier.
Merci de me guider.

Voici mon 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 = "fichierelectoral"; ?> <!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>FICHIER ELECTORAL</title> <meta name="description" content="Listes dynamiques liées: la seconde liste est modifiée via un objet XHR lors d'une sélection sur la première." /> <meta name="keywords" content="menu,déroulant,select,liées,JavaScript" /> <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" /> <script type="text/javascript" src="fichier_xhr.js" charset="iso_8859-1"></script> <?php /* Requête SQL de récupération des données de la première liste */ $sql = "SELECT `id` AS idr, `name` ". "FROM `region` ". "ORDER BY `id`;"; /* Connexion et exécution de la requête */ $connexion = mysql_connect($serveur, $admin, $mdp); if($connexion != false) { $choixbase = mysql_select_db($base, $connexion); $recherche = mysql_query($sql, $connexion); /* Création du tableau PHP des valeurs récupérées */ $regions = array(); /* Index du département par tableau régional */ $id_region = 0; while($ligne = mysql_fetch_assoc($recherche)) { $regions[$ligne['idr']] = $ligne['name']; } ?> </head> <body style="font-family: verdana, helvetica, sans-serif; font-size: 85%"> <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept"> <fieldset style="border: 3px double #333399"> <legend>RECHERCHE DES ELECTEURS PAR BUREAU DE VOTE</legend> <select name="region" id="region" onchange="getProvinces(this.value);"> <option value="vide">- - - Choisissez une région - - -</option> <?php /* Construction de la première liste : on se sert du tableau PHP */ foreach($regions as $nr => $nom) { ?> <option value="<?php echo($nr); ?>"><?php echo($nom); ?></option> <?php } ?> </select> <!-- ICI, le secret : on met un bloc avec un id ou va s'insérer le code de la seconde liste déroulande --> <span id="blocProvinces"></span><br /> <span id="blocCommune"></span><br /> <input type="submit" name="ok" id="ok" value="Envoyer" /> </fieldset> </form> <?php } else { /* Si vous arrivez ici, vous avez un gros problème avec la connexion au serveur de base de données */ ?> </head> <body> <p>La connexion au serveur de base de données a échoué. Aucun élément ne peut être affiché.</p> <?php } ?> </body> </html>
Le Javascript :

Code : Tout sélectionner

// JavaScript Document /** * Lister les départements d'une région avec un objet * XMLHTTPRequest. */ /* Création de la variable globale qui contiendra l'objet XHR */ var requete = null; /** * Fonction privée qui va créer un objet XHR. * Cette fonction initialisera la valeur dans la variable globale définie * ci-dessus. */ function creerRequete() { try { /* On tente de créer un objet XmlHTTPRequest */ requete = new XMLHttpRequest(); } catch (microsoft) { /* Microsoft utilisant une autre technique, on essays de créer un objet ActiveX */ try { requete = new ActiveXObject('Msxml2.XMLHTTP'); } catch(autremicrosoft) { /* La première méthode a échoué, on en teste une seconde */ try { requete = new ActiveXObject('Microsoft.XMLHTTP'); } catch(echec) { /* À ce stade, aucune méthode ne fonctionne... mettez donc votre navigateur à jour <img src="http://forum.phpfrance.com/images/smilies/icon_wink.gif" alt=";)" title="Wink" /> */ requete = null; } } } if(requete == null) { alert('Impossible de créer l\'objet requête,\nVotre navigateur ne semble pas supporter les object XMLHttpRequest.'); } } /** * Fonction privée qui va mettre à jour l'affichage de la page. */ function actualiserProvinces() { var listeProvinces = requete.responseText; var blocListe = document.getElementById('blocProvinces'); blocListe.innerHTML = listeProvinces; } /** * Fonction publique appelée par la page affichée. * Cette fonction va initialiser la création de l'objet XHR puis appeler * le code serveur afin de récupérer les données à modifier dans la page. */ function getProvinces(idr) { /* Si il n'y a pas d'identifiant de région, on fait disparaître la seconde liste au cas où elle serait affichée */ if(idr == 'vide') { document.getElementById('blocProvinces').innerHTML = ''; } else { /* À cet endroit précis, on peut faire apparaître un message d'attente */ var blocListe = document.getElementById('blocProvinces'); blocListe.innerHTML = "Traitement en cours, veuillez patienter..."; /* On crée l'objet XHR */ creerRequete(); /* Définition du fichier de traitement */ var url = 'province.php?idr='+ idr; /* Envoi de la requête à la page de traitement */ requete.open('GET', url, true); /* On surveille le changement d'état de la requête qui va passer successivement de 1 à 4 */ requete.onreadystatechange = function() { /* Lorsque l'état est à 4 */ if(requete.readyState == 4) { /* Si on a un statut à 200 */ if(requete.status == 200) { /* Mise à jour de l'affichage, on appelle la fonction apropriée */ actualiserProvinces(); } } }; requete.send(null); } } <!--commune--> function actualiserCommunes() { var listeCommunes = requete.responseText; var blocListe = document.getElementById('blocCommunes'); blocListe.innerHTML = listeCommunes; } /** * Fonction publique appelée par la page affichée. * Cette fonction va initialiser la création de l'objet XHR puis appeler * le code serveur afin de récupérer les données à modifier dans la page. */ function getCommunes(idp) { /* Si il n'y a pas d'identifiant de région, on fait disparaître la seconde liste au cas où elle serait affichée */ if(idp == 'vide') { document.getElementById('blocCommunes').innerHTML = ''; } else { /* À cet endroit précis, on peut faire apparaître un message d'attente */ var blocListe = document.getElementById('blocCommunes'); blocListe.innerHTML = "Traitement en cours, veuillez patienter..."; /* On crée l'objet XHR */ creerRequete(); /* Définition du fichier de traitement */ var url = 'communes.php?idp='+ idp; /* Envoi de la requête à la page de traitement */ requete.open('GET', url, true); /* On surveille le changement d'état de la requête qui va passer successivement de 1 à 4 */ requete.onreadystatechange = function() { /* Lorsque l'état est à 4 */ if(requete.readyState == 4) { /* Si on a un statut à 200 */ if(requete.status == 200) { /* Mise à jour de l'affichage, on appelle la fonction apropriée */ actualiserCommunes(); } } }; requete.send(null); } }
et enfin la commune et la province

Code : Tout sélectionner

<?php /** * Code qui sera aeeplé par un objet XHR et qui * retournera la liste déroulante des départements * correspondant à la région sélectionnée. */ /* Paramètres de connexion */ $serveur = "localhost"; $admin = "root"; $mdp = ""; $base = "fichierelectoral"; /* On récupère l'identifiant de la région choisie. */ $idr = isset($_GET['idr']) ? $_GET['idr'] : false; $idp = isset($_GET['idp']) ? $_GET['idp'] : false; /* Si on a une région, on procède à la requête */ if(false !== $idr) { /* Cération de la requête pour avoir les départements de cette région */ $sql2 = "SELECT `id`, `name`". " FROM `province`". " WHERE `region_id` = ". $idr ."". " ORDER BY `id`;"; $connexion = mysql_connect($serveur, $admin, $mdp); mysql_select_db($base, $connexion); $rech_province = mysql_query($sql2, $connexion); /* Un petit compteur pour les départements */ $nb_province = 0; /* On crée deux tableaux pour les numéros et les noms des départements */ $code_province = array(); $nom_province = array(); /* On va mettre les numéros et noms des départements dans les deux tableaux */ while(false != ($ligne_province = mysql_fetch_assoc($rech_province))) { $code_province[] = $ligne_province['id']; $nom_province[] = $ligne_province['name']; $nb_province++; } /* Maintenant on peut construire la liste déroulante */ $liste = ""; $liste .= '<select name="province" id="province" onchange="getCommune(this.value);>'."\n"; $liste .= '<option value="-1">- - - Choisissez une province - - -</option>'."\n"; for($d = 0; $d < $nb_province; $d++) { $liste .= ' <option value="'. $code_province[$d] .'">'. htmlentities($nom_province[$d]) .'</option>'."\n"; } $liste .= '</select>'."\n"; /* Un petit coup de balai */ mysql_free_result($rech_province); /* Affichage de la liste déroulante */ echo($liste); } /* Sinon on retourne un message d'erreur */ else { echo("<p>Une erreur s'est produite. La région sélectionnée comporte une donnée invalide.</p>\n"); } ?>
Merci pour la compréhension



Cordialement