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 :

Plusieurs listes de choix


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juin 2018
    Messages : 30
    Par défaut Plusieurs listes de choix
    Bonjour,

    j'ai une table client avec

    ID_client nom_client pays_client site_client salle_client
    1 entreprise A Fr Toulouse Concorde
    2 entreprise A Fr Toulouse Beluga
    3 entreprise A Fr Marseille A341
    4 entreprise A Es Madrid Concorde
    5 entreprise B Fr Toulouse Marco Polo
    6 entreprise C Fr Lille Concorde
    ....
    je voudrais faire une liste de choix pour chacune de ces colonnes

    j'arrive a faire la liste déroulante d'entreprise.
    j'arrive a faire la liste déroulante pays dépendante de entreprise

    mais j'arrive pas a crée la troisième liste déroulante site dépendante de entreprise et pays.

    ma question, est il possible de faire ces listes déroulantes en cascade sans utiliser du JavaScript ou Ajax ?

    vous trouverez ci dessous une partie du code

    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
     
    ?>
     
            <form method="post" name="chgsite">
              <fieldset>
                <legend>Sélectionnez le client</legend>
                <select name="client" id="catégorie" onchange="document.forms['chgsite'].submit();">
                  <option value="">- - - Choisissez une catégorie - - -</option>
                  <?php
                  $rech_client = $pdo->query('SELECT distinct nom_client FROM client ORDER BY nom_client');
                  if ($rech_client !== false) {
                      while ($data = $rech_client->fetch(PDO::FETCH_ASSOC)) {
                          echo '<option value="',$data['nom_client'],'"';
                          if(!empty($_POST['client']) && $_POST['client'] == $data['nom_client']){
                              echo ' selected="selected"';
                          }
                          echo '>',$data['nom_client'],'</option>';
                      }
                      $rech_client->closeCursor();
                  }
                  echo '</select><br />';
                  if (!empty($_POST['client'])){
                      /* Cération de la requête pour avoir les départements de cette région */
                      $stmt = $pdo->prepare('SELECT distinct site_client FROM client WHERE nom_client = :id ORDER BY site_client');
                      $stmt->bindParam(':id',$_POST['client']);
                      $stmt->execute();
                      echo '<select name="site" id="site">';
                      while($data = $stmt->fetch(PDO::FETCH_ASSOC)){
                          echo '<option value="',$data['site_client'],'"';
                          if(!empty($_POST['site']) && $_POST['site'] == $data['site_client']){
                              echo ' selected="selected"'; 
                          }
                          echo '>',$data['site_client'],'(',$data['site_client'],')</option>';
                      }
                      $stmt->closeCursor();
                      echo '</select>';
                  }
                  	echo '<br>';
                  if (!empty($_POST['site'])){
                      /* Cération de la requête pour avoir les départements de cette région */
                      $stmtt = $pdo->prepare('SELECT salle_client FROM client WHERE site_client = :ie and nom_client=:ic');
                      $stmtt->bindParam(':ie',$_POST['site']);
                      $stmtt->bindParam(':ic',$_POST['client']);
                      $stmtt->execute();
                      echo '<select name="salle" id="salle">';
                      while($data = $stmtt->fetch(PDO::FETCH_ASSOC)){
                          echo '<option value="',$data['salle_client'],'"';
                          if(!empty($_POST['salle']) && $_POST['salle'] == $data['salle_client']){
                              echo ' selected="selected"'; 
                          }
                          echo '>',$data['salle_client'],'(',$data['salle_client'],')</option>';
                      }
                      $stmtt->closeCursor();
                      echo '</select>';
                  }
     
     
                  ?>
                    <br />
                    <input type="submit" name="ok" id="ok" value="Envoyer" />
              </fieldset>
            </form>

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 521
    Par défaut
    Bonjour,

    Oui cela est faisable sans javascript ni jQuery, mais il faut d'abord comprendre la chronologie des variables $_POST parce que lorsqu'on soumet le formulaire en changeant la liste déroulante, php récupère la valeur ancienne qui été affichée dans la liste name="site" et pas la nouvelle valeur qui s'affiche après la soumission.

    Il faut utiliser une variable $site au lieu de $_POST["site"] et continuer le traitement en fonction de cette variable :
    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
     
    <form method="post" name="chgsite">
              <fieldset>
                <legend>Sélectionnez le client</legend>
                <select name="client" id="catégorie" onchange="document.forms['chgsite'].submit();">
                  <option value="">- - - Choisissez une catégorie - - -</option>
                  <?php
                  $rech_client = $pdo->query('SELECT distinct nom_client FROM client ORDER BY nom_client');
                  if ($rech_client !== false) {
                      while ($data = $rech_client->fetch(PDO::FETCH_ASSOC)) {
                          echo '<option value="',$data['nom_client'],'"';
                          if(!empty($_POST['client']) && $_POST['client'] == $data['nom_client']){
                              echo ' selected="selected"';
                          }
                          echo '>',$data['nom_client'],'</option>';
                      }
                      $rech_client->closeCursor();
                  }
                  echo '</select><br />';
                  if (!empty($_POST['client'])){
                      /* Cération de la requête pour avoir les départements de cette région */
                      $stmt = $pdo->prepare('SELECT distinct site_client FROM client WHERE nom_client = :id ORDER BY site_client');
                      $stmt->bindParam(':id',$_POST['client']);
                      $stmt->execute();
                      echo '<select name="site" id="site" >';
     
                      while($data = $stmt->fetch(PDO::FETCH_ASSOC)){
                          echo '<option value="'.$data['site_client'].'"';
                          if( ( isset($_POST['site']) && $data['site_client']==$_POST['site']) || ( !isset($_POST['site'],$site) ) ){//si $_POST["site"] est défini et = à $data["site_client"] OU $site et $_POST["site"] ne sont pas définis			  
                             $site=$data['site_client'];//on stock la valeur de l'option sélectionnée dans $site
                              echo ' selected="selected"';
                          }
                          echo '>'.$data['site_client'].'('.$data['site_client'].')</option>';
                      }
                      $stmt->closeCursor();
                      echo '</select>';
                  }
                  	echo '<br>'; 
                  if (isset($site)){//si $site est bien défini  
                      /* Cération de la requête pour avoir les départements de cette région */
                      $stmtt = $pdo->prepare('SELECT salle_client FROM client WHERE site_client=:ie and nom_client=:ic');
                      $stmtt->bindParam(':ie',$site);//on le passe dans bindParam
                      $stmtt->bindParam(':ic',$_POST['client']);
                      $stmtt->execute();
     
                      echo '<select name="salle" id="salle">';
     
                      while($data = $stmtt->fetch(PDO::FETCH_ASSOC)){
                          echo '<option value="'.$data['salle_client'].'"';
                          if(!empty($_POST['salle']) && $_POST['salle'] == $data['salle_client']){
                              echo ' selected="selected"'; 
                          }
                          echo '>'.$data['salle_client'].'('.$data['salle_client'].')</option>';
                      }
                      $stmtt->closeCursor();
                      echo '</select>';
                  }
    		echo "nom client :".($_POST['client']??'pas de post client')."<br />"
    		       .", site :".($site??'pas de $site ').'<br />'
    		       .', postSite :'.($_POST['site']??'aucun post site ').'<br />'
    		       .", salle :".($_POST['salle']??'Pas de post salle');
                    ?>
                    <br />
                    <input type="submit" name="ok" id="ok" value="Envoyer" />
              </fieldset>
            </form>
    Je ne voulais pas modifier radicalement ton code afin de ne pas t'embrouiller..., et regarde ce qui s'affichera par le echo en fin de script.

  3. #3
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juin 2018
    Messages : 30
    Par défaut
    Bonjour
    merci Toufik83 pour ton retour.
    ton code fonctionne et affiche les 3 liste déroulantes.
    néanmoins les listes site et salle ne se réactualise pas. je m'explique, lorsque je choisi mon client les listes site et salle s'adapte. exemple je prend
    le client "ENTREPRISE C" dans la liste client et par défaut la liste site est "Lille" et par défaut la liste site est "Concorde".
    le résultat de echo est
    nom client : ENTREPRISE C
    , site : Lille
    , postSite : aucun post site
    , salle : Pas de post salle

    je change de site de l'entreprise C, je sélectionne "Marseille" dans la liste site.
    1/ la liste des salles ne s'actualise pas et je ne trouve les salles appartenant à "Marseille" dans la liste salle
    2/le résultat de echo est
    nom client : ENTREPRISE C
    , site : Lille
    , postSite : aucun post site
    , salle : Pas de post salle

    je clique sur "envoyer"

    j'ai le message "Vous avez sélectionné le site ENTREPRISE C dans la catégorie Marseille
    avec echo
    nom client :ENTREPRISE C
    , site :Marseille
    , postSite :Marseille
    , salle :Concorde

    Maintenant dans la liste des salles je peux choisir les salles de ma liste Marseille.

    j'ai l'impression que en passant par la variable $site, elle fige les salles.

    est ce que il est possible de faire une actualisation des salles sans passer par le bouton "Envoyer"?

    merci à vous

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 521
    Par défaut
    Bonjour,

    Citation Envoyé par tiago77 Voir le message
    je change de site de l'entreprise C, je sélectionne "Marseille" dans la liste site.
    1/ la liste des salles ne s'actualise pas
    C'est normal parce que name="site" ne possède pas d'événement onchange comme name="client".

    Si tu ne veux plus passer par le bouton envoyer, attache le onchange à la liste des sites.

  5. #5
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juin 2018
    Messages : 30
    Par défaut
    merci Toufik83,

    tout est fonctionnel

    encore merci a toi

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 521
    Par défaut
    De rien , n'oublis pas de cliquer sur le bouton si la discussion est résolue.

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

Discussions similaires

  1. [AJAX] Liste de choix dans plusieurs SELECT
    Par llaffont dans le forum Contribuez
    Réponses: 9
    Dernier message: 24/06/2011, 10h25
  2. Réponses: 9
    Dernier message: 30/05/2011, 09h12
  3. selectionner plusieurs choix dans une seule liste de choix
    Par outland42 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/04/2009, 19h01
  4. plusieurs liste de choix est-ce possible?
    Par sam_fun dans le forum Access
    Réponses: 3
    Dernier message: 24/10/2006, 22h32
  5. Plusieurs liste de choix dans 1 champs
    Par tek34 dans le forum IHM
    Réponses: 8
    Dernier message: 24/11/2005, 11h43

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