php - son - formulario html
POSTING campos de formulario con el mismo atributo de nombre (4)
Si tiene un formulario que contiene entradas de texto con atributos de name
duplicados, y el formulario está publicado, ¿podrá obtener los valores de todos los campos del conjunto $_POST
en PHP?
En lugar de name="nfo[val]"
simplemente use name="nfo[val][]"
y en PHP puede usar un foreach()
Código 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>
Código PHP:
$output='''';
foreach ($nfo[''val''] as $key=>$val) {
$output.= $val.", ";
}
$output
será: val1, val2, val3
¡Espero que esto ayude!
No. Solo el último elemento de entrada estará disponible.
Si desea varias entradas con el mismo nombre, use name="foo[]"
para el atributo de nombre de entrada. $_POST
contendrá una matriz para foo con todos los valores de los elementos de entrada.
<form method="post">
<input name="a[]" value="foo"/>
<input name="a[]" value="bar"/>
<input name="a[]" value="baz"/>
<input type="submit" />
</form>
Vea la referencia HTML en Sitepoint .
La razón por la cual $_POST
solo contendrá el último valor si no usas []
es porque PHP simplemente explotará y se enfocará en la cadena de consulta sin procesar para completar $_POST
. Cuando encuentra un par nombre / valor que ya existe, sobrescribirá el anterior.
Sin embargo, aún puede acceder a la cadena de consulta sin procesar de esta manera:
$rawQueryString = file_get_contents(''php://input''))
Suponiendo que tienes un formulario como este:
<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>
el $ rawQueryString
contendrá a=foo&a=bar&a=baz
.
Luego puede usar su propia lógica para analizar esto en una matriz. Un enfoque ingenuo sería
$post = array();
foreach (explode(''&'', file_get_contents(''php://input'')) as $keyValuePair) {
list($key, $value) = explode(''='', $keyValuePair);
$post[$key][] = $value;
}
que luego le daría una matriz de matrices para cada nombre en la cadena de consulta.
Solo si el nombre son names[]
matriz de tipo names[]
en ese caso obtendrá una matriz como la variable en la variable $ _POST.
Tienes que crear una matriz de ellos: con name=inputname[]
y obtener con post, request u get
$inputs = $_POST[''inputname''];
print_r($inputs);