Liste déroulante

Résolu
marygil Messages postés 141 Statut Membre -  
marygil Messages postés 141 Statut Membre -
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

  • 1
  • 2
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.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Alkaaran Messages postés 291 Statut Membre 37
     
    Salut marygil,

    Vers quoi ton formulaire envoie t'il ses données ? Une nouvelle page ? La même ? ... ?
    0
    1. marygil Messages postés 141 Statut Membre
       
      Bonjour et merci pour ta réponse,

      Vers une nouvelle page...
      0
  2. Alkaaran Messages postés 291 Statut Membre 37
     
    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
    0
  3. [o.o]REplay Messages postés 381 Date d'inscription   Statut Membre 28
     
    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>";

    :)

    ++
    0
    1. marygil Messages postés 141 Statut Membre
       
      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é.
      0
    2. [o.o]REplay Messages postés 381 Date d'inscription   Statut Membre 28 > marygil Messages postés 141 Statut Membre
       
      Aucune 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.
      0
    3. marygil Messages postés 141 Statut Membre > [o.o]REplay Messages postés 381 Date d'inscription   Statut Membre
       
      Bonjour 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
      0
    4. [o.o]REplay Messages postés 381 Date d'inscription   Statut Membre 28 > marygil Messages postés 141 Statut Membre
       
      Je 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.
      0
    5. marygil Messages postés 141 Statut Membre > [o.o]REplay Messages postés 381 Date d'inscription   Statut Membre
       
      Bonjour,

      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...
      0
  4. marygil Messages postés 141 Statut Membre
     
    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>' );
    }
    ?>
    0
    1. Alkaaran Messages postés 291 Statut Membre 37
       
      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 ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. marygil Messages postés 141 Statut Membre
     
    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+
    0
  7. Alkaaran Messages postés 291 Statut Membre 37
     
    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 :)
    0
    1. marygil Messages postés 141 Statut Membre
       
      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>";
      }
      ?>
      0
      1. Alkaaran Messages postés 291 Statut Membre 37 > marygil Messages postés 141 Statut Membre
         
        Tu met quoi dans choix_par_défaut ?
        0
      2. marygil Messages postés 141 Statut Membre > Alkaaran Messages postés 291 Statut Membre
         
        je pensais mettre une valeur de la liste ?
        Mais ça sélectionne entièrement la liste ?
        0
  8. marygil Messages postés 141 Statut Membre
     
    Ben en fait j'ai essayé beaucoup de choix mais rien n'y fait.....
    0
  9. Alkaaran Messages postés 291 Statut Membre 37
     
    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 :)
    0
    1. marygil Messages postés 141 Statut Membre
       
      Ben en fait c'est ça je sais pas trop ou l'insérer?

      $_SESSION['temp_selection'] = $_POST['add-bureau'] ;
      0
  10. Alkaaran Messages postés 291 Statut Membre 37
     
    $_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()
    0
    1. marygil Messages postés 141 Statut Membre
       
      J'ai mis comme ceci au sommet de la page ??


      <?php
      $_SESSION['temp_selection'] = $_POST['add-bureau'] ;
      0
  11. Alkaaran Messages postés 291 Statut Membre 37
     
    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 ...
    ?>
    0
    1. marygil Messages postés 141 Statut Membre
       
      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........
      0
  12. Alkaaran Messages postés 291 Statut Membre 37
     
    "Ca marche pas" erreur php ou" ca marche pas" ton formulaire ne retient pas la precedente selection ?
    0
    1. marygil Messages postés 141 Statut Membre
       
      par défaut c'est "liste du bureau" et ça reste la-dessus..............
      0
  13. marygil Messages postés 141 Statut Membre
     
    aucune erreur ça retiens pas la sélection précédente.........
    0
    1. Alkaaran Messages postés 291 Statut Membre 37
       
      Tu enregistre bien au moins une fois une autre valeur que "liste du bureau" ?
      0
  14. marygil Messages postés 141 Statut Membre
     
    oui oui j'ai mis à chaque fois "Secrétaire" et ça reviens "liste du bureau"
    0
  15. Alkaaran Messages postés 291 Statut Membre 37
     
    Oh le con ! Fouette moi ! j'ai confondu id et name :(

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

    :)
    0
    1. marygil Messages postés 141 Statut Membre
       
      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
      0
  16. Alkaaran Messages postés 291 Statut Membre 37
     
    N'aurais-tu pas oublié un point virgule après $_SESSION['temp_selection'] = $_POST['add-bureau'] ?

    :)
    0
    1. marygil Messages postés 141 Statut Membre
       
      J'ai fait un copier/coller
      0
    2. marygil Messages postés 141 Statut Membre
       
      quel con j'ai oublié le ; autant pour moi
      0
    3. marygil Messages postés 141 Statut Membre
       
      C'est vraiment le grand bazard ça reste toujours sur "liste du bureau"
      c'est le kaka..................
      0
  17. marygil Messages postés 141 Statut Membre
     
    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.
    0
  18. Alkaaran Messages postés 291 Statut Membre 37
     
    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
    0
  19. Alkaaran Messages postés 291 Statut Membre 37
     
    Volontiers ! Envoie les par mp
    0
    1. marygil Messages postés 141 Statut Membre
       
      J'ai jamais envoyé de MP alors je suis en train de chercher comment on fait.........
      0
    2. marygil Messages postés 141 Statut Membre
       
      Dis moi juste si tu as tout reçu ??
      0
  20. marygil Messages postés 141 Statut Membre
     
    je te donne déjà l'URL

    http://www.cliquedecruet.org/test5/index.php5
    0
  21. Alkaaran Messages postés 291 Statut Membre 37
     
    Problème résolu par mail...
    0
  • 1
  • 2