Liste déroulante mysql (affichage + insertion)

Utilisateur anonyme - 15 mars 2012 à 19:05
pmcoste Messages postés 72 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 25 juillet 2013 - 18 mars 2012 à 14:11
Bonjour,

Je suis entrain de développer un petit site web et j'ai un souci pour des formulaires en lien avec une bdd.

Ci-joint mon code :

<?php
    mysql_connect("127.0.0.1", "root", "" );
    mysql_select_db("pronos" );
    ?>
    Panneau de modification Bonus,

----

N°,
Bonus,
Choix
               
    <?php
    $req1 =  mysql_query("SELECT resbonus.numb,desbonus,bonusj FROM joueurs, resbonus, bonus WHERE resbonus.numb=bonus.numb AND resbonus.numj=joueurs.numj AND prenom='$login'" );                             
    $reqliste = mysql_query("SELECT equipes FROM liste" );     
    ?>
    <form method="post" action="updatepronosb.php">
    <?php       
    for ($i = 1 ; $i <=6 ; $i++)
    {
    $donnees = mysql_fetch_assoc($req1);
   
    ?>       
    " value="<?php echo $donnees['numb']; ?>">,
<?php echo $donnees['desbonus']; ?>,
<select name="<?php echo "dembonusj".$i; ?>"><?php while($liste = mysql_fetch_array($reqliste)) { echo "<option>".$liste['equipes']."</option>\n";} ?></select>
             
    <?php
    }
    ?>
    

    

</form>
    <?php     
    mysql_close();
    ?>



Mon problème concerne la ligne suivante :


<td border="2" style="width:160px;" align="center"> <select name="<?php echo "dembonusj".$i; ?>"><?php while($liste = mysql_fetch_array($reqliste)) { echo "<option>".$liste['equipes']."</option>\n";} ?></select> </td>



J'essaie de faire une liste déroulante en fonction d'une bdd, et le résultat de la liste doit être récupéré avec un POST sur une autre page. En l'état, pour $i =1 j'ai bien la liste déroulante ! Toutes les autres sont vides... Et bien sûr, le post n'est pas récupéré....

Merci de votre aide car je sèche....

8 réponses

Utilisateur anonyme
16 mars 2012 à 08:44
Pour info, ce code sans liste déroulante fonctionne sans aucun souci.

 <?php
     
            $req1 = mysql_query("SELECT resbonus.numb,desbonus,bonusj FROM joueurs, resbonus, bonus WHERE resbonus.numb=bonus.numb AND resbonus.numj=joueurs.numj AND prenom='$login'");                               
     
            ?>
     
            <form method="post" action="updatepronosb.php">
     
            <?php        
     
            for ($i = 1 ; $i <=6 ; $i++)
     
            {
     
            $donnees = mysql_fetch_assoc($req1);
     
              ?>         
     
              " value="<?php echo $donnees['numb']; ?>">,

<?php echo $donnees['desbonus']; ?>,

" value="<?php echo $donnees['bonusj']; ?>">
               
     
              <?php
     
             
     
            }
     
            ?>
     
            

     
            

</form>
     
            <?php      
     
            mysql_close();
     
            ?>


Etant donné que je vais comparer les chaines de caractères, je préférais mettre en place une liste de sélection au niveau de dembonusj.$i pour éviter les fautes de frappes, etc....
0
pmcoste Messages postés 72 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 25 juillet 2013 1
16 mars 2012 à 12:55
Bonjour,

Ta 1ère requete est effectuée une première fois.
Les équipes sont bien récupérées une fois. Mais si tu rappelles une autre fois cette requete "équipe", la liste est vide puisque tu l'as déjà exécutée.
La solution est de stocker dans un tableau :


<?php
 mysql_connect("127.0.0.1", "root", "" );
 mysql_select_db("pronos" );
 ?>
 Panneau de modification Bonus,

----

N°,
Bonus,
Choix
               
 <?php
 $req1 = mysql_query("SELECT resbonus.numb,desbonus,bonusj FROM joueurs, resbonus, bonus WHERE resbonus.numb=bonus.numb AND resbonus.numj=joueurs.numj AND prenom='$login'" );                             
 $reqliste = mysql_query("SELECT equipes FROM liste" );
 //je stocke cette requête dans un tableau   
   $equipe=array();
   while($liste = mysql_fetch_array($reqliste))
   { 
      $equipe[]=$liste['equipes'];
   }
 ?>
 <form method="post" action="updatepronosb.php">
 <?php       
 for ($i = 1 ; $i <=6 ; $i++)
 {
 $donnees = mysql_fetch_assoc($req1);

 ?>       
 " value="<?php echo $donnees['numb']; ?>">,
<?php echo $donnees['desbonus']; ?>,
<select name="<?php echo "dembonusj".$i; ?>">
<?php foreach($equipe as $val) {
echo "<option>".$val."</option>\n";
} ?></select>
             
 <?php
 }
 ?>
 

 

</form>
 <?php     
 mysql_close();
 ?>




---------------------
Oderint dum metuant
0
Utilisateur anonyme
16 mars 2012 à 14:15
Merci pour ce code, je vais tester tout ça ce soir !
0
Utilisateur anonyme
16 mars 2012 à 18:13
Merci beaucoup ! ça fonctionne parfaitement ! Y'a juste un petit souci...
En faite, le joueur peut sélectionner dans la liste et envoyer la données !
Par contre, cette page permet aussi de les re-modifier, dans mon code initial avec le formulaire text j'avais ça :
value="<?php echo $donnees['bonusj']; ?>

Ce qui permettait àa la personne de voir son dernier prono ! Or avec la liste déroulante, il affiche le 1er de la liste.
Je sais pas si c'est possible ? A la place du $val ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pmcoste Messages postés 72 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 25 juillet 2013 1
17 mars 2012 à 09:05
Si, il suffit de tester pour chaque <option>, si sa valeur est égale à la valeur saisie par l'utilisateur :

 <?php foreach($equipe as $val) {
      echo '<option value="', $val;
      if ($val == $_POST['dembonusj'.$i]) {
          echo '>', $val, '</option>', "\n";
      }
} ?>


---------------------
Oderint dum metuant
0
pmcoste Messages postés 72 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 25 juillet 2013 1
17 mars 2012 à 09:06
Désolé, j'ai oublié la moitié du code :

<?php foreach($equipe as $val) {
      echo '<option value="', $val;
      if ($val == $_POST['dembonusj'.$i]) {
          echo ' selected="selected"';
      }
      echo '>', $val, '</option>', "\n";
} ?>


---------------------
Oderint dum metuant
0
Utilisateur anonyme
17 mars 2012 à 11:24
Merci pour ce code, par contre, ça déconne complètement du coup !

Je remets la partie :

<td border="2" style="width:160px;" align="center"><select name="<?php echo "dembonusj".$i; ?>">
 <?php foreach($equipe as $val) {
echo '<option value="', $val;
if ($val == $_POST['dembonusj'.$i]) {
echo ' selected="selected"';
}
echo '>', $val, '</option>', "\n";
} ?></select></td>


En faite, maintenant, j'ai seulement 2 propositions dans la liste et quand j'envoi dans la bdd, ça donne ça :
PAYS-BAS>PAYS-BAS</o


Et quand j'envoi les 2 proposition, il envoi pas la même chose dans la bdd !
0
pmcoste Messages postés 72 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 25 juillet 2013 1
18 mars 2012 à 14:11
En fait, chaque <option> doit comporter une valeur <option value=""> et du texte.
<option value="....">texte</option>

A toi de tester maintenant lors de l'envoi du formulaire si la valeur envoyée est égale au champ que tu veux afficher.


---------------------
Oderint dum metuant
0
Rejoignez-nous