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

Mammouth du PHP | 702 Messages

10 mai 2008, 13:24

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...

Mammouth du PHP | 693 Messages

10 mai 2008, 13:33

Peux tu nous donner exactement le code que tu as entré ?

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

Mammouth du PHP | 702 Messages

10 mai 2008, 13:36

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...

d0m
Mammouth du PHP | 1141 Messages

10 mai 2008, 14:01

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.

Mammouth du PHP | 693 Messages

10 mai 2008, 14:24

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
Modifié en dernier par orgerix le 10 mai 2008, 14:24, modifié 2 fois.

Mammouth du PHP | 702 Messages

10 mai 2008, 14:24

oui, c'est ça, la liste est affiché avec pour unique valeur $data['nom'] et non celle de la bdd...

d0m
Mammouth du PHP | 1141 Messages

10 mai 2008, 14:34

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.

Mammouth du PHP | 702 Messages

10 mai 2008, 14:49

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..
Modifié en dernier par piotrowski-s le 10 mai 2008, 15:28, modifié 1 fois.

Mammouth du PHP | 693 Messages

10 mai 2008, 15:19

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

Mammouth du PHP | 702 Messages

10 mai 2008, 15:29

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...

d0m
Mammouth du PHP | 1141 Messages

10 mai 2008, 15:44

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.

Mammouth du PHP | 702 Messages

10 mai 2008, 15:57

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>";
            }
            ?> 
Modifié en dernier par piotrowski-s le 10 mai 2008, 17:20, modifié 1 fois.

d0m
Mammouth du PHP | 1141 Messages

10 mai 2008, 17:19

ç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); 
?

Mammouth du PHP | 702 Messages

10 mai 2008, 17:22

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>";
            }
            ?> 

d0m
Mammouth du PHP | 1141 Messages

10 mai 2008, 17:24

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.