431 votes

Comment passer un tableau dans une chaîne de requête ?

Est-il un moyen standard de passage d'un tableau par le biais d'une chaîne de requête?

Pour être clair, j'ai une chaîne de requête avec plusieurs valeurs, dont l'un serait un tableau de valeur. Je veux que la valeur de chaîne de requête à être traitée comme un tableau, je ne veux pas que la matrice soit a explosé alors qu'il est indissociable de l'autre des variables chaîne de requête.

Aussi, selon ce post de réponse, l'auteur suggère que la chaîne de requête de support pour les tableaux n'est pas défini. Est-ce exact?

EDIT:

@Alex réponse, il n'y a pas moyen de le faire, donc mon suivi est alors ce est un moyen facile de reconnaître que le paramater je suis en train de lire est un tableau à la fois PHP et Javascript?

Serait-il acceptable de nom plusieurs params le même nom, et de cette façon, je sais qu'ils appartiennent à un tableau? Exemple:

?myarray=value1&myarray=value2&myarray=value3...

Ou serait-ce une mauvaise pratique?

503voto

Yarin Points 18186

Voici ce que j'ai compris:

La soumission de multi-valeur des champs de formulaire, c'est à dire la soumission des tableaux via GET/POST vars, peut être fait de plusieurs façons différentes, comme une norme n'est pas nécessairement explicités.

Trois façons d'envoyer des champs à valeurs multiples ou des tableaux serait:

  • ?cars[]=Saab&cars[]=Audi (Meilleur moyen - PHP lit ceci dans un tableau)
  • ?cars=Saab&cars=Audi (Mal - PHP s'inscrire uniquement la dernière valeur)
  • ?cars=Saab,Audi (N'ai pas essayé)

Formulaire D'Exemples

Sur un formulaire, à valeurs multiples champs pourrait prendre la forme d'une boîte de sélection de jeu à plusieurs:

<form> 
    <select multiple="multiple" name="cars[]"> 
        <option>Volvo</option> 
        <option>Saab</option> 
        <option>Mercedes</option> 
    </select>
</form>

(REMARQUE: Dans ce cas, il serait important de nom de l'sélectionnez contrôle some_name[], de sorte que la demande de vars serait enregistré comme un tableau en PHP)

... ou comme plusieurs champs cachés avec le même nom:

<input type="hidden" name="cars[]" value="Volvo">
<input type="hidden" name="cars[]" value="Saab">
<input type="hidden" name="cars[]" value="Mercedes">

REMARQUE: à l'Aide de field[] pour les valeurs multiples est vraiment mal documentée. Je ne vois aucune mention de cela dans la section sur les valeurs multiples clés dans la chaîne de Requête - Wikipédia, ou dans le W3C docs traiter avec multi-sélectionner les entrées.

42voto

Alex K. Points 67805

Une chaîne de requête porte des données textuelles, donc il n’y a pas d’autre choix, mais pour exploser le tableau, encoder correctement et passez-la dans un format de représentation de votre choix :


``

et puis le décoder dans votre code de côté serveur.

25voto

Berry Tsakala Points 1197

Je ne pense pas qu’il y a une norme.

chaque environnement web fournit son propre « standard » pour de telles choses. Besiedes, à l’aide de l’url est généralement trop court pour rien (limite de 256 octets sur certains navigateurs).

Il y a manière de PHP qui utilise [crochets].

vous pouvez utiliser un sérialiseur de l’objet (par exemple json), puis l’url-codeur (disponible pour la plupart des langages de programmation),

par exemple

7voto

vara Points 11

Je pense qu’il serait utile pour quelqu'un qui cherche en passant le tableau dans une chaîne de requête à un servlet. J’ai testé sous la chaîne de requête et a été en mesure d’obtenir les valeurs du tableau à l’aide de req.getgetParameterValues() ; méthode. Voici la chaîne de requête, que je suis passé par le biais de navigateur.

case à cocher est ici mon tableau de paramètres.

1voto

keyboardP Points 44625

Vous pouvez utiliser http_build_query pour générer une URL-encodé une chaîne de requête à partir d'un tableau en PHP. Tandis que la résultante de la chaîne de recherche sera étendue, vous pouvez décider sur un unique séparateur que vous voulez tant que paramètre à la http_build_query méthode, de sorte que quand il s'agit de décodage, vous pouvez vérifier ce que le séparateur a été utilisé. Si c'était l'unique, celui que vous avez choisi, alors ce serait la matrice de querystring sinon il serait normal querystrings.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X