web-dev-qa-db-fra.com

Plusieurs entrées avec le même nom via POST en php

Est-il possible d'avoir plusieurs entrées du même nom à poster et à y accéder depuis PHP? L'idée est la suivante: j'ai un formulaire qui permet de saisir un nombre indéfini d'adresses physiques ainsi que d'autres informations. Si je donnais simplement le même nom à chacun de ces champs dans plusieurs entrées et soumettais ces données par la poste, est-ce que PHP pourrait y accéder?

Supposons, par exemple, que je dispose de cinq entrées sur une page nommée "xyz" et que je souhaite y accéder à l’aide de PHP. Puis-je faire quelque chose comme:

    $_POST['xyz'][0]

Dans ce cas, ma vie serait dix fois plus facile, car je pouvais envoyer une quantité indéfinie d’informations via un formulaire et le faire traiter par le serveur simplement en parcourant le tableau d’articles portant le nom "xyz".

108
Adam

Changer les noms de vos entrées:

<input name="xyz[]" value="Lorem" />
<input name="xyz[]" value="ipsum"  />
<input name="xyz[]" value="dolor" />
<input name="xyz[]" value="sit" />
<input name="xyz[]" value="amet" />

Ensuite:

$_POST['xyz'][0] == 'Lorem'
$_POST['xyz'][4] == 'amet'

Dans ce cas, ma vie serait dix fois plus facile, car je pouvais envoyer une quantité indéfinie d’informations via un formulaire et le faire traiter par le serveur simplement en parcourant le tableau d’articles portant le nom "xyz".

Notez que ceci est probablement la mauvaise solution. Évidemment, cela dépend des données que vous envoyez.

198
Eric

Dans votre code HTML, vous pouvez transmettre un tableau portant le nom i.e

<input type="text" name="address[]" /> 

De cette façon, php recevra un tableau d'adresses.

36
aziz punjani

La réponse d'Eric est correcte, mais le problème est que les champs ne sont pas groupés. Imaginez que vous avez plusieurs rues et villes qui vont ensemble:

<h1>First Address</h1>
<input name="street[]" value="Hauptstr" />
<input name="city[]" value="Berlin"  />

<h2>Second Address</h2>
<input name="street[]" value="Wallstreet" />
<input name="city[]" value="New York" />

Le résultat serait

$POST = [ 'street' => [ 'Hauptstr', 'Wallstreet'], 
          'city' => [ 'Berlin' , 'New York'] ];

Pour les regrouper par adresse, je recommanderais plutôt d'utiliser ce qu'Eric a également mentionné dans la section commentaire:

<h1>First Address</h1>
<input name="address[1][street]" value="Hauptstr" />
<input name="address[1][city]" value="Berlin"  />

<h2>Second Address</h2>
<input name="address[2][street]" value="Wallstreet" />
<input name="address[2][city]" value="New York" />

Le résultat serait

$POST = [ 'address' => [ 
                 1 => ['street' => 'Hauptstr', 'city' => 'Berlin'],
                 2 => ['street' => 'Wallstreet', 'city' => 'New York'],
              ]
        ]
2
Adam

Pour tous ceux qui découvrent cela, il est utile de noter que vous pouvez définir la valeur de la clé dans le nom de l'entrée. Merci à la réponse dans POSTing Champs de formulaire avec même attribut de nom vous pouvez également interagir des chaînes ou des entiers sans les guillemets.

Les réponses supposent que la valeur de clé renvoyée pour PHP ne vous gêne pas, mais vous pouvez définir name=[yourval] (chaîne ou int), ce qui vous permet ensuite de faire référence à un enregistrement existant.

0
Antony

Ça peut être:

echo "Welcome".$_POST['firstname'].$_POST['lastname'];
0
Azeemunnisa