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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Menu déroulant dynamique, prise en compte des espaces !

par Spok » 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é !

par sadeq » 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.

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

par Spok » 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: