Page 1 sur 2

Récupérer données dans un menu dérroulant

Posté : 10 mai 2008, 13:24
par piotrowski-s
Bonjour, je créé un formulaire, or j'ai besoins de sélectionner un nom à partir d'une liste, donc je créé ma requête, de ce côté la tout est ok.
Mais après, dans le menu déroullant, je met ça:

Code : Tout sélectionner

<select name="nom" size="1"> <option>$data['nom']</option> </select>
Mais là, ça fonctionne pas.
Ps: j'ai commencé à essayer d'utiliser php mysql hier à 23h30...

Posté : 10 mai 2008, 13:33
par orgerix
Peux tu nous donner exactement le code que tu as entré ?

Et le résultat (ou le message d'erreur) pourrait être utile.

Posté : 10 mai 2008, 13:36
par piotrowski-s

Code : Tout sélectionner

<? $sql = 'SELECT nom FROM clients'; // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die) $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // on récupère le résultat sous forme d'un tableau $data = mysql_fetch_array($req); // on libère l'espace mémoire alloué pour cette interrogation de la base mysql_free_result ($req); ?>
et le résultat est:
$data['nom']
dans le menu déroullant, sans les valeurs de la base de données...

Posté : 10 mai 2008, 14:01
par d0m
Salut,

le premier problème est de cibler ton problème.

Quand tu dis
ça ne fonctionne pas
, que veux tu dire exactement par là?

ta liste n'est pas affichée?
il y a une liste mais rien dedans?
il y a une liste avec écrit data['nom'] et non la valeur de la variable data['nom']?

décris nous précisemment ce que tu voudrais qu'il y ai et ce qu'il y a pour l'instant.

Posté : 10 mai 2008, 14:24
par orgerix
Bon, déjà, tu utilise mysql_fetch_array(), qui renvoie un tableau indexé numériquement. Mieux vaut utiliser mysql_fetch_assoc() qui renvoit un tableau doulement indexé, numériquement et associativement (avec les noms des colonnes)

Ensuite, je pense que l'erreur est due au fait que tu écrit la variable sans mettre les balise PHP. En effet, dans ce cas, elle n'est pas traité et donc elle ne sera remplacé par sa valeur.

Dans un premier temps, ceci renvera un resultat correspondant plus à ce que tu veux.
<? 
$sql = 'SELECT nom FROM clients'; 

  
      // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die) 
      $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
  
      // on récupère le résultat sous forme d'un tableau 
      $data = mysql_fetch_assoc($req); 
  
      // on libère l'espace mémoire alloué pour cette interrogation de la base 
      mysql_free_result ($req); ?>
...
<select name="nom" size="1"> 
                                        <option><?php echo $data['nom'] ;?></option> 
                                        </select>
Cependant, dans ton select, tu n'aura qu'un choix, même si tu dispose de plusieurs clients. mysql_fetch_assoc() ou mysql_fetch_array() ne renvoie qu'un seul enregistrement. Il faudrait que tu fasses une boucle de ce type

Tant que j'arrive à avoir un enregistrement
afficher option du select
Fin tant que

Posté : 10 mai 2008, 14:24
par piotrowski-s
oui, c'est ça, la liste est affiché avec pour unique valeur $data['nom'] et non celle de la bdd...

Posté : 10 mai 2008, 14:34
par d0m
ok alors il faut que tu comprennes la différence entre le PHP et le code HTML.

en gros le code PHP est interpreté par le serveur, les variables sont calculés etc... et le remplacement se fait dans la page.

Il faut donc avant tout que tu comprennes cette différence entre le PHP et le html pour identifier ce que tu dois mettre entre les balises de code PHP et l'affichage en html.

Par exemple ta liste est du code html :

Code : Tout sélectionner

<select name="nom" size="1"> <option>....</option> </select>
ce qu'il ya entre les balises <options></options> doit être une chaine de caractère fixe.
c'est là qu'intervient le PHP. Il calcule dynamiquement (ici en allant chercher dans ta base de données) la valeur à mettre entre les balises option. il faut donc afficher mettre comme l'a dit orgerix le contenu de la variable php entre les balises.

Posté : 10 mai 2008, 14:49
par piotrowski-s
j'ai essayé ça <select name="nom" size="1">
<option><?php echo $data['nom']; ?></option>
</select>
mais là c'est vide, je veut dire le menu déroullanet n'affiche pas les options .
Voici le code que j'utilis epour la requête:
<?
$sql = 'SELECT nom FROM clients';

 
      // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die) 
      $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
 
      // on récupère le résultat sous forme d'un tableau 
      $data = mysql_fetch_array($req); 
 
      // on libère l'espace mémoire alloué pour cette interrogation de la base 
      mysql_free_result ($req); ?>
Merci de votre aide par avance..

Posté : 10 mai 2008, 15:19
par orgerix
Reli ce que je t'ai dis :wink:
Bon, déjà, tu utilise mysql_fetch_array(), qui renvoie un tableau indexé numériquement. Mieux vaut utiliser mysql_fetch_assoc() qui renvoit un tableau doulement indexé, numériquement et associativement (avec les noms des colonnes)
EDIT : préfère les balises PHP aux balises code. Comme ca, on peut profiter de la coloration syntaxique

Posté : 10 mai 2008, 15:29
par piotrowski-s
je n'ai pas reussi, je précise que je me suis mis au php hier soir a 23h30, donc un coup de main serait le bienvenu, d'avance merci...

Posté : 10 mai 2008, 15:44
par d0m
Si tu viens de te mettre au php il faut proceder étape par étape.

Déjà en comprenant ce que tu fais et ce que tu utilises.

La première chose que tu fais c'est aller chercher en base le noms des clients.

tu fais ceci avec une requête :
<?php 
$sql = 'SELECT nom FROM clients';  

// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)  
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
Ca c'est ok.

Ensuite dis toi que la variable $req contient plusieurs lignes, chaque ligne étant un enregistrement de la table clients contenant le nom.

Il n'y a pas de fonction toute prête en php qui va mettre dans un tableau TOUTES tes lignes du résultat de la requête. La fonction mysql_fetch_assoc va mettre dans un tableau UNE SEULE ligne du résultat la première. Si tu le réutilises sur ce résultat, tu auras la deuxième ligne, puis la troisème etc...
Il va donc falloir boucler avec cette fonction pour extraire toutes les lignes :
$data = array();
while($ligne =  mysql_fetch_assoc($req);{
  //on range dans le tableau la ligne résultat en cours
  $data[] = $ligne;
}

//on affiche le tableau pour voir à quoi il ressemble
printr($data);
...

ensuite tu pourras boucler sur ce tableau et en extraire les noms pour les afficher dans la liste déroulante.

Posté : 10 mai 2008, 15:57
par piotrowski-s
j'ai trouvé ce code, qu'en pensez-vous ?
<SELECT NAME="menu">
            <?
            $SQL = "SELECT nom FROM clients" ;
            $result = mysql_query($SQL) or die('Erreur SQL : '.mysql_error());
            while ($val = mysql_fetch_array($result)){
               echo "<OPTION VALUE='".$val["menuid"]."'>".$val["menuitem"]."</option>";
            }
            ?> 

Posté : 10 mai 2008, 17:19
par d0m
ça ne fonctione pas
est à bannir de ton vocabulaire.
donne nous ton code à cet étape et dis nous ce qui ne vas pas.

ton tableau $data est il affiché avec la ligne
printr($data); 
?

Posté : 10 mai 2008, 17:22
par piotrowski-s
j'ai abandonné, le code précédent, car trop complexe pour un débutant, ppouvez- vous m'indiquer s'il vous plaît comment faire pour utiliser ce code, variavle à remplir, etc...
D'avance merci.
<SELECT NAME="menu">
            <?
            $SQL = "SELECT nom FROM clients" ;
            $result = mysql_query($SQL) or die('Erreur SQL : '.mysql_error());
            while ($val = mysql_fetch_array($result)){
               echo "<OPTION VALUE='".$val["menuid"]."'>".$val["menuitem"]."</option>";
            }
            ?> 

Posté : 10 mai 2008, 17:24
par d0m
je pense que ce que tu devrais faire c'est aller voir le manuel PHP pour cette fonction mysql_fetch_array.
Il y a des exemples simples pour comprendre son fonctionnement.