Menu déroulant dynamique, prise en compte des espaces !

Petit nouveau ! | 2 Messages

02 mai 2007, 13:16

Bonjour à tous,

Pour mon premier message sur ce forum, je vais tenter d'être le plus clair possible. Mais avant tout, merci pour toutes ces ressources et tutoriaux, c'est un plaisir de s'initier dans de telles conditions.

Je précise que j'ai lu les topics d'en-tête mais cela ne m'a pas aidé à solutionner mon problème. Je suis donc débutant, et voici mon souci.

J'ai un formulaire html qui me permet d'enregistrer plusieurs variables sous diverses formes (bouton, textarea, menu déroulant...). Mes menus déroulants sont alimentés dynamiquement, par des tables, grâce au code suivant, et cela fonctionne sans problème.
$req = 'SELECT valeur FROM table';
$res=mysql_query($req);
while ($val=mysql_fetch_array($res))
{
echo '<option value = '.$val[val].'>'.$val[val].'</option>';
}
(je ne sais pas si c'est le code idéal, mais il fonctionne !! )

Lorsque l'une des valeurs du menu déroulant est séparée par un ou plusieurs espaces, elle s'affiche parfaitement dans le menu déroulant, mais lorsqu'elle est validée, la variable retenue stoppe juste avant le premier espace.

J'ai retenu le conseil donné dans un des sujets d'en-tête et j'ai placé un echo $sql;, pour voir ce que ma requête donnait. Et par exemple, lorsque j'ai dans le menu déroulant "Petit chapeau", je n'ai que "Petit" qui est retenu dans ma requête INSERT TO.

Par contre, lorsque dans mon menu déroulant dynamique, je rajoute un champ statique <option value="test test test">test test test</option>, et que je sélectionne ce champ dans mon formulaire, tout est pris en compte, y compris les espaces dans la requête.

J'ai d'abord pensé à un souci d'encodage, car j'ai vu qu'il y avait pas mal de souci du côté des débutants dont je suis, de ce côté-là, et j'ai bien vérifié que ma base et mes en-têtes de page html ou php étaient en utf8.

Donc, je sèche... Merci pour votre aide, ou vos pistes ! :roll:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

02 mai 2007, 13:26

Ne t'affoles pas il s'agit tout simplement de l'absence des guillemets dans l'attribut value de la balise <option>, tu as oublié de les imprimer autour de la valeur de l'option.
Les guillemets ou les quotes permettent d'encapsuler les valeurs composées notamment d'espaces.

Correction:
$req = 'SELECT valeur FROM table'; 
$res=mysql_query($req); 
while ($val=mysql_fetch_array($res)) 
{ 
echo '<option value = "'.$val['valeur'].'">'.$val['valeur'].'</option>'; 
}
Remarque: il est préférable de désigner le nom d'un champ de table par son nom retourné par le SELECT SQL. Dans ton cas il s'agit de $val['valeur'] et non $val[val] car tu exécutes un "SELECT valeur From table" ou alors, tu peux utiliser la forme $val[0] puisque le champ valeur est le premier retourné par le SELECT SQL.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Petit nouveau ! | 2 Messages

02 mai 2007, 14:21

Merciiiii beaucoup pour cette réponse rapide Sadeq ! Génial !

Concernant ta remarque, c'est juste que j'ai mis des valeurs autres que mes valeurs réelles pour ne pas alourdir le code, et je me suis trompé dans les 'val'. Mais en effet, dans mon code original, j'ai bien respecté la relation entre le nom du champ de table et le nom retourné par le SELECT, comme tu l'as sympatiquement précisé !