Pré remplir un formulaire (Liste déroulante) avec requête sql [Résolu]

Signaler
-
 marc73450 -
Bonjour à tous !

Voici mon problème :/

je cherche à mettre la valeur (enregistré dans ma bdd) dans une liste déroulante de mon formulaire.

Je m'explique :
Je met en place une page pour modifier des informations saisies dans un formulaires.
Je souhaite charger un formulaire déjà remplis pour que l'on puisse apporter les modifications sur certaines fiches.

Voici ma liste déroulante :

<tr>
  <td width= "50%" align="right"><label for="anneeref"> Année de référence :  </label></td>
  <td width ="50%"><select name="anneeref" id="anneeref" >
  <option value="anneer___">...</option>
  <option value="11">2011</option>
  <option value="12">2012</option>
  <option value="13">2013</option>
  <option value="14">2014</option>
  <option value="15">2015</option>
  <option value="16">2016</option>
  </select></td>
</tr>


Elle incrémente 1 colonne dans ma base, que voici :




Je voudrai que quand je charge mon formulaire pré remplis, les valeurs dans les listes déroulante soit aussi choisi.
Mais rien à faire :/

Pouvez-vous si possible m'éclairer un peu la dessus.

ps: Je sais qu'il aurait été plus simple de mettre une table par liste déroulante, mais mon formulaire fait déjà 17 tables et environ 10 à 15 colonnes par table. je ne peux malheureusement pas faire autrement car mes collègues commence déjà à remplis la base :/ Have Fun

je suis à votre disposition pour toutes questions :)

23 réponses


ahhhhhh,
je pense savoir d'où viens le soucis, tu as 2 boucles while, alors qu'une seule suffit :
<?php
mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("bdd_at-prefo"); // Sélection de la base

$reponse = mysql_query("SELECT * FROM info_dela_personne WHERE id_stagiaires='".$id."';"); // Requête SQL
while ($data = mysql_fetch_array($reponse))
{
?>
<td width="100%">
Eléments d'identification de la personne

Nom : ,
" id="nom" />,

----

Prénom : ,
" id="prenom" />,

----

<label for="anneeref">Année de référence : </label>,
<select name="anneeref" id="anneeref" >
<option value="anneer___">...</option>
<?php
for($i=11; $i<17; $i++)
{
if($data[date] == '20'.$i){
echo '<option value="'.$i.'" selected>20'.$i.'</option>';
}else{
echo '<option value="'.$i.'">20'.$i.'</option>';
}
}
?>
</select>

<?php
}
mysql_close();
?>
</td>

d'ailleurs, je viens de m'apercevoir du $data[date], je pense qu'il faut des guillemets : $data["date"]
En vérifiant bien sur que le nom de ta colonne est bien "date"

Dans ce cas là c'est tout simple.
Si tu veux faire, comme pour les années, un "selected", il te faudra 2 requetes :
1 - pour lister "je sais pas quoi"
2 - listing des personnes

un simple parcours de tableau suffira pour afficher les personnes dans une liste déroulante :

<?php
mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("bdd_at-prefo"); // Sélection de la base

$list = mysql_query("SELECT personnes FROM ta_table");//requete pour listing personnes
$reponse = mysql_query("SELECT * FROM ta_table;");//requete pour ton affichage de tableau

echo '<select name="ton_form">';//création du select
echo '<option>...</option>';//première option "..."

while ($data = mysql_fetch_array($reponse))
{
while ($row = mysql_fetch_array($list)) {
if ($row["champ_personne"] == $data["champ_personne"]) //si la personne trouvée est celle de reponse, alors
echo '<option value="'.$row["champ_personne"].'" selected>'.$row["champ_personne"].'</option>';//option avec select
else
echo '<option value="'.$row["champ_personne"].'">'.$row["champ_personne"].'</option>';//option sans select
}
}
echo '</select>';//fin du select
mysql_close();//fermeture base de données
?>
Petite précision je récupère mes infos dans les tables de cette manière :

<?php
mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("bdd_at-prefo"); // Sélection de la base coursphp

$reponse = mysql_query("SELECT * FROM info_dela_personne WHERE id_stagiaires='".$id."';"); // Requête SQL
while ($data = mysql_fetch_array($reponse))
{
?>

...

<?php
}
mysql_close();
?>
Messages postés
130
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
7 juin 2013

<tr>
  <td width= "50%" align="right"><label for="anneeref"> Année de référence :  </label></td>
  <td width ="50%"><select name="anneeref" id="anneeref" >
  <option value="anneer___">...</option>

<?php
mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("bdd_at-prefo"); // Sélection de la base coursphp

$reponse = mysql_query("SELECT * FROM info_dela_personne WHERE id_stagiaires='".$id."';"); // Requête SQL
while ($data = mysql_fetch_assoc($reponse))
{
            for($i=11; $i<17; $i++)
            {
                if($data[date] == '20'.$i){
                    echo '<option value="'.$i.'" selected>20'.$i.'</option>';
                }else{
                    echo '<option value="'.$i.'">20'.$i.'</option>';
                }
            }
}
mysql_close();
?>
  </select></td>
</tr>
Messages postés
130
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
7 juin 2013

tu pourras également adapter la boucle for(){}, avec Date(), pour ne pas batailler tout le temps avec les années
Merci de ta réponse rapide. Je regarde ça et je vous tiens informé.;)
petite question : à quoi correspond => $i=11; $i<17; <=

Et si je comprend bien ça vas me select la bonne date mais les autres date ne sont plus dans la liste ?
Le but est de pouvoir en choisir une autre si il y à un changement.

dsl si ça vous parez logique je débute dans le php, la ça coince un peu. :/
J'ai bien compris votre code et l'utilité du $i

j'ai tenté de mettre en place ce code avec les variables qui vont bien mais la liste reste sur la première valeur
(<option value="anneer___">...</option> )
et les autres choix en dessous n'aparesse plus une petite idée ?

Bonjour,

sylvain vient de te donner une boucle for partant de 11 à 17 avec la variable $i.
Si tu regardes par la suite, tu verras un :
"if($data[date] == '20'.$i){"
=> signifie : si la valeur dans la base de données est égale à 20.$i (donc de 2011 à 2017, d'où le $i de 11 à 17, pour la liste des années) [b]alors
echo '<option value="'.$i.'" selected>20'.$i.'</option>';/b
=> on met en sélection la valeur de la liste déroulante
[b]sinon
echo '<option value="'.$i.'">20'.$i.'</option>';/b
=> on ne met pas en valeur

pour de plus ample informations, je te conseille vivement de faire un tour ici => Lien
Merci pour cette précision nicotontige j'avais fini par le comprendre mais le souci est que la liste reste sur la première valeur
(<option value="anneer___">...</option> )

et pour le site je connaissais, j'en passe quelqu'un au peigne fin depuis quelque mois ^^

Pourrais-ton avoir ton code ?
histoire de voir si une erreur s'est glissée
Voici une partie :


<tr>
<?php
mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("bdd_at-prefo"); // Sélection de la base

$reponse = mysql_query("SELECT * FROM info_dela_personne WHERE id_stagiaires='".$id."';"); // Requête SQL
while ($data = mysql_fetch_array($reponse))
{
?>
<td width="100%">
Eléments d'identification de la personne

Nom : ,
" id="nom" />,

----

Prénom : ,
" id="prenom" />,

----

<label for="anneeref">Année de référence : </label>,
<select name="anneeref" id="anneeref" >
<option value="anneer___">...</option>
<?php
while ($data = mysql_fetch_assoc($reponse))
{
for($i=11; $i<17; $i++)
{
if($data[date] == '20'.$i){
echo '<option value="'.$i.'" selected>20'.$i.'</option>';
}else{
echo '<option value="'.$i.'">20'.$i.'</option>';
}
}
}
?>
</select>

<?php
}
mysql_close();
?>
</td>
</tr>



et quand je regarde le résultat
sur ma page la dans la liste il y a [...] et pas d'autre choix et la valeur rentrée dans ma base et [2011]
Si j'effectue cette modification une série d’erreur apparais :/

----------------------
Notice: Use of undefined constant date - assumed 'date' in C:\wamp\www\BDD test\change.php on line 48
----------------------
Notice: Undefined index: date in C:\wamp\www\BDD test\change.php on line 48
----------------------
Notice: Use of undefined constant date - assumed 'date' in C:\wamp\www\BDD test\change.php on line 48
----------------------
....


j'avais déjà testé mais en vain :/
Yeahhhhh !!!

nicotontige Je te remercie grandement !!! ça fonctionne :p

puis-je me permettre de poser une autre petite question :)


Voila si la liste déroulante n'est pas des années mais par exemple des noms de personne

cette erreur veut dire qu'il ne connait pas la valeur "date".
Est-ce que tu l'as mis entre guillemets comme je l'ai marqué plus haut ?
Est-ce que c'est bien le nom de ta colonne (majuscule, ...) ?
il y a un petit temps de décalage entre nos réponses :)

je n'avais pas fait attention au guillemets :/
Merci beaucoup je regarde ça :)
tu entends quoi par :

echo '<select name="ton_form">';//création du select
name et ton_form

et pour champ_personne c'est le nom de la colonne dans la base ?

name="ton_form" => tu donnes le nom que tu veux à ton select

et champ_personne est bien le nom de la colonne dans la base où se trouve les personnes