Page 1 sur 1

liste deroulante

Posté : 23 sept. 2005, 09:51
par xavier100
bonjour,

j'ai cherche su le forum mais j ai pas trouvé chaussure à mon pied....

A partir de ma base, je crée une liste deroulante qui affiche toutes les salles de ma base, voir code suivant:

Code : Tout sélectionner

<form method="post" action="reservation.php"> <?php // liste deroulante "nom de la salle" echo '<select name="nom_salle">'; // on se connecte à MySQL $db = mysql_connect('localhost', 'root', '') OR DIE (mysql_error()); // on sélectionne la base mysql_select_db('test',$db); // la requete $requete=mysql_query("SELECT nom_salle FROM liste_salle WHERE active='1'"); echo mysql_error(); $nblignes = mysql_numrows($requete); for ($i=0;$i<$nblignes;$i++) { $nom_salle = mysql_result($requete,$i,"nom_salle"); echo "<option value=$nom_salle>$nom_salle</option>"; } echo '</select>'; mysql_close(); ?> <input type="submit" name="Submit" value="Afficher la salle"> </form>

Mon probleme est que je voudrais afficher le nom de toutes mes salles dans la liste deroulante et puis une fois cliquer sur le "submit" alors j'enverrai non pas le nom de ma salle mais l'id qui lui correspond dans ma base.Si quelqu'un a une idée....

Cordialement,
xavier

Posté : 23 sept. 2005, 10:00
par heddicmi
Je vais pas de donner la réponse, mais juste te guider...

Tout d'abord, dans une liste déroulante, tu as pu remarquer que tu remplissais 2 endroits de la balise <OPTION> (là où tu as mis tes 2 $nom_salles)... L'un des 2 correspond à la valeur qui est envoyé par le formulaire, le second et celui qui s'affiche à l'écran.

De plus, tu peux élargir ta requête, tu n'es pas obligé de faire SELECT nom_salle FROM ..., tu peux récupérer un autre champ, comme l'id.

Enfin juste, ton code à un soucis... Tu as écrits mysql_numrows(), alors que c'est mysql_num_rows()...
Il faudrait aussi que tu te penches sur les boucles while histoire d'optimiser un peu...

Posté : 23 sept. 2005, 10:09
par xavier100
ca fait un moment que je fais du php, mais la je tourne en rond...j'ai fais ma boucle avec un while, voir code :

Code : Tout sélectionner

<form method="post" action="reservation.php"> <?php // liste deroulante "nom de la salle" echo "<select name='select1'>"; // on se connecte à MySQL $db = mysql_connect('localhost', 'root', '') OR DIE (mysql_error()); // on sélectionne la base mysql_select_db('test',$db); // la requete $requete=mysql_query("SELECT id,nom_salle FROM liste_salle WHERE active='1'"); while ($val=mysql_fetch_array($requete)) { echo "<option value='$val[0]'>$val[1]</option>"; } echo "</select>"; ?> <input type="submit" name="Submit" value="Afficher la salle"> </form>
mais l'id n'est pas passé apparemment....

Posté : 23 sept. 2005, 10:18
par heddicmi
Bin regarde dans le source de ta page générée pour voir si tu obtiens un truc du genre :
<OPTION value=1>salle 1</option>

Posté : 23 sept. 2005, 10:36
par xavier100
j'ai bien : <OPTION value=1>salle 1</option> d'ialleurs, j'avais fais une erreur dans le Value=$val[0] en mettant des cotes.

le souci vient du POST....aucune valeur n'est passée dans :

Code : Tout sélectionner

$_POST[$val[0]]

Posté : 23 sept. 2005, 10:43
par heddicmi
Et c'est totu à fait normal... La variable qui est transmises portera le nom de ta liste déroulante...

Posté : 23 sept. 2005, 10:59
par xavier100
je viens de m'en rendre compte....j'avais mis

Code : Tout sélectionner

echo "<select name='select1'>";
quel cretin je suis!!

En résumé.....
OBJECTIF :

On va crée une liste déroulante comportant toutes les salles actives. Quand on cliquera sur notra salle, ce n'est pas le nom de la salle qui sera envoyé par méthode POST mais plutot son "id".

Hypothèse :
Dans votre table "liste_salle", vous avez 3 champs dont l'id est unique dans chaque ligne.
Exemple :

Id salle_nom active
1 salle1 1
2 salle2 0
3 salle3 1

Le champs "active" permet de liste que les salles ouverte (=1), si "active=0" alors la salle est dite "fermée".


CODE :

Code : Tout sélectionner

<form method="post" action="reservation.php"> <?php // liste deroulante "nom de la salle" echo "<select name='id'>"; // on se connecte à MySQL $db = mysql_connect('localhost', 'root', '') OR DIE (mysql_error()); // on sélectionne la base mysql_select_db('test',$db); // la requete $requete=mysql_query("SELECT id,nom_salle FROM liste_salle WHERE active='1'"); while ($val=mysql_fetch_array($requete)) { echo "<option value=$val[0]>$val[1]</option>"; } echo "</select>"; // la valeur recupere apres le post est if (isset($_POST['id'])) { $id=$_POST['id'];} ?> <input type="submit" name="Submit" value="Afficher la salle"> </form>
Là où il faut faire attention , c'est le nom du "select", en effet, la valeur passée aura pour nom "id" et pas $val[0]!!

En esperant que laisser la solution aidera un jour quelqu'un ...
Cordialement,
Xavier

Posté : 23 sept. 2005, 11:03
par heddicmi
Ca peux toujours servir... N'oublies pas le tag [Résolu] ;)