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

Langage PHP Discussion :

Liste Deroulante dynamique et affichage


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Commercial
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 33
    Points
    33
    Par défaut Liste Deroulante dynamique et affichage
    Bonjour à tous,

    Etant très débutant un ami m'a aidé à écrire ce code que voici (il fait parti d'une page formulaire envoi POST), l'objet de ce code est :

    - sur une page afficher un menu déroulant dynamique en fonction d'une table 'insee' qui contient 4 colonnes : commune, cp, insee, et departement.

    Sur cette meme page j'ai un menu déroulant sur les départements qui ensuite fait le tri pour aller chercher uniquement les communes du département et qui dans un hidden doit me permettre de récupérer la valeur insee correspondante.

    Donc en gros : je choisi un departement, il m'affiche une liste des communes, je choisi la commune et je sauvegarde le code insee dans mon input hidden en applicuant un submit global lors de l'envoi de mon formulaire.

    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
     
    <?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    = "veille";
    /* On récupère si elle existe la valeur de la région envoyée par le formulaire */
    $idr = isset($_POST['departement'])?$_POST['departement']:null;
    ?><head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
    </head>
     
      <?php
    if(isset($_POST['ok']) && isset($_POST['insee']) && $_POST['insee'] != "")
    {
        $departement_selectionnee = $_POST['departement'];
        $insee_selectionne = $_POST['insee'];
    ?>
    </h3>
     
    <p>Vous avez sélectionné le numéro insee <?php echo($insee_selectionne); ?> dans le departement <?php echo($departement_selectionnee); ?>
      <?php
    }
    ?>
    <?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 DISTINCT `departement` FROM `insee` ORDER BY `departement`"; // , 'insee' ne sert à rien ici *************************
        $rech_departement = mysql_query($sql1);
        $code_departement = array();
        $departement = array();
        /* On active un compteur pour les régions */
        $nb_departement = 0;
        if($rech_departement != false)
        {
            while($ligne = mysql_fetch_assoc($rech_departement))
            {
             //   array_push($code_departement, $ligne['insee']); // inutile ******************************
                array_push($departement, $ligne['departement']);
                /* On incrémente de compteur */
                $nb_departement++;
     
     
            }
    	}
    	else
    {
    echo 'toto';
    } 
     
        ?>
    </p>
    <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chginsee">
      <fieldset style="border: 3px double #333399">
    <legend>Sélectionnez un d&eacute;partement</legend>
    <legend>
    <select name="departement" id="departement" onchange="document.forms['chginsee'].submit();">
      <option value="-1">- - - Choisissez un departement - - -</option>
      <?php
        for($i = 0; $i < $nb_departement; $i++)
        {
    ?>
      <option value="<?php echo($departement[$i]); ?>"<?php echo((isset($idr) && $idr == $departement[$i])?" selected=\"selected\"":null); ?>><?php echo($departement[$i]); ?></option>
     
      <?php
        }
        ?>
    </select>
        <?php
        //mysql_free_result($rech_commune);
        /* 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)
        {
            /* Création de la requête pour avoir les départements de cette région */
          $sql2 ='"SELECT `insee`,`commune` FROM `insee` WHERE `departement` = "'. $idr .'" ORDER BY `insee`;';//******************************
     
    			var_dump($sql2);        
     
    	   if($connexion != false)
            {
                $rech_insee = 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 */
     
                $tab_Insee = array();//  **************************************
                $tab_Commune = array();//  **************************************
     
    	  /* On va mettre les numéros et noms des départements dans les deux tableaux */
                while($ligne_insee = mysql_fetch_assoc($rech_insee))
                {
    		$tab_Insee[$nd]=$ligne_insee['insee']; //  **************************************
    		$tab_Commune[$nd]=$ligne_insee['ville'];//  **************************************
     
                     $nd++;
                }
    		$tab_Insee_Commune=array('insee'=>$tab_Insee,'commune'=>$tab_Commune);
                /* Maintenant on peut construire la liste déroulante */
                ?>
    <select name="insee" id="insee">
                <?php  
                for($d = 0; $d<$nd; $d++)//  ************************************** j'ai quasi tout changé
                {
                    ?>
      <option value="
    				<?php echo($tab_Insee_Commune['insee'][$d]); ?>
    				">
    				<?php echo($tab_Insee_Commune['commune'][$d]." (". $tab_Insee_Commune['insee'][$d] .")"); ?>
    	</option>
    <?php
                }
    ?>
    </select>
    <?php
            }
            /* Un petit coup de balai */
            mysql_free_result($rech_insee);
        }
    ?>
    </legend>
    </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, veuillez essayer à nouveau ultérieurement.</p>
    <?php
    }
    ?>
    </body>
    </html>
    Le hic... cela ne fonctionne pas et je nage comme pas permis ... du coup une bonne âme peux me dire ou cela plante?

    Merci !


  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <option value="
    				<?php echo($tab_Insee_Commune['insee'][$d]); ?>
    				">
    Comment tu veux t'y retrouver avec un code fouilli comme ça ?
    Avec un régime ça donnerait :
    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
    <?xml version="1.0" encoding="iso-8859-1"?>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
    <?php
    $serveur = "localhost";
    $admin   = "";
    $mdp     = "";
    $base    = "veille";
     
    if (!empty($_POST['ok']) && !empty($_POST['insee'])) {
    	echo '<p>Vous avez sélectionné le numéro insee ' . $_POST['insee'] . ' dans le departement ' . $_POST['departement'] . '</p>';
    }
     
    $idr = isset($_POST['departement']) ? $_POST['departement'] : null; 
     
    $connexion = mysql_connect($serveur, $admin, $mdp) or die('Erreur de connexion');
    mysql_select_db($base, $connexion);
     
    $sql = "SELECT DISTINCT `departement` FROM `insee` ORDER BY `departement`";
    $result = mysql_query($sql);
     
    $tblDepartement = array();
    while($row = mysql_fetch_assoc($result)) {
    	 $tblDepartement[] = $row['departement'];
    }
    ?>
    <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chginsee">
      <fieldset style="border: 3px double #333399">
    <legend>Sélectionnez un d&eacute;partement</legend>
    <legend>
    <select name="departement" id="departement" onchange="document.forms['chginsee'].submit();">
      <option value="">- - - Choisissez un departement - - -</option>
     <?php
        foreach ($tblDepartement as $departement) {
    		$selected = isset($_POST['departement']) && $_POST['departement'] = $departement ? ' selected="selected" ' : '';
    		echo '<option value="' . $departement . '"' . $selected . '>' . $departement . '</option>';
    	}
    ?>
    </select>
    <?php
    if(!empty($_POST['departement'])) {
          $sql = "SELECT `insee`,`commune` FROM `insee` WHERE `departement` = '". mysql_real_escape_string($idr) . "' ORDER BY `insee`";
          $result = mysql_query($sql);
    	echo '<select name="insee" id="insee">';
        while ($row = mysql_fetch_assoc($result)) {
    		echo '<option value="' .$row['insee'] . '">' . htmlspecialchars($commune) . '</option>';
    	}
    	echo '</select>';
    ?>
    </legend>
    </fieldset>
    </form>
    </body>
    </html>

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Commercial
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 33
    Points
    33
    Par défaut
    Effectivement c'est bien plus propre mais comme je l'ai dit je débute ^^

    Alors j'ai bien testé ton code, il manquait juste une } par contre cela ne fonctionne pas tout à fait j'ai bien le menu des départements qui s'affiche mais sur le second menu déroulant on trouve bien un ascenseur mais aucune valeur visible. (et la valeur de la première celulle se remet à blanc "choisissez...")

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Copié/collé m'a tuer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(!empty($_POST['departement'])) {
          $sql = "SELECT `insee`,`commune` FROM `insee` WHERE `departement` = '". mysql_real_escape_string($_POST['departement']) . "' ORDER BY `insee`";

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur JAVA/PHP
    Inscrit en
    Mai 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur JAVA/PHP

    Informations forums :
    Inscription : Mai 2008
    Messages : 61
    Points : 52
    Points
    52
    Par défaut
    Par contre, c'est un peu "moche" de pas prendre les départements par des ID...
    Non?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne comprends pas ce que tu veux dire.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur JAVA/PHP
    Inscrit en
    Mai 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur JAVA/PHP

    Informations forums :
    Inscription : Mai 2008
    Messages : 61
    Points : 52
    Points
    52
    Par défaut
    Je parlais d'avoir un identifiant indexable.

    Mais peut être que le "insee" l'est...

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Dans la logique d'une base de données relationnelles, tu pourrais avoir une table "departement" ; dans ce cas le numéro du département peut être un index.

    Dans ta table INSEE, le numéro INSEE peut être une clef ou bien tu peux avoir une clef numérique en plus.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Commercial
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 33
    Points
    33
    Par défaut
    Salut Salut,

    Bon avant tout merci mon problème est réglé.

    Concernant l'ID en vrai le numero insee se suffit puisque unique ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Liste deroulante dynamique php
    Par RedBit dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/04/2007, 19h49
  2. Liste deroulante dynamique
    Par foxer98 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/04/2007, 09h46
  3. Jsp et liste deroulante dynamique
    Par Nizarazu dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 18/08/2006, 14h22
  4. Liste deroulante dynamique
    Par snetechen dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 14/11/2005, 14h35
  5. [JSP]Problème liste deroulante dynamique
    Par besco dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 09/09/2004, 17h58

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