IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Trois menus déroulants liés php


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Statisticienne et gestionnaire de BDD
    Inscrit en
    Avril 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Statisticienne et gestionnaire de BDD
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Trois menus déroulants liés php
    Bonjour à tous,

    Je souhaite créer trois menus déroulants
    1° : Départements d'île de france
    2° : commune d'île de france
    3° : code postal d'île de france

    Je souhaite que lorsqu'on sélectionne le département, ne s'affichent dans le 2e menu déroulant que les communes concernant le département choisis et dans le 3ème menu déroulant le code postal concernant la commune.

    J'ai une table de 1303 lignes avec ces trois champs qui est sur PhpMyadmin (au nom de idf_dep_com) et que j'appelle par une requête SQL. La première liste (département) se déroule comme prévu, mais rien ne s'affiche dans le menu déroulant Commune ni dans le menu déroulant Code Postal. Je suis pas très calée ni en php ni en SQL alors est-ce que quelqu'un pourrait visualiser mon code ci dessous et éventuellement voir d'où viendrait mon erreur? Merci d'avance pour votre aide.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    <?php 
    	include("connexion.php"); 
     
    	if(isset($_POST['dpt']))
    		{
    			$_SESSION['dpt']= $_POST['dpt'];
    			echo 'Vous avez choisi le département'.$_SESSION['dep'].'<br/>';
    		}
     
    	if(isset($_POST['commune']))
    		{
    			$_SESSION['commune']= $_POST['commune'];
    			echo 'Vous avez choisi la commune'.$_SESSION['commune'].'<br/>';
    		}
     
    	if(isset($_POST['postal']))
    		{
    			$_SESSION['postal'] = $_POST['postal'];
    			echo 'vous avez choisi le code postal'.$_SESSION['postal'].'<br />';
    		}
    ?>
     
    Département 
    <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chg_dpt">
    	<select name="dpt" id="dpt" onchange="document.forms['chg_dpt'].submit();">
    		<option>Département</option>
    		<?php
    			$sql1 = "SELECT DISTINCT `dpt` FROM `idf_dep_com` ORDER BY `dpt`";
    			$rech_dpt= mysql_query($sql1);
    			if($rech_dpt != false){
    				while($ligne = mysql_fetch_assoc($rech_dpt)){  ?>
    					<option value="<?php echo $ligne['dpt']; ?>"
    					<?php if(isset($_SESSION['dpt']) == $ligne['dpt'])
    							echo 'selected="selected"'; ?>>
    							<?php echo $ligne['dpt']; ?>
    					</option>
    				<?php
    				}
    			}
    			mysql_free_result($rech_dpt);
    			?>
    	</select>
    </form>  
     
    Commune
    <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chg_commune">
    	<select name="commune" id="commune" onchange="document.forms['chg_commune'].submit();">
    		<option>Commune</option>
    		<?php
    			if(isset($_SESSION['dpt'])){
    				$sql2 = "SELECT `commune`, `dpt`, FROM `idf_dep_com` WHERE `dpt` = ". $_SESSION['dpt'] ."
    						ORDER BY `commune`;";
    				$rech_commune = mysql_query($sql2);
    				if($rech_commune != false){
    					while($ligne = mysql_fetch_assoc($rech_commune)){  ?>
    						<option value="<?php echo $ligne['commune']; ?>"
    						<?php if(isset ($_SESSION['commune'])== $ligne['dpt'])
    								echo 'selected="selected"'; ?>>
    								<?php echo $ligne['commune']; ?>
    						</option>
    					<?php
    					}
    				}
    				mysql_free_result($rech_commune);
    			}
    			?>
    	</select>
    </form>  
     
    Code postal
    <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chg_postal">
    	<select name="postal" id="postal" onchange="document.forms['chg_postal'].submit();">
    		<option>Code postal</option>
    		<?php
    			if(isset($_SESSION['commune'])){
    				$sql3 = "SELECT `postal`, `commune`, FROM `idf_dep_com` WHERE `commune` = ".$_SESSION['commune'] ." 
    						ORDER BY `postal`;";
    				$rech_postal = mysql_query($sql3);
    				if($rech_commune != false){
    					while($ligne = mysql_fetch_assoc($rech_postal)){  ?>
    						<option value="<?php echo $ligne['postal']; ?>"
    						<?php if($_SESSION['commune'] == $ligne['postal'])
    								echo 'selected="selected"'; ?>>
    								<?php echo $ligne['postal']; ?>
    						</option>
    					<?php
    					}
    				}
    				mysql_free_result($rech_postal);
    			}
    			?>
    	</select>
    </form>

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Tes requêtes $sql2 et $sql3 sont mal écrites et doivent provoquer des erreurs.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Statisticienne et gestionnaire de BDD
    Inscrit en
    Avril 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Statisticienne et gestionnaire de BDD
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour ta réponse Bovino.
    Bon, je suis passée par une toute autre façon pour mes deux listes déroulantes.
    ça fonctionne mais il reste encore deux petits problèmes.

    Le premier pb : La liste déroulante des communes ne s'affiche que lorsque j'ai choisi un département dans la liste des départements. J'aimerai avoir les deux listes dès qu'on arrive sur la page.
    Le second pb (plus ennuyeux !) : Lorsque je sélectionne le département des Yvelines par exemple j'ai les villes des Yvelines sans problème mais si admettons je me suis trompée et que je veux faire apparaître finalement la liste des communes des Hauts-de-Seine, la liste des commune reste celle des Yvelines. Il faut recharger la page pour pouvoir à nouveau choisir les communes du bon département. Et pour un formulaire, ce n'est pas pratique du tout.

    Pourriez-vous m'aider à nouveau ?

    Merci
    Dory49

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <form method="post" name="liste">
    	<label>Départements : </label>
    	<select name="dep" id="dep" onchange="com(this.value);">
    	<option value="vide">- - - Choisissez un département - - -</option>
    	<?php
     
     
    	//Connexion à la base de données
    	include("connexion.php"); 
    	//On sélectionne tous les départements
    	$selectdep = mysql_query("SELECT num_dep,nom FROM dep ORDER BY num_dep") or die (mysql_error());
    	while($donnees = mysql_fetch_array($selectdep))
     
           {
    	echo '<option value="'.$donnees['num_dep'].'"';
    	if(isset($_POST["dep"]) && $_POST["dep"]==$donnees['num_dep']){echo " selected";}
    	echo '>'.$donnees['nom'].'</option>';
    	}
     
           ?>
    	</select><br/>
     
    	<!-- Dans ce bloc sera affiché la liste des départements -->
            <div id="bloccom">
     
    	<?php
     
    		/*Pour garder la sélection de la seconde liste, on l'inclue directement dans la page lors de la validation du formulaire*/
    		if(isset($_POST['dep'])){
     
    		//on créer une variable utilisé dans la page "traitement.php"
    		$include = 1;
     
    		//on inclue la page
    		//Numéro du département
    		if(isset($_POST["dep"]) && $_POST["dep"] != 'vide'){
     
    		/*Si la variable $include n'existe pas c'est que le numéro du département passe par AJAX. On a donc besoin d'avoir une connexion avec la base de données.*/
    		/*Quand on poste le formulaire, cette page est inclue directement dans le div "bloccom", donc la connexion est inutile.*/
    		/*Si on inlcue cette page au moment de la validation, c'est uniquement pour garder la sélection "selected" de la liste.*/
    		if(!isset($include)){
     
    		//On indique le Content-Type utilisé
    		header('Content-Type: text/html; charset="iso-8859-1"');
     
    		//Variable de connexion BDD
    		include("connexion.php"); 
    		}
    		?>
     
    	<label>Communes : </label>
    	<select name="com" id="com">
    	<option value="vide">- - - Choisissez une commune - - -</option>
    		<?php
    			//On sélectionne les communes en fonction du numéro de département
    			$selectcom = mysql_query("SELECT num_com,nom FROM com WHERE num_dep=".mysql_real_escape_string($_POST["dep"])." ORDER BY nom") or die (mysql_error());
     
    			//On boucle
    			while($donnees = mysql_fetch_assoc($selectcom))
    			{
    			echo '<option value="'.$donnees['num_com'].'"';
    			if(isset($_POST["com"]) && $_POST["com"]==$donnees['num_com']){ echo " selected"; }
    			echo '>'.$donnees['nom'].'</option>';
    			}
    		?>
     
    	</select><br/>
     
    		<?php } 
    			}
    		?>
    </div>

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    1 ) Il faut sortir la définition de la liste de la condition d'alimentation : tu crées la liste déroulante vide si aucun département n'est sélectionné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <label>Communes : </label>
    <select name="com" id="com">
    <option value="vide">- - - Choisissez une commune - - -</option>
    <?php
     
    /*Pour garder la sélection de la seconde liste, on l'inclue directement dans la page lors de la validation du formulaire*/
    	if(isset($_POST['dep'])){
    	// alimentation de la liste	
    	}
    ?>
    </select>
    2) Tu appelles une fonction JS sur ta liste des départements <select name="dep" id="dep" onchange="com(this.value);">. Tout dépend donc de ce que fait ta fonction.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Novembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Novembre 2013
    Messages : 13
    Points : 20
    Points
    20
    Par défaut
    Il te faudra surement passer par javascript. Cela te permettra de modifier le css à la volée et de cacher ou afficher des morceaux de liste.
    J'ai bossé dessus cette semaine, voici ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    /*
    * File: toggleDisplay.js
    *
    * Version: 1.0.0
    *
    * Author: sébastien Delannoy
    *
    * Creation date: 21/04/2015
    *
    * Purpose: Used to toggle display (none => block || block =>none) from
    * a html list (<select><option></option></select>)
    *
    */
     
    'use strict'
     
    function ToggleDisplay(b) {
        var a = document.getElementsByClassName('choice'); 		// HTMLObject
     
        document.getElementById(b).style.display = 'block';		// Display selected item
     
        // Create an array whith all HTMLObject values
        var tabChoice = [];
        for ( var i = 0; i < a.length; i++ ){
    	tabChoice.push(a[i].value);
        }
        tabChoice.splice(tabChoice.indexOf(b), 1);			// Delete selected item from the array
     
        // Change display (=>none) of array items
        for ( var i=0; i < tabChoice.length; i++ ) {
    	document.getElementById(tabChoice[i]).style.display = 'none';
        }
    }
     
    /* ----------------------- How to use -----------------------
    *
    * 1/ Set an unique id on the select marker
    *
    * 2/ Set the class attribute of the option list at the value 'choice'
    *
    * 3/ Call the toggleDisplay function by click on an input button to validate
    *
    * 3/ On click, send the parameter 'value' with the function call
    *
    * exemple:
    * 	<form>
    * 		<select id="myId">
    * 			<option class="choice" value="1">1</option>
    * 			<option class="choice" value="2">2</option>
    * 		</select>
    * 		<input type="button" name="valid" value="submit" onclick="ToggleDisplay(document.getElementById('myId').value)" />
    * 	</form>
    *
    */
    Tu devras la modifier mais l'idée est de mettre un attribut class à chaque catégorie... Cette fonction fait son boulot, tu la trouves en action ici:
    http://boombeach.ovh/index.php?contr...e&action=Stats
    Il te faudra charger toutes les listes au chargement de la page, javascript fera le reste.

    Tu excuseras mon anglais dans ma fonction

Discussions similaires

  1. [1.x] deux menus déroulants liés
    Par bs.wassel dans le forum Symfony
    Réponses: 3
    Dernier message: 13/04/2012, 15h53
  2. 4 Menus déroulants liés - Petit bug
    Par grandpa006 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/02/2008, 19h43
  3. menus déroulants liés
    Par syella34 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/07/2007, 13h49
  4. Deux menus déroulants liés entre eux
    Par coco38 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/04/2007, 15h31
  5. 2 menus déroulants liés
    Par hugo69 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/12/2006, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo