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 :

Formulaire avec liste déroulant dynamique


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Par défaut Formulaire avec liste déroulant dynamique
    Bonjour,

    Je suis entrain de concevoir un formulaire avec deux listes déroulantes qui sont liées c'est à dire que le choix d'un champ dans le premier change le contenu de la deuxième liste en php. Voici le code de cette tâche.
    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
     
    <?php
    if(isset($_POST['ok']) && isset($_POST['sous_categ']) && $_POST['sous_categ'] != "")
    {
        $categ_selectionnee = $_POST['categ'];
        $dept_selectionne = $_POST['sous_categ'];
    ?>
    <p>Vous avez sélectionné la sous-catégorie <?php echo($dept_selectionne); ?> dans la catégorie <?php echo($categ_selectionnee); ?></p>
    <p>
      <?php
    }
    ?>
    </p>
    <p>
      <?php
     
    $connexion = mysql_pconnect($serveur, $admin, $mdp);
    if($connexion != false)
    {
        $choixbase = mysql_select_db($base, $connexion);
        $sql1 = "SELECT `id_categ`, `categ`".
        " FROM `categ`".
        " ORDER BY `id_categ`";
        $rech_categs = mysql_query($sql1);
        $code_categ = array();
        $categ = array();
     
        /* On active un compteur pour les régions */
        $nb_categs = 0;
        if($rech_categs != false)
        {
            while($ligne = mysql_fetch_assoc($rech_categs))
            {
                array_push($code_categ, $ligne['id_categ']);
                array_push($categ, $ligne['categ']);
     
                /* On incrémente de compteur */
     
                $nb_categs++;
     
            }
     
        }
     
        ?>
    </p>
    <table align="center"><tr>
        <td width="536" height="31">
    <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
     
    <fieldset style="border: 3px double #333399">
     
    <legend>Sélectionnez une catégorie</legend>
     
    <p>
      <select name="categ" id="categ" onchange="document.forms['chgdept'].submit();">
     
        <option value="-1">- - - Choisissez une catégorie - - -</option>
     
        <?php
     
        for($i = 0; $i < $nb_categs; $i++)
     
        {
     
    ?>
     
        <option value="<?php echo($code_categ[$i]); ?>"<?php echo((isset($idr) && $idr == $code_categ[$i])?" selected=\"selected\"":null); ?>><?php echo($categ[$i]); ?></option>
     
        <?php
     
        }
     
        ?>
     
      </select>
       <?php echo $categ[1]; ?>  
      <?php
        mysql_free_result($rech_categs);
        /* 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_sous_categ`, `sous_categ`".
            " FROM `sous_categ`".
            " WHERE `id_categ` = ". $idr ."".
            " ORDER BY `id_sous_categ`;";
            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_sous_categ']);
                    array_push($nom_dept, $ligne_dept['sous_categ']);
                    $nd++;
                }
                /* Maintenant on peut construire la liste déroulante */
                ?>  
      <select name="sous_categ" id="sous_categ">
        <?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]); ?></option 
        <?php
                }
    ?>
      </select>
      <?php
            }
            /* Un petit coup de balai */
            mysql_free_result($rech_dept);
        }
    ?>
      </p>
    <p><br />
      <input type="submit" name="ok" id="ok" value="Envoyer" />
    </p>
    </fieldset>
    </form>
    </td>
      </tr>
    </table>
    <?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
    }
    ?>
    Mon problème est que je veux par la suite envoyer le contenu du formulaire entier vers une autre page mais je ne peut plus utiliser la balise form puisqu'il sert déjà pour la première tâche dans le choix du contenu de la deuxième liste déroulante. Aidez moi please

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour et merci d'utiliser la balise [CODE]

    Pourquoi ne pas utiliser AJAX plutot pour faire une série de liste déroulante liées ?

  3. #3
    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
    Par défaut
    Tes listes liées sont gerées en javascript par l'evenement onchange, je n'ai pas compris pourquoi tu ne pourrais pas utilise de <form> pour valider ton formulaire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Par défaut
    Aufait je n'ai aucune notion en ajax ce qui fait que je ne me suis pas penché vers cette solution.

    Mais le form qui est là est mis pour justement recharger la page après le choix de la première liste pour afficher le correspondant dans la seconde:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    onchange="document.forms['chgdept'].submit();"
     
    <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">

  5. #5
    Membre chevronné Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Par défaut
    Tu peux tres bien mettre 2 form :-)

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Par défaut
    Mais je croyais qu'il n'était pas possible d'imbriquer deux form?
    Explique moi comment je dois faire pour cela.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Par défaut
    Bonjour j'ai pu obtenir la version javascirpt de mon code donc je peux utiliser mon Form à ma guise. Il y a juste un ptit blème je n'arrive pas à récupérer les valeurs choisies dans les deux listes déroulantes pour les envoyer via le formulaire vers une autre page.
    Voir le code ci-dessous:

    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
    <?php /* Requête SQL de récupération des données */
     
    $sql = "SELECT id_sous_categ AS idd, sous_categ AS dept, categ.id_categ AS idr, categ ".
    "FROM sous_categ, categ ".
    "WHERE sous_categ.id_categ = categ.id_categ ".
    "ORDER BY categ.id_categ;";
     
    /* Connexion et exécution de la requête */
     
    $connexion = mysql_pconnect($serveur, $admin, $mdp);
    if($connexion != false)
    {
        $choixbase = mysql_select_db($base, $connexion);
        $recherche = mysql_query($sql, $connexion);
     
        /* Pour ne pas écraser mes tableaux, je crée un témoin */
     
        $temoin_r = 0;
     
        /* Création du tableau PHP des valeurs récupérées */
     
        $categs = array();
     
        /* Index du département par tableau régional */
     
        $id = 0;
        while($ligne = mysql_fetch_assoc($recherche)
        {
            $r = $ligne['idr'];
            $d = $ligne['idd'];
     
            /* Je vérifie si je suis toujours dans la même région, sinon je crée les tableaux nécessaires */
     
            if($temoin_r != $r)
            {
               $categs[$r] = array();
     
                /* J'ajoute laa région */
     
                $categs[$r][0] = $ligne['categ'];
                $categs[$r][1] = array();
                $categs[$r][2] = array();
                $temoin_r = $r;
                $id = 0;
            }
            /* J'ajoute les départements */
     
            $categs[$r][1][$id] = $d;
            $categs[$r][2][$id] = $ligne['dept'];
            $id++;
        }
        /* On sérialise le tableau obtenu pour traitement par JavaScript */
     
        $chaine = htmlspecialchars(serialize($categs), ENT_QUOTES);
    ?>
     
     
    <form action="form_ajout.php" method="post" id="chgdept" enctype="multipart/form-data">
     
      <fieldset style="border: 3px double #333399">
      <legend>Sélectionnez une cat&eacute;gorie</legend>
    <p><select name="categ" id="categ" onchange="changeDept(tab,this.value);">
       <option value="vide">- - - Choisissez une cat&eacute;gorie - - -</option>
     
        <?php  /* Construction de la première liste : on se sert du tableau PHP */
     
        $nbr = count($categs);
        foreach($categs as $nr => $nom)
        {       
        ?>
        <option value="<?php echo($nr); ?>"><?php echo($nom[0]); ?></option>
    <?php     }     ?>
        </select><p id="blocsous_categs"></p><br /></p>
        <input type="submit" name="ok" id="ok" value="Envoyer" />
      </fieldset>
    </form>

  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
    Par défaut
    ah oui effectivement tu es bloqué comme ça.

    Les listes liées avec ajax ce n'est vraiment pas compliqué :
    http://siddh.developpez.com/articles/ajax/
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/09/2007, 13h33
  2. Lenteur de formulaires avec listes déroulantes
    Par olese dans le forum InfoPath
    Réponses: 1
    Dernier message: 27/08/2007, 08h25
  3. formulaire avec liste déroulante
    Par catmor dans le forum Modélisation
    Réponses: 1
    Dernier message: 21/06/2007, 19h18
  4. Recherche formulaire avec liste déroulante
    Par kimar dans le forum Access
    Réponses: 2
    Dernier message: 28/07/2006, 12h02
  5. Pb Formulaire avec liste déroulante
    Par Rouanou dans le forum IHM
    Réponses: 12
    Dernier message: 23/11/2005, 16h51

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