Liste déroulante

Résolu
Bonjour,
J'ai une liste déroulante dans mon formulaire, provenant de ma BDD.
Lorsque je sélectionne un choix, je souhaite qu'il reste par défaut, jusqu'à ce que j'en choisisse un autre.
Merci beaucoup de votre aide.

<p>
<label for="add-bureau">Bureau :</label>

<?php
$sql="show columns from users like 'user_bureau'";
$result = DbConnection::select( $sql );
if( DbConnection::hasError() )
{
$error = DbConnection::getError();
}
if( $result )
{
$type=mysql_result($result,0,'Type');
$type=substr($type,5,strlen($type)-5-2);
$resp=split("','",$type);
echo "<select name='bureau' id='add-bureau'>";
echo "<option value='-1'>--liste du bureau--</option>";

foreach( $resp as $row )
{
echo "<option value=$row>$row</option>";
}
echo "</select>";
}
?>
</p>
Configuration: Windows XP
Internet Explorer 7.0

21 réponses

  • Votes
  • Date
  • Date décroissante
Résumé de la discussion

Une liste déroulante dans un formulaire ne conserve pas la valeur sélectionnée et affiche systématiquement la valeur par défaut, même après soumission, ce qui empêche l’utilisateur de voir son choix mémorisé. Plusieurs ont suggéré que le problème venait du code utilisant $_POST['add-bureau'] plutôt que la valeur envoyée par le champ bureau, ce qui rompait la correspondance nom/valeur et il faut remplacer $_POST['add-bureau'] par $_POST['bureau']. En pratique, ce type d'erreur survient lorsque le nom du champ ne correspond pas à celui utilisé dans le traitement, une remarque utile pour des formulaires similaires.

Bobot (l’IA à votre service)
  1. Bonjour,

    Un grand merci à "Alkaaran" pour m'avoir résolu mon problème.
    1. je te donne déjà l'URL

      http://www.cliquedecruet.org/test5/index.php5
      1. Volontiers ! Envoie les par mp
        1. J'ai jamais envoyé de MP alors je suis en train de chercher comment on fait.........
        2. Dis moi juste si tu as tout reçu ??
      2. Alors c'est pas normal... Refais un essai en changeant la selection dans ton formulaire, et si ca marche pas, on va passer par un déboguage plus sérieux
        1. Et si tu veux je peux te donner mes ID pour essayer en direct sur le site ?

          Bien sur si tu as un peu de temps.
          1. N'aurais-tu pas oublié un point virgule après $_SESSION['temp_selection'] = $_POST['add-bureau'] ?

            :)
            1. J'ai fait un copier/coller
            2. quel con j'ai oublié le ; autant pour moi
            3. C'est vraiment le grand bazard ça reste toujours sur "liste du bureau"
              c'est le kaka..................
          2. Oh le con ! Fouette moi ! j'ai confondu id et name :(

            Pour etre clair : modifie $_POST['add-bureau'] par $_POST['bureau']

            :)
            1. Par contre maintenant ça me met cette ligne d'erreur ??

              Parse error: syntax error, unexpected T_REQUIRE_ONCE in E:\wamp\www\test5\index.php5 on line 6
          3. oui oui j'ai mis à chaque fois "Secrétaire" et ça reviens "liste du bureau"
            1. aucune erreur ça retiens pas la sélection précédente.........
              1. Tu enregistre bien au moins une fois une autre valeur que "liste du bureau" ?
            2. "Ca marche pas" erreur php ou" ca marche pas" ton formulaire ne retient pas la precedente selection ?
              1. par défaut c'est "liste du bureau" et ça reste la-dessus..............
            3. Heu non ^^, juste après la fonction session_start() qui est dans index.php5

              Donc plutot comme ceci :

              <?php

              //Du code...

              session_start() ;

              $_SESSION['temp_selection'] = $_POST['add-bureau'] ;

              //Le reste de ton code ...
              ?>
              1. Je ne sais pas ça marche pas ?

                <?php
                session_start();
                $_SESSION['temp_selection'] = $_POST['add-bureau'] ;
                //print_r( $_SESSION['user_id'] );
                //print_r( $_SESSION['user_name'] );
                require_once('conf/config.php5');

                etc........
            4. $_SESSION['temp_selection'] = $_POST['add-bureau'] ;

              Tu dois l'indérer dans la page qui récupère les données de ton formulaire, celle qui est définie ici :
              <form action="index.php5?cat=sorties&page=membres" method="post" > 


              insère le juste après ton session_start()
              1. J'ai mis comme ceci au sommet de la page ??

                <?php
                $_SESSION['temp_selection'] = $_POST['add-bureau'] ;
            5. Fais comme je t'ai dit, modifie tes pages comme ceci : :p

              - Dans ta page de validation de formulaire (index.php5?cat=sorties&page=membres) tu ajoute ceci, au début :
              $_SESSION['temp_selection'] = $_POST['add-bureau'] ;

              Cela va insérer la valeur de ta liste déroulante dans un variable de session...
              Et en suite dans ta page de formulaire, tu modifie dans ton code comme ceci :
              echo "<select name='bureau' id='add-bureau'>";
              echo "<option value='-1'>--liste du bureau--</option>";
              foreach( $resp as $row )
              {
              	if( $_SESSION['temp_selection'] == $row )
              		echo "<option value=$row selected>$row</option>";
              	else
              		echo "<option value=$row>$row</option>";
              }
              echo "</select>";


              Dis moi s'il y a quelquechose qui te dérange ou que tu ne comprends pas :)
              1. Ben en fait c'est ça je sais pas trop ou l'insérer?

                $_SESSION['temp_selection'] = $_POST['add-bureau'] ;
            6. Ben en fait j'ai essayé beaucoup de choix mais rien n'y fait.....
              1. Ok, alors dans ta page de validation de formulaire (index.php5?cat=sorties&page=membres) tu ajoute ceci :

                $_SESSION['temp_selection'] = $_POST['add-bureau'] ;

                Cela va insérer la valeur de ta liste déroulante dans un variable de session...

                Et en suite dans ta page de formulaire, tu modifie dans ton code :

                echo "<select name='bureau' id='add-bureau'>";
                echo "<option value='-1'>--liste du bureau--</option>";
                foreach( $resp as $row )
                {
                	if( $_SESSION['temp_selection'] == $row )
                		echo "<option value=$row selected>$row</option>";
                	else
                		echo "<option value=$row>$row</option>";
                }
                echo "</select>";
                


                Comme ça à l'affichage de ton formulaire, si la $row est la même que celle intégrée précédemment dans la variable de session, ça la prendra par défaut...

                Maintenant, comme je ne suis pas à ta place, ca va peut etre retourner une erreur ;p, reporte la moi au cas ou :)
                1. Bonjour,
                  je suis toujours dans le kaka, si tu peux jeter un oeil sur mon code?
                  J'ai essayé de changer "choix_par_defaut" mais rien de rien...
                  Je te remercie beaucoup

                  <label for="add-bureau">Bureau :</label>

                  <?php
                  $sql="show columns from users like 'user_bureau'";
                  $result = DbConnection::select( $sql );
                  if( DbConnection::hasError() )
                  {
                  $error = DbConnection::getError();
                  }
                  if( $result )
                  {
                  $type=mysql_result($result,0,'Type');
                  $type=substr($type,5,strlen($type)-5-2);
                  $resp=split("','",$type);
                  echo "<select multiple name='bureau' id='add-bureau'>";
                  echo "<option selected value='-1'>--liste du bureau--</option>";
                  foreach( $resp as $row )
                  {
                  if (choix_par_defaut)
                  echo "<option value=$row selected=\"selected\">$row</option>";
                  else
                  echo "<option value=$row>$row</option>";
                  }
                  echo "</select>";
                  }
                  ?>
                2. @Alkaaranje pensais mettre une valeur de la liste ?
                  Mais ça sélectionne entièrement la liste ?
              2. Merci pour ta réponse,
                Mais y at-il une solution à mon problème ?
                Parce que c'est ennuyeux que ça ne me garde pas mes paramètres, lorsque je fait modifier le membres.
                A+
                1. Bonjour,
                  Je vous envoi ma page si vous pouvez essayer de me résoudre mon problème.
                  Moi j'ai vraiment tou essayer je baisse les bras.
                  Merci très sincérements

                  <?php
                  function dateFRA( $time )
                  {
                  setlocale( LC_TIME, "fr" );
                  return strftime( "%d/%m/%Y" , strtotime( $time ) );
                  }
                  session_start();
                  header('Content-Type: text/html; charset=ISO-8859-1');
                  if( isset( $_SESSION['user_id'] ) && isset( $_SESSION['user_name'] ) )
                  {
                  require_once('../conf/config.php5');
                  require_once('../lib/dbConnection.php5');
                  require_once('../lib/membres.class.php5');
                  if( isset( $_GET['do'] ) )
                  {
                  $do = $_GET['do'];
                  switch( true )
                  {
                  case( $do === 'delete' ):
                  if( isset( $_GET['user_id'] ) && isset( $_GET['user_name'] ) )
                  {
                  $id = (int) $_GET['user_id'];
                  $name = urldecode( $_GET['user_name'] );
                  ?>
                  <form method="post" action="index.php5?cat=sorties&page=membres">
                  <fieldset>
                  <legend>Supprimer un membre</legend>
                  <p>
                  <input type="hidden" name="do" value="delete" />
                  <input type="hidden" name="id" value="<?php echo( $id ); ?>" />
                  </p>
                  <p>Le membre suivant va être supprimé définitivement :</p>
                  <p><?php echo( $name ); ?></p>
                  <p>Souhaitez-vous continuer ?</p>
                  <p>
                  <input type="submit" value="Oui" />
                  <input type="button" onclick="displayBox('requests/membres.php5?do=add', 'box'); return false" value="Non" />
                  </p>
                  </fieldset>
                  </form>
                  <?php
                  }
                  else
                  {
                  echo( '<p class="error">L\'identifiant n\'est pas déterminée.</p>' );
                  }
                  break;

                  case( $do === 'edit' ):
                  if( isset( $_GET['user_id'] ) )
                  {
                  $id = (int) $_GET['user_id'];
                  $user = Membres::getOne( $id , true );
                  ?>
                  <form action="index.php5?cat=sorties&page=membres" method="post" >
                  <fieldset>
                  <legend>Modifier un membre</legend>
                  <p>
                  <input type="hidden" name="do" value="update" />
                  <input type="hidden" name="id" value="<?php echo( $id ); ?>" />
                  </p>
                  <p>
                  <label for="add-nom">Nom :</label>
                  <input type="text" name="nom" id="add-nom" value="<?php echo( $user->user_name ); ?>" />
                  </p>
                  <p>
                  <label for="add-adress">Adresse :</label>
                  <textarea id="add-adress" name="adress"><?php echo( stripslashes( $user->user_adress ) ); ?></textarea>
                  </p>
                  <p>
                  <label for="add-tel1">Téléphone 1 :</label>
                  <input type="text" name="tel1" id="add-tel1" value="<?php echo( $user->user_tel1 ); ?>" />
                  </p>
                  <p>
                  <label for="add-tel2">Téléphone 2 :</label>
                  <input type="text" name="tel2" id="add-tel2" value="<?php echo( $user->user_tel2 ); ?>" />
                  </p>
                  <p>
                  <label for="add-mail">Courriel :</label>
                  <input type="text" name="mail" id="add-mail" value="<?php echo( $user->user_mail ); ?>" />
                  </p>
                  <p>
                  <label for="add-pupitres">Pupitre :</label>

                  <?php
                  //menu déroulant pour le type de pupitres
                  $sql="show columns from users like 'user_pupitres'";
                  $result = DbConnection::select( $sql );
                  if( DbConnection::hasError() )
                  {
                  $error = DbConnection::getError();
                  }
                  if( $result )
                  {
                  $type=mysql_result($result,0,'Type');
                  $type=substr($type,5,strlen($type)-5-2);
                  $resp=split("','",$type);
                  echo "<select name='pupitres' id='add-pupitres'>";
                  echo "<option value='-1'>--liste pupitres--</option>";
                  foreach( $resp as $row )
                  {
                  echo "<option value=$row>$row</option>";
                  }
                  echo "</select>";
                  }
                  ?>
                  </p>
                  <p>
                  <label for="add-membres">Membre :</label>

                  <?php
                  //menu déroulant pour le type de membres
                  $sql="show columns from users like 'user_membres'";
                  $result = DbConnection::select( $sql );
                  if( DbConnection::hasError() )
                  {
                  $error = DbConnection::getError();
                  }
                  if( $result )
                  {
                  $type=mysql_result($result,0,'Type');
                  $type=substr($type,5,strlen($type)-5-2);
                  $resp=split("','",$type);
                  echo "<select name='membres' id='add-membres'>";
                  echo "<option value='-1'>--liste membres--</option>";
                  foreach( $resp as $row )
                  {
                  echo "<option value=$row>$row</option>";
                  }
                  echo "</select>";
                  }
                  ?>
                  </p>
                  <p>
                  <label for="add-admission">Admission :</label>
                  <input onclick="ds_sh(this);" type="text" name="admission" id="add-admission" value="<?php echo( dateFRA( $user->user_admission ) ); ?>" />
                  </p>
                  <p>
                  <label for="add-demission">Démission :</label>
                  <input onclick="ds_sh(this);" type="text" name="demission" id="add-demission" value="<?php echo( dateFRA( $user->user_demission ) ); ?>" />
                  </p>
                  <p>
                  <label for="add-naissance">Né(e) le :</label>
                  <input onclick="ds_sh(this);" type="text" name="naissance" id="add-naissance" value="<?php echo( dateFRA( $user->user_naissance ) ); ?>" />
                  </p>
                  <p>
                  <label for="add-bureau">Bureau :</label>

                  <?php
                  $sql="show columns from users like 'user_bureau'";
                  $result = DbConnection::select( $sql );
                  if( DbConnection::hasError() )
                  {
                  $error = DbConnection::getError();
                  }
                  if( $result )
                  {
                  $type=mysql_result($result,0,'Type');
                  $type=substr($type,5,strlen($type)-5-2);
                  $resp=split("','",$type);
                  echo "<select name='bureau' id='add-bureau'>";
                  echo "<option value='-1'>--liste du bureau--</option>";
                  foreach( $resp as $row )
                  {
                  echo "<option value=$row>$row</option>";
                  }
                  echo "</select>";
                  }
                  ?>
                  </p>
                  <p>
                  <label for="add-responsable">Responsable :</label>

                  <?php
                  //Menu déroulant pour la liste des responsabilités
                  $sql="show columns from users like 'user_responsable'";
                  $result = DbConnection::select( $sql );

                  if( DbConnection::hasError() )
                  {
                  $error = DbConnection::getError();
                  }
                  if( $result )
                  {
                  $type=mysql_result($result,0,'Type');
                  $type=substr($type,5,strlen($type)-5-2);
                  $resp=split("','",$type);

                  echo "<select multiple name='responsable' id='add-responsable'>";
                  echo "<option value='-1'>--liste des responsabilites--</option>";
                  foreach( $resp as $row )
                  {
                  echo "<option value=$row>$row</option>";
                  }
                  echo "</select>";
                  }
                  ?>
                  </p>
                  <p>
                  <input type="button" onclick="displayBox('requests/membres.php5?do=add', 'box'); return false" value="Annuler" />
                  <input type="reset" value="Effacer" />
                  <input type="submit" value="Modifier" />
                  </p>
                  </fieldset>
                  </form>
                  <?php
                  }
                  else
                  {
                  echo( '<p class="error">L\'identifiant n\'est pas déterminée.</p>' );
                  }
                  break;

                  /*case( $do==='populate'):
                  echo "\t\t\t".'<label for="add-user">Membre</label>'."\n";
                  echo "\t\t\t".'<select id="add-user" name="add-user">'."\n";
                  if( isset( $_GET['id'] ) )
                  {
                  $users = DbConnection::select( "SELECT `users`.`user_id`, `users`.`user_name` FROM `users` WHERE `users`.`user_id` NOT IN ( SELECT `reply`.`user_id` FROM `reply` WHERE `reply`.`question_id` = '".$_GET['id']."' ) AND `users`.`user_id` <> 0 ORDER BY `users`.`user_name` ASC" );
                  if( mysql_num_rows( $users ) > 0 )
                  {
                  while( $row = mysql_fetch_object( $users ) )
                  {
                  echo "\t\t\t\t".'<option value="'.$row->user_id.'">'.$row->user_name.'</option>'."\n";
                  }
                  }
                  else
                  {
                  echo "\t\t\t\t".'<option><aucune valeur à afficher></option>'."\n";
                  }
                  }
                  else
                  {
                  echo "\t\t\t\t".'<option><aucune valeur à afficher></option>'."\n";
                  }

                  echo "\t\t\t".'</select>'."\n";
                  break;*/

                  default:
                  echo Membres::displayAddingBox();
                  }
                  }
                  else
                  {
                  echo( '<p class="error">L\'action n\'est pas déterminée.</p>' );
                  }
                  }
                  else
                  {
                  echo( '<p class="error">Opération interdite.</p>' );
                  }
                  ?>
                  1. Je vois pas très bien ce qui ne va pas dans ton code, tu as des erreurs à l'exécution ? Et/Ou tout simplement le formulaire ne retient pas la selection de la liste deroulante ?
                2. Bonjour,

                  Tu peux aussi mettre un champ hidden dans ton form,
                  et avant d'afficher a nouveau ton formulaire tu fais:

                  $default = "--liste du bureau--";

                  if(isset($_POST['le nom de ton champ hidden']))
                  $default = $_POST['le nom de ton champ hidden'];

                  echo "<option value='-1'>".$default."</option>";

                  :)

                  ++
                  1. Bonjour

                    Un grand merci à toi [o.o]REplay pour ta réponse très concluante, c'est super ça marche nickel, mille merci. Et merci aussi à Alkaaran.
                    Je peux me permettre STP de te demander encore une petite chose ?
                    J'ai donc fini mon site pour mon association et il me reste le formulaire de contact à intégrer au site, avant de pouvoir le mettre en ligne.
                    J'en ai fait un avec un logiciel "créaform"que j'ai arrangé suivant mes besoins mais je sais pas comment l'intégrer à mon site, si toute fois tu peux encore m'aider?
                    Ca m'a créé 3 fichiers "envoi.php5" "mimemail.php5" "formulaire.js" je sais pas quoi en faire je voudrais mettre ce formulaire dans ma page contacts.
                    Merci pour ta disponibilité.
                  2. @marygilAucune idée, jamais touché

                    Daprés moi envoie.php5 utilise les autres pages.
                    Essai de n'afficher que ce fichier pour voir ce que ca fait.
                    un include ou require d'une de ces pages devrai suffire, sinon lis l'aide de creaform, ca te sera surement plus util que moi :)

                    Bonne soirée.
                  3. @[o.o]REplayBonjour et merci,

                    Juste un petit blème concernant mon formulaire.
                    En fait j'avais fait un test avec les données de ton message mais sur le coup j'ai pas fait attention.
                    A savoir: comme m'a liste déroulante commence par "président" en faisant le test j'ai dit c'est bon ça marche mais en fait ça n'affiche que le premier mot de la liste et non celui que j'ai sélectionné. (c'est déjà un grand pas)
                    C'est "ballot" autant pour moi, si toute fois tu peux m'aider pour finir ce bazard ?
                    Merci beaucoup
                  4. @marygilJe n'ai pas compris.

                    En fait il ne faut rien changer à ton code précédent, juste les trois lignes que je t'ai donné, tu les rajoutes juste avant ton formulaire: Pr le premier choix du formulaire, si il ya une variable post, tu la met en choix séléctionné, sinon tu met la valeur par défaut, le rèste du formulaire est identique.
                  5. @[o.o]REplayBonjour,

                    Je te remercie de ta réponse, mais malheureusement je n'arrive pas à y faire fonctionner comme il le faudrait.

                    Ma liste déroulante ça donne ça:
                    --liste du bureau--
                    Président
                    vice-président
                    secrétaire
                    secrétaire-adjoint
                    trésorier
                    trésorier-adjoint

                    mon formulaire ça donne ça:

                    <label for="add-bureau">Bureau :</label>

                    <?php
                    $sql="show columns from users like 'user_bureau'";
                    $result = DbConnection::select( $sql );
                    if( DbConnection::hasError() )
                    {
                    $error = DbConnection::getError();
                    }
                    if( $result )
                    {
                    $type=mysql_result($result,0,'Type');
                    $type=substr($type,5,strlen($type)-5-2);
                    $resp=split("','",$type);
                    echo "<select name='bureau' id='add-bureau'>";
                    echo "<option value='-1'>--liste du bureau--</option>";
                    foreach( $resp as $row )
                    {
                    echo "<option value=$row>$row</option>";
                    }
                    echo "</select>";
                    }
                    ?>

                    Et quand je sélectionne par exemple "secrétaire" il faut que ça reste par défaut tant que je lui est pas donné une autre valeur.
                    Merci très sincéremnts si tu peux encore jeter un oeil...
                3. Plusieures options s'offrent à toi, mais elles convergent toutes vers le même point : il faut enregistrer quelque part la valeur de ton select pour la recuperer plus tard... Pour cela :

                  - Si tu veux que la valeur du select ne soit affectées qu'en fonction de l'utilisateur : utilise un cookie ou une variable de session
                  - Sinon tu peux l'enregistrer dans la base de données ou dans un fichier externe
                  - Et enfin tu peux la passer en paramètres avec ton formulaire...

                  Ces solutions sont classées par ordre de simplicité, je trouve la technique de la variable de session la plus simple à mettre en place
                  • 1
                  • 2