Listes déroulantes dynamiques inter-dépendantes

Eléphanteau du PHP | 10 Messages

25 sept. 2005, 20:13

je cromprends rien ...
Merci quand meme pour ton aide mais là ... ca chauffe dans la boite a cerveau!!

Eléphanteau du PHP | 10 Messages

25 sept. 2005, 22:12

Si quelqu'un c'est m integrer une troisieme boite avec les villes ...
MERCI

Mammouth du PHP | 19672 Messages

25 sept. 2005, 22:14

Fais donc ce que je t'ai conseillé : crée une page html avec tes trois listes déroulantes, t'occupes pas trop des valeurs contenues dans les listes, c'est juste pour avoir le code HTML complet de la page sans PHP pour le moment.

Quand tu auras fait ça, ce sera un premier point de gagné: tu pourras procéder à un découpage logique. Tu n'avanceras à rien autrement de la manière dont c'est parti.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 10 Messages

26 sept. 2005, 08:48

Code : Tout sélectionner

<form name="form1"> <select name="region" method="post" action=""> <option selected>--- Choisissez une région ---</option> <option>PACA</option> </select> </form> <form name="form2"> <select name="departement" method="post" action=""> <option selected>--- Choisissez un département ---</option> <option>VAR</option> </select> </form> <form name="form3"> <select name="ville" method="post" action=""> <option selected>--- Choisissez une ville ---</option> <option>TOULON</option> </select> </form>
:?: c'est ca que tu veux :?:

Mammouth du PHP | 19672 Messages

26 sept. 2005, 22:18

On va y arriver effectivement: mais ce n'est pas moi qui veux ça: c'est une méthode que je te suggère pour l'avoir pratiquée longtemps et pour la pratiquer encore.

En fait c'est très simple. Je détermine ce que je veux obtenir et je construis la maquette de ce résultat recherché tout en sachant que pour les besoins du moment, je vais mettre des valeurs bidons juste pour meubler et ajuster l'affichage de la page.

Quand cette page est prête, je peux découper les parties dont j'ai besoin : l'en-tête de la page, le menu de navigation, le contenu, le pied de page. Restons-en au contenu : dans le cas qui nous occupe, il s'agit de trois listes déroulantes, la seconde dépendant de la première et la troisième dépendant de la seconde. Dans la maquette, elles s'affichent toutes les trois, c'est normal, c'est le but recherché. Mais maintenant, pour développer, j'ai les éléments html dont je n'aurai plus à m'occuper autrement que pour y insérer le contenu dynamique.

à partir de là, je peux commencer à développer l'alogorithme qui va faire en sorte qu'au départ, je ne verrai que la première liste. J'insère les éléments et instructions nécessaires pour l'affichage de la seconde au changement de sélection dans la première. Quand ça fonctionne, je continue en ajoutant encore des éléemtns pour faire afficher la troisième au changement de sélection dans la seconde.

Mais en tout état de cause, je ne fais pas en même temps du HTMl et du PHP : je fais d'abord le HTML et après seulement je fais du PHP sur la base des éléments HTML développé auparavant. Comme ça, je suis certain d'obtenir le résultat voulu.

Est-ce que tu comprends mieux mon système expliqué comme ça ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 10 Messages

27 sept. 2005, 12:59

Saloutche ben voila apres 3 nuits voila il faud juste ajouter une table "ville" avec des champs "id" en auto_incremente, un "intitule" en texte avec le nom des villes, un "id_dept" qui correspond a l "id_departement", un "cp" qui correspond au code postal.

Ensuite j ai modifié la direction du bouton vers un fichier "ville.php" avec la variable 'id" de la ville qui s'affiche dans l url (ex: ville.php?id=29243)

Comme ca on peut afficher des infos correspondant a cette variable.

Voila c'est :P :P :P :P :P :P

<?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   = "*******";
$mdp     = "******";
$base    = "******";
/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;
$dept_selectionne = isset($_POST['departement'])?$_POST['departement']:null;
$ville_selectionne = isset($_POST['ville'])?$_POST['ville']: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 département selon la région 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 by Xavier </h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php
if(isset($_POST['ok']) && isset($_POST['departement']) && $_POST['departement'] != "")
{
    $region_selectionnee = $_POST['region'];
    $dept_selectionne = $_POST['departement'];
?>
<p>Vous avez sélectionné le département <?php echo($dept_selectionne); ?> dans la région <?php echo($region_selectionnee); ?></p>
<?php
}
?>
<h3>Trouver un département</h3>
<?php
/* On établit la connexion à MySQL avec mysql_pconnect() plutôt qu'avec mysql_connect()
*  car on aura besoin de la connexion un peu plus loin dans le script */
$connexion = mysql_pconnect($serveur, $admin, $mdp);
if($connexion != false)
{
    $choixbase = mysql_select_db($base, $connexion);
    $sql1 = "SELECT `id_region`, `region`".
    " FROM `region`".
    " ORDER BY `id_region`";
    $rech_regions = mysql_query($sql1);
    $code_region = array();
    $region = array();
    /* On active un compteur pour les régions */
    $nb_regions = 0;
    if($rech_regions != false)
    {
        while($ligne = mysql_fetch_assoc($rech_regions))
        {
            array_push($code_region, $ligne['id_region']);
            array_push($region, $ligne['region']);
            /* On incrémente de compteur */
            $nb_regions++;
        }
    }
    ?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
<fieldset style="border: 3px double #333399">
<legend>Sélectionnez une région</legend>
<select name="region" id="region" onchange="document.forms['chgdept'].submit();">
  <option value="-1">- - - Choisissez une région - - -</option>
    <?php
    for($i = 0; $i < $nb_regions; $i++)
    {
?>
  <option value="<?php echo($code_region[$i]); ?>"<?php echo((isset($idr) && $idr == $code_region[$i])?" selected=\"selected\"":null); ?>><?php echo($region[$i]); ?></option>
<?php
    }
    ?>
</select>
    <?php
    mysql_free_result($rech_regions);
    /* On commence par vérifier si on a envoyé un numéro de région 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 départements de cette région */
        $sql2 = "SELECT `id_departement`, `departement`".
        " FROM `departement`".
        " WHERE `id_region` = ". $idr ."".
        " ORDER BY `id_departement`;";
        if($connexion != false)
        {
            $rech_dept = mysql_query($sql2, $connexion);
            /* Un petit compteur pour les départements */
            $nd = 0;
            /* On crée deux tableaux pour les numéros et les noms des départements */
            $code_dept = array();
            $nom_dept = array();
            /* On va mettre les numéros et noms des départements dans les deux tableaux */
            while($ligne_dept = mysql_fetch_assoc($rech_dept))
            {
                array_push($code_dept, $ligne_dept['id_departement']);
                array_push($nom_dept, $ligne_dept['departement']);
                $nd++;
            }
            /* Maintenant on peut construire la liste déroulante */
            ?>
<select name="departement" id="departement" onchange="document.forms['chgdept'].submit();">
           <option value="-1">---Choix de dept---</option> 
		   <?php  
            for($d = 0; $d<$nd; $d++)
            {
                ?>
				
  <option value="<?php echo($code_dept[$d]); ?>"<?php echo((isset($dept_selectionne) && $dept_selectionne == $code_dept[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_dept[$d]." (". $code_dept[$d] .")"); ?></option>
                <?php
            }
?>
</select>
<?php
        }
        /* Un petit coup de balai */
        mysql_free_result($rech_dept);
    }
	
	if(isset($dept_selectionne))
    {
        /* Création de la requête pour avoir les villes de ce dept */
        $sql3 = "SELECT `id`, `intitule`, `cp`".
        " FROM `ville`".
        " WHERE `id_dept` = ". $dept_selectionne ."".
        " ORDER BY `intitule`;";
        if($connexion != false)
        {
            $rech_ville = mysql_query($sql3, $connexion);
            /* Un petit compteur pour les villes */
            $nv = 0;
            /* On crée deux tableaux pour les numéros et les codes postaux */
            $code_ville = array();
            $nom_ville = array();
			$id_ville = array();
            /* On va mettre les CP et noms des villes dans les deux tableaux */
            while($ligne_ville = mysql_fetch_assoc($rech_ville))
            {
                array_push($code_ville, $ligne_ville['cp']);
                array_push($nom_ville, $ligne_ville['intitule']);
				array_push($id_ville,  $ligne_ville['id']);
                $nv++;
            }
            /* Maintenant on peut construire la liste déroulante */
            ?>
<select name="ville" id="ville"  onchange="document.forms['chgdept'].submit();">
           <option value="-1">---Choix des villes---</option> 
            <?php  
            for($v = 0; $v<$nv; $v++)
            {
                ?>
  <option value="<?php echo($id_ville[$v]); ?>"<?php echo((isset($ville_selectionne) && $ville_selectionne == $id_ville[$v])?" selected=\"selected\"":null); ?>><?php echo($nom_ville[$v]." (". $code_ville[$v] .")"); ?></option>
                <?php
            }
?>
</select>
<?php
        }
        /* Un petit coup de balai */
        mysql_free_result($rech_ville);
    }
	
	if(isset($ville_selectionne))
	{
		//echo '<a href="ville.php?id='.$ville_selectionne.'">voir les infos de la ville</a>';
		echo '<input type="button" name="ok" value="Envoyer" onClick="javascript:window.open(\'ville.php?id='.$ville_selectionne.'\')">';
	}
	
?>
<br/>
</fieldset>
</form>
<?php
    /* Terminé, on ferme la connexion */
    mysql_close($connexion);
}
else
{
    /* Si on arrive là, c'est pas bon signe, il faut vérifier les 
    * paramètres de connexion, mot de passe, serveur pas démarré etc... */
?>
<p>Un incident s'est produit lors de la connexion à la base de données, veuiillez essayer à nouveau ultérieurement.</p>
<?php
}
?>
<p><a href="./index2.php" title="Aller vers la version JavaScript">Aller vers la version JavaScript</a></p>
</body>
</html>

Mammouth du PHP | 19672 Messages

27 sept. 2005, 13:11

Ben voilà :) Ça fonctionne ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: