multiples variables $_GET avec le même nom

multiples variables $_GET avec le même nom - PHP - Programmation

Marsh Posté le 22-01-2008 à 17:05:42    

Une URL de ce type :  
 
./page.php?val=1&name=x&val=5
 
retourne un print_r($_GET) comme celui-ci :  
 

Array
(
    [val] => 5
    [name] => x
)

ce qui semble logique.  
 
Pourtant sans de loin en être expert, il me semble que dans d'autres langages comme JSP ou ASP, quand une variable en get se retrouve plusieurs fois, elle est automatiquement mise dans une array qui porte son nom, avec en son sein toutes les valeurs existantes.
 
J'ai trouvé qu'en PHP, il suffit de rajouter "[]" au nom de la variable, et ça semble résoudre le problème :  
 
./page.php?val[]=1&name=x&val[]=5
 
ce qui donne :
 

Array
(   [val] => Array
        (   [0] => 1
            [1] => 5
        )
    [name] => x
)


 
Pour des raisons obscures qui concernent les DBA de ma boîte et que je ne m'évertuerai pas à détailler ici (d'abord faudrait-il que je les comprenne!   :whistle: ) , je voulais savoir s'il n'y avait pas une solution plus élégante (par exemple une config niveau serveur) de bénéficier de cette mise en array automatique sans devoir changer le nom de la variable ...  
 
Bien l'merci d'avance pour tout renseignement !  :hello:  
 
 
 
 
 

Reply

Marsh Posté le 22-01-2008 à 17:05:42   

Reply

Marsh Posté le 22-01-2008 à 17:14:46    

pas à ma connaissance.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 22-01-2008 à 17:15:04    

De mémoire c'est la seule solution.
 
En général ce type de nom n'est pas passé en GET, mais en POST car rattaché à des inputs et compagnie -> or le GET est officiellement déprécié pour les formulaires.


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 22-01-2008 à 17:16:13    

CyberDenix a écrit :

De mémoire c'est la seule solution.
 
En général ce type de nom n'est pas passé en GET, mais en POST car rattaché à des inputs et compagnie -> or le GET est officiellement déprécié pour les formulaires.


 
oui, s'il s'agit d'un formulaire il est plus que conseillé de tout passer en POST - même s'il faut toujours utiliser la même ruse.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 22-01-2008 à 17:29:43    

aie aie aie, pas de solution dans ce cas là. il faut soit changer le nom des variables soit récupérer la partie paramètre de l'adresse (en général on la trouve dans $_SERVER) et la traiter manuellement pour retrouver l'ensemble des données.
A ma connaissance, le php est d'ailleurs le seul langage qui nécessite qu'on mette un "[]" pour bénéficier d'une mise en tableau automatique des données envoyés en get ou en post.

Message cité 1 fois
Message édité par omega2 le 22-01-2008 à 17:41:05
Reply

Marsh Posté le 22-01-2008 à 17:30:30    

Impossible à faire. Voir dans le code source, le fichier \main\php_variables.c, la fonction php_register_variable_ex

Reply

Marsh Posté le 22-01-2008 à 17:32:55    

omega2 a écrit :

...récupérer la partie paramètre de l'adresse (en général on la trouve dans $_SESSION) ...


$_SERVER ?


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 22-01-2008 à 17:40:51    

Oups, coquille. [:anathema]

Reply

Marsh Posté le 22-01-2008 à 17:46:39    

Il s'agit ici en fait de dresser des tableaux de stats automatiques issus de DB Oracle donc pas de problème pour l'utilisation de get à la place de post, pas de données de formulaire sensibles :)
 
En tout cas merci pour vous éclaircissements, et dommage pour cette petite faiblesse de PHP ;)

Reply

Marsh Posté le 22-01-2008 à 17:50:44    

Fait, gaffe, en get aussi il faut les [] pour php. ;)

Reply

Marsh Posté le 22-01-2008 à 17:50:44   

Reply

Marsh Posté le 23-01-2008 à 13:50:31    

ouioui omega, c'est ce que je dis dans mon tout premier message (où les exemples en PHP sont illustrés par des variables issus de l'URL, c'est-à-dire en get!) :)
 
:jap:

Reply

Marsh Posté le 23-01-2008 à 14:26:52    

Comme quoi il faut toujours se relire : je voulais dire en post, donc même pour les input d'un formulaire.

Reply

Marsh Posté le 23-01-2008 à 14:30:43    

ooh oki :) bon à savoir :)

Reply

Marsh Posté le 24-01-2008 à 13:41:54    

C'est d'ailleurs assez naze. Ca serait assez trivial de gérer plusieurs fois le même nom sans utiliser [].

Reply

Marsh Posté le 24-01-2008 à 14:43:13    

FlorentG > Là, je suis d'accord avec toi. C'est l'un des trucs que je trouve le plus mal fait dans ce langage.

Reply

Marsh Posté le 24-01-2008 à 14:48:24    

omega2 a écrit :

C'est l'un des trucs que je trouve le plus mal fait dans ce langage.


tu t'arrêtes à pas grand chose.:D


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-01-2008 à 15:25:27    

J'ai pas besoin de tout non plus. :p

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed