Page 1 sur 2

Valeurs de formulaire qui sont des enregistrements SQL

Posté : 13 avr. 2006, 09:50
par DébutantPHP
Bonjour a tous

Voila est-il possible de créer une fenetre déroulante dans un formulaire, où s'afficherait les enregistrements d'un champ SQL.

Mon champ = "noms" et donc je veux que les enregistrements de ce champs (martin, lucas,...) sont extrais pour être visible dans une liste déroulante.
si vous pouvez m'éclairer merci

Posté : 13 avr. 2006, 11:26
par mere-teresa
Commençons par le début : sais-tu faire une requête ? Te connecter à ta base de données depuis PHP ? Faire une requête avec PHP ? Récupérer les résultats de la requête ?

Posté : 13 avr. 2006, 11:44
par DébutantPHP
oui ça, ça va, c'est vraiment l'alimentation de la liste depuis ma données sql que je ne maitrise pas.

Posté : 13 avr. 2006, 11:48
par mere-teresa
Dans ma signature, j'ai mis :Toujours commencer par le HTML qu'on veut obtenir....toujours !
Cela signifie que avec les résultats de ta base de données (que tu sais donc mettre dans des variables PHP) tu veux faire une chaîne de caractères, qui sera du HTML, et qui sera le HTML qui fait une liste déroulante.

Posté : 13 avr. 2006, 12:23
par DébutantPHP
Voila j'ai suivit ton conseil en commençant par l'HTML
ça donne donc
debite => c'est ma variable
bdargent => ma table sql
noms => le champs de la table

Code : Tout sélectionner

<form> //d'autres input <select name="debite"> <? $SQL = "SELECT * FROM bdargent"; $res = mysql_query($SQL); while($val=mysql_fetch_array($res)) { echo "<option value="$val["noms"]">".$val["noms"]."</option>\n"; } ?> </select> </form>
Donc la liste se crèt bien mais reste vide sans aucun choix

Je sais pas si il faut a chaque fois que j'ouvre un scrip php <? ?> , se connecter a la base de données car je l'ouvre déjà plus haut dans le fichier sans la fermer. Donc j'ai essayer aussi en ouvrant et fermant a chaque fois et ça ne marche toujours pas

Posté : 13 avr. 2006, 12:26
par mere-teresa
Bon début !

Vérifie le nom de colonne (noms) de ta table, et as-tu installé PHPMyAdmin ou autre ?
Pour vérifier que ta requête retourne des enregistrements :) que donne :
SELECT * FROM bdargent

Tu n'as pas besoin de te reconnecter à ta bdd, et si tu avais besoin de le faire, tu aurais une erreur de MySQL

Posté : 13 avr. 2006, 12:29
par DébutantPHP
Pour le nom de la colonne (du champs) c'est bel et bien "noms" (et pas "nom") donc le problème vient pas de là

Enssuite je suis chez iFrance et leur administrateur de SQL je le connais pas mais il est pas mal

Posté : 13 avr. 2006, 12:33
par mere-teresa
Et quand tu fais afficher la source, qu'as tu ?

Posté : 13 avr. 2006, 12:43
par DébutantPHP
En faisant SELECT * FROM bdargent j'obtient bien les données

Mais :oops: j'ai pas compris ce que tu dis : "afficher la source", car si c'est dans l'AdminSQL ça marche bien et je voit nettement tous ce que je veux dans mon formulaire

Posté : 13 avr. 2006, 12:48
par mere-teresa
Dans MSIE ou Firefox ou autre.., tu affiches ta page et tu fais afficher la source:)

Posté : 13 avr. 2006, 12:52
par DébutantPHP
J'ai ça (dsl j'avais pas compris ça)

Code : Tout sélectionner

<html> <head> <title></title> </head> <body> <form ACTION="verif.php" METHOD=POST> //d'autres input <select name="debite"> <? $db = mysql_connect('imysql02','i3752636','muyh6uw0ndulboyj'); $SQL = "SELECT * FROM bdargent,noms"; $res = mysql_query($SQL); while($val=mysql_fetch_array($res)) { echo "<option value="$val["noms"]">"$val["noms"]"</option>\n"; } mysql_close(); ?> </select> </form> </body> </html>

Posté : 13 avr. 2006, 12:59
par sadeq
Voila j'ai suivit ton conseil en commençant par ...

Code : Tout sélectionner

<form> //d'autres input <select name="debite"> <? $SQL = "SELECT * FROM bdargent"; $res = mysql_query($SQL); while($val=mysql_fetch_array($res)) { echo "<option value="$val["noms"]">".$val["noms"]."</option>\n"; } ?> </select> </form>
...
Un p'ti problème dans l'echo : les guillemets successifs dans la même chaine PHP sont source d'erreurs, on dit il faut les "échapper" terme barbare qui veut dire les marquer par un \ pour signifier qu'il s'agit d'un caractère fesant partie de la chaine et non un délimiteur.

Correction:
tes chaines affichées sont :
echo "<option value="$val["noms"]">".$val["noms"]."</option>\n";

L'erreur est dans la première chaine en gras, elle contient une succession de guillemets ; la correction donne :
"<option value="$val['noms']">"

Les guillemets internes à échapper sont celles de la clause "value="
par contre l'index nommé du tableau $val peut être délimité par les quotes pour éviter toute ambiguité.

Résultat :
echo "<option value="$val['noms']">".$val["noms"]."</option>\n";
En plus, pour que ce programme fonctionne, il faut nommer la page avec une extension .PHP et il est conseillé de commencer toujours un bloc de code PHP par la signature <?php et non <? tout court pour lever toute ambiguité quant au mappage vers l'interpréteur PHP chargé sur le serveur Web.

Posté : 13 avr. 2006, 13:15
par DébutantPHP
Voila j'ai fait comme tu m'as dit en corrigeant le code suivant echo
En plus j'ai mis ce formulaire seul sur un fichier, l'execution du formulaire n'est pas importante c'est l'affichage le problème

Avec le code suivant la boite de la liste s'affiche avec un format réduit au maximum, lorsque je veux la dérouler il n'y a rien a l'intérieur

Code : Tout sélectionner

<html> <head> <title></title> </head> <body> <form> <select name="debite"> <? $db = mysql_connect('imysql02','i3752636','muyh6uw0ndulboyj'); $SQL = "SELECT * FROM bdargent"; $res = mysql_query($SQL); while($val=mysql_fetch_array($res)) { echo "<option value=\"$val['noms']\">"[/b].$val["noms"].[b]"</option>\n"; } mysql_close(); ?> </select> </form> </body> </html>

Posté : 13 avr. 2006, 13:34
par sadeq
t'as oublié d'ouvrir la base de données avec mysql_select_db("tabase") avant de lancer l'ordre d'exécution de la requête et après la connexion.

Posté : 13 avr. 2006, 14:25
par mere-teresa
Là où tu vois ta liste déroulante vide, peux-tu faire CTRL + U (Voir la source HTML) et nous le coller ici ?

edit : pour sadeq : il a dit qu'il le faisait plus haut dans le fichier...la connexion à la base