Si vous avez un formulaire contenant des entrées de texte avec des attributs name
en double et que le formulaire est publié, pourrez-vous toujours obtenir les valeurs de tous les champs à partir du $_POST
tableau en PHP?
Non. Seul le dernier élément d'entrée sera disponible.
Si vous voulez plusieurs entrées avec le même nom, utilisez name="foo[]"
pour l'attribut de nom d'entrée. $_POST
contiendra alors un tableau pour foo avec toutes les valeurs des éléments d'entrée.
<form method="post">
<input name="a[]" value="foo"/>
<input name="a[]" value="bar"/>
<input name="a[]" value="baz"/>
<input type="submit" />
</form>
Voir référence HTML sur Sitepoint .
La raison pour laquelle $_POST
ne contiendra la dernière valeur que si vous n'utilisez pas []
est parce que PHP va simplement exploser et aller au-delà de la chaîne de requête brute pour remplir $_POST
. Lorsqu'il rencontre une paire nom/valeur qui existe déjà, il écrase la précédente.
Cependant, vous pouvez toujours accéder à la chaîne de requête brute comme ceci:
$rawQueryString = file_get_contents('php://input'))
En supposant que vous ayez un formulaire comme celui-ci:
<form method="post">
<input type="hidden" name="a" value="foo"/>
<input type="hidden" name="a" value="bar"/>
<input type="hidden" name="a" value="baz"/>
<input type="submit" />
</form>
$ rawQueryString
contiendra alors a=foo&a=bar&a=baz
.
Vous pouvez ensuite utiliser votre propre logique pour analyser ceci dans un tableau. Une approche naïve serait
$post = array();
foreach (explode('&', file_get_contents('php://input')) as $keyValuePair) {
list($key, $value) = explode('=', $keyValuePair);
$post[$key][] = $value;
}
qui vous donnerait alors un tableau de tableaux pour chaque nom dans la chaîne de requête.
Au lieu de name="nfo[val]"
Utilisez simplement name="nfo[val][]"
Et dans PHP vous pouvez utiliser une foreach()
Code HTML:
<form method="post">
<input name="nfo[val][]" value="val1"/>
<input name="nfo[val][]" value="val2"/>
<input name="nfo[val][]" value="val3"/>
<input type="submit" />
</form>
Code PHP:
$output='';
foreach ($nfo['val'] as $key=>$val) {
$output.= $val.", ";
}
$output
Sera: val1, val2, val3
J'espère que cela t'aides!
Vous devez en créer un tableau: avec name=inputname[]
et obtenez avec la poste, demandez ou obtenez
$inputs = $_POST['inputname'];
print_r($inputs);
Uniquement si le nom est de type tableau names[]
dans ce cas, vous obtiendrez un tableau comme variable dans la variable $ _POST.