$_GET et espace

Eléphant du PHP | 110 Messages

14 nov. 2007, 11:14

salut,
j'ai un souci avec $_GET.
Dans un formulaire j'ai un champ input dont le nom est en deux parties séparées par un espace.
ex:

Code : Tout sélectionner

<input type="hidden" name="un test" value="toto" />
le probleme c'est que j'arrive pas à récupérer la valeur passée en $_GET
si je fais $_GET["un test"] ca ne marche pas.

Je comprends pas parcque il me semble que j'avais déja utilisé ls espaces dans le champ name sans que ca pose de problème à la récupération. Ce pourrait -il qu'il y ait un paramètre sur le serveur qui empèche cela ou est ce seulement pas posible à faire?

merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 nov. 2007, 11:23

Le mieux, c'est naturellement de ne pas mettre d'espace dans un nom de variable, ou d'index, ou d'input, ou de quoi que ce soit ! ;)

Le problème vient sans doute du fait que lorsqu'elles sont passée par l'url, les chaines sont encodées en conséquence, et pas forcément de la même manière selon le traitement. Les espaces peuvent être encodé en %20 (rawurlencode) ou par le signe '+' (urlencode) ..

Essaye un print_r($_GET) pour voir ce qu'il contient... mais à ta place et dans tous les cas, je virerais les espaces. Au besoin remplace les par des underscores (_) :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 2287 Messages

14 nov. 2007, 11:24

Bonjour,

Ce n'est pas quelquechose à faire, en effet. Le fait que ça puisse marcher ou non dépend de la bonne volonté de ton navigateur (et non du serveur). Regarde dans ton URL ou fais un
print_r($_GET);
pour voir ce que ça donne :-)

Edit: grilled by Piaf®
Modifié en dernier par Calimero le 14 nov. 2007, 11:48, modifié 1 fois.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 110 Messages

14 nov. 2007, 11:38

bonjour, oui la variable passe bien mais au lieu de l'espace il faut ecrire $_GET[un_test].

j'aimerais bien me passer des espaces mais c'est que je vois pas comment faire autrement. J'ai déjé été confronté à ce problème.

J'ai une menu déroulant select dans un formulaire qui affiche une liste de service. Une fois le formulaire envoyé j'ai besoin de l'identifiant de chaque service. alors la solution que j'ai trouve c'est d'afficher le nom du service dans la liste déroulante et dans un champ caché je passe l'id de chaque service en parametre avec comme nom du champ caché , le nom du service . c'est la qu'apparait l'espace.

pour résumer ca donne en gros ca:

Code : Tout sélectionner

<form...> <select name="service"> <option>service1</option> .... <option>servicen</option> </select> for(1==>tous les services) { <input type = "hidden" name="nomService i" value="idService i" } </form>

et pour récupérer l'id du service selectionné je fais :

Code : Tout sélectionner

$idService = $_GET[$_GET["service"]]
voila le travail , qui je l'avoue est pas joli joli mais je vois pas comment faire autrement , je dois récupérer l'id du service parcequ'ensuite je crée une classe service à partir de cet Id.

Je pourrais eventuellement construire mon objet service à partir du nom mais ca me plait pas trop.

voila, c'est la deuxieme fois que je rencontre ce probleme et je sais pas comment m'y prendre.

voila merci pour vos réponses.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 nov. 2007, 12:12

Bah tu pourrais toujours faire un str_replace() pour changer les espaces en underscore, mais si tu as un "_" dans le nom du champ en GET, c'est forcément que ça a déjà été fait quelque part, parce qu'il ne se transforme aps tout seul ;)

Maintenant pour une solution plus propre, tu peux simlpement faire ceci :
for(1==>tous les services) { 
  echo '<input type="hidden" name="service[]" value="'.$idService.'" />';
} 
et récupérer en get le tableau $_GET['service'] qui contient tous tes ids (tu peux le parcourir facilement avec un foreach)

A voir si la solution ne serait pas simplement de mette une value dans tes options pour récupérer les id de services sélectionnés (tout dépend de la façon dont est utilisée le select)
<select name="service[]" multiple> 
      <option value="idService1">service1</option> 
      .... 
      <option value="idServiceN">servicen</option> 
</select> 
Tu récupères ainsi de même un tableau avec les idService des options sélectionnées...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 110 Messages

14 nov. 2007, 12:24

Bah tu pourrais toujours faire un str_replace() pour changer les espaces en underscore, mais si tu as un "_" dans le nom du champ en GET, c'est forcément que ça a déjà été fait quelque part, parce qu'il ne se transforme aps tout seul Wink
ben j'ai pas mis de str_replace pourtant. Dans l'url je vois que les espaces sont remplacés par des + et quand je fait un var_dump($_GET) je vois que les espaces on été remplacés par des _

enfin c'est pas le plus important mais je crois que la solution c'est de mettre l'attribut value. Je connaissais pas cette façon d'utiliser la balise select. Merci bien!


bonne journée.