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 plusieurs listes <select> imbriquées


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Points : 8
    Points
    8
    Par défaut Formulaire avec plusieurs listes <select> imbriquées
    Bonjour à tous,

    Je rencontre un problème pour récupérer les variables d'un formulaire constitué de 3 listes <select> imbriquées avec l'événement onchange="this.form.submit()".

    J'ai suivi ce tuto http://www.aidejavascript.com/articl...e=1#sommaire_1 (implémentation en php) mais le problème ce pose dans traitement de l'action avec un autre fichier.

    Je n'arrive pas avec $_POST à récupérer les variables de chaque <select> de manière synchroniser après la soumission du formulaire.

    Merci de votre aide.

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Peux-tu montrer ton code ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    Voilà mon code pour le formulaire (ce fichier est inclut dans toutes les pages du site) :
    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
    144
     
    <form action="recherche.php" name="recherche" method="post">
    <table id="form" border="0" cellpadding="0" cellspacing="0">
    <tr>
    <td>
    <?php
    // Créer le tableau des secteurs de recherche (valeurs identiques au champ 'secteur' de la table 'groupemot')
    $tableau = array (
    "Activité" => "Activité, spécialité",
    "Produit" => "Produit, service",
    "Matériel" => "Matériel, équipement"
    );
    // Afficher la liste des secteurs de recherche
    $html = "<p class='titreselect'>Recherche par :</p>\n";
    $html .= "<select class='select170' name='secteur' onchange='this.form.submit()'>\n";
    foreach ($tableau as $secteur => $titre) {
      // Après la soumission du formulaire, sélectionner le secteur choisit
      if (isset($_POST["secteur"]) && $_POST["secteur"] == $secteur){
        $html .= "<option value='$secteur' selected='selected'>$titre</option>\n";
        $choix_secteur = $_POST["secteur"]; // On récupère la sélection pour la requête suivante
     
      }
      // Sinon afficher la liste complète
      else {
        $html .= "<option value='$secteur'>$titre</option>\n";
      }
    }
    $html .= "</select>\n";
     
    // Afficher la liste des mots-clés (et leur groupe respectif) liés à la liste 'secteur'
    // Avant la soumission du formulaire, choisir le secteur 'Activité' comme valeur par défaut
    if (!isset($_POST["secteur"])) $choix_secteur = "Activité";
    $sql = "
    SELECT DISTINCT C.id_groupe, C.id_mot, ordre, nom_groupe, nom_mot
    FROM groupemot G, choixmot C, mot M
    WHERE G.secteur = '$choix_secteur'
    AND G.id_groupe = C.id_groupe
    AND C.id_mot = M.id_mot
    ORDER BY 3, 4, 5
    ";
    $result = mysql_query($sql) or die("Exécution de la requête 'mot' impossible  !");
     
    $val = "";  // Prévenir le changement de groupe de mots-clés
    $html .= "<p class='titreselect'>Rubrique :</p>\n";
    $html .= "<select class='select170' name='mot' onchange='this.form.submit()'>\n";
    $html .= "<option class='toutafficher' value=0>Sélectionner une rubrique</option>\n";
    while ($ligne = mysql_fetch_array($result, MYSQL_ASSOC)) {
      extract($ligne);
      // Afficher le nom du groupe avec un style css à chaque changement de groupe
      if ($val != $id_groupe) {
        if (isset($_POST["mot"]) && $_POST["mot"] == "G$id_groupe"){
          $html .= "<option class='groupe' value='G$id_groupe' selected='selected'>$nom_groupe</option>\n";
          $choix_groupe = substr($_POST["mot"],1); // On récupère $id_groupe sans le préfixe G pour la requête suivante
        }
        else {
          $html .= "<option class='groupe' value='G$id_groupe'>$nom_groupe</option>\n";
        }
        $val = $id_groupe;
      }
      // Afficher les mots-clés sans style css
      if (isset($_POST["mot"]) && $_POST["mot"] == "M$id_mot"){
        $html .= "<option value='M$id_mot' selected='selected'>$nom_mot</option>\n";
        $choix_mot = substr($_POST["mot"],1); // On récupère $id_mot sans le préfixe M pour la requête suivante
      }
      else {
      $html .= "<option value='M$id_mot'>$nom_mot</option>\n";
      }
    }
    $html .= "</select>\n";
     
    // Afficher la liste des régions liées à la liste 'mot'
    // Si le critère est un groupe de mots-clés
    if (isset($choix_groupe)){
    $sql = "
    SELECT DISTINCT code_dept, departement, region, pays
    FROM choixmot C, localite L
    WHERE C.id_groupe = '$choix_groupe'
    AND C.id_region = L.id_region
    ORDER BY 4, 3, 1
    ";
    }
    // Si le critère est un mot-clé
    if (isset($choix_mot)){
    $sql = "
    SELECT DISTINCT code_dept, departement, region, pays
    FROM choixmot C, localite L
    WHERE C.id_mot = '$choix_mot'
    AND C.id_region = L.id_region
    ORDER BY 4, 3, 1
    ";
    }
    $result = mysql_query($sql) or die("Exécution de la requête 'region' impossible !");
     
    $val = "";  // Prévenir le changement de region
    $html .= "<p class='titreselect'>Région :</p>\n";
    $html .= "<select class='select170' name='region' onchange='this.form.submit()'>\n";
    $html .= "<option class='toutafficher' value=0>Sélectionner une région</option>\n";
    while ($ligne = mysql_fetch_array($result, MYSQL_ASSOC)) {
      extract($ligne);
      // Afficher la liste des régions que si un critère de la liste 'mot' existe
      if (isset($choix_groupe) or isset($choix_mot)){
        // Afficher à chaque changement, le nom de la région avec un style css personnalisé
        if ($val != $region) {
          if (isset($_POST["region"]) && $_POST["region"] == "$region"){
            $html .= "<option class='groupe' value='$region' selected='selected'>$region</option>\n";
            $choix_region = $_POST["region"]; // On récupère la sélection pour la requête suivante
            $val = $region;
          }
          else {
            $html .= "<option class='groupe' value='$region'>$region</option>\n";
            $val = $region;
          }
        }
        // Afficher les départements sans style css
        if ($pays == "France") {
          if (isset($_POST["region"]) && $_POST["region"] == "$code_dept"){
            $html .= "<option value='$code_dept' selected='selected'>$code_dept $departement</option>\n";
            $choix_dept = $_POST["region"]; // On récupère la sélection pour la requête suivante
          }
          else {
            $html .= "<option value='$code_dept'>$code_dept $departement</option>\n";
          }
        }
        // Afficher les pays étrangers sans style css
        if ($pays != "France") {
          if (isset($_POST["region"]) && $_POST["region"] == "$pays"){
            $html .= "<option value='$pays' selected='selected'>$pays</option>\n";
            $choix_pays = $_POST["region"]; // On récupère la sélection pour la requête suivante
          }
          else {
            $html .= "<option value='$pays'>$pays</option>\n";
          }
        }
      }
    }
    $html .= "</select>\n";
    mysql_free_result($result); // Libère le résultat de la mémoire
     
    print $html;
    ?>
    </td>
    </tr>
    </table>
    </form>
    Et voilà comment les variables sont récupérées dans 'recherche.php'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?// Récupération des variables $_POST
    $secteur = $_POST["secteur"];
    $mot = $_POST["mot"];
    $region = $_POST["region"];
    ?>
    Le problème vient dans la synchronisation des variables car lorsque le formulaire est à nouveau soumis avec un changement dans la liste 'secteur' les variables $mot et $region ne sont pas réactualiser.

Discussions similaires

  1. Réponses: 7
    Dernier message: 07/03/2015, 21h28
  2. [MySQL] formulaire avec plusieurs Listes déroulantes mysql
    Par tittano dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 13/02/2009, 15h23
  3. formulaire avec plusieurs listes
    Par soussou92 dans le forum IHM
    Réponses: 7
    Dernier message: 30/05/2008, 15h35
  4. Formulaire avec plusieurs listes déroulantes
    Par cyberdevelopment dans le forum Langage
    Réponses: 5
    Dernier message: 17/07/2006, 16h59

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