danwellman
Si tiene un formulario que contiene entradas de texto con duplicado name
atributos, y se publica el formulario, ¿aún podrá obtener los valores de todos los campos del $_POST
matriz en PHP?
gordon
No. Solo estará disponible el último elemento de entrada.
Si desea múltiples entradas con el mismo nombre, use name="foo[]"
para el atributo de nombre de entrada. $_POST
luego 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>
Ver el Referencia HTML en Sitepoint.
La razón por la cual $_POST
solo contendrá el último valor si no usa []
es porque PHP básicamente simplemente explotará y buscará sobre la cadena de consulta sin procesar para completar $_POST
. Cuando encuentra un par de nombre/valor que ya existe, sobrescribe 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
entonces 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.
-
ok genial, entonces cada entrada con un nombre duplicado debería ser simplemente name=”foo[]”? No nombre=”foo[0]” ¿o algo?
– danwellman
4 de febrero de 2010 a las 22:30
-
@danwellman Solo
foo[]
lo hará pero también puedes usarfoo[0]
,foo[bar]
e inclusofoo[bar][baz]
. Simplemente pruebe las diversas combinaciones en su servidor web para ver cómo llegan a $_POST.– Gordon
4 de febrero de 2010 a las 22:37
En lugar de name="nfo[val]"
Solo usa name="nfo[val][]"
y en PHP puedes 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
sera: val1, val2, val3
¡Espero que esto ayude!
-
Gran respuesta porque pensé que tendrías que citar val en el formulario html. [val] puede ser una cadena o un entero. ¡Gracias!
– Antonio
12 de septiembre de 2016 a las 8:06
Tienes que crear una matriz de ellos: con name=inputname[]
y obtener con publicación, solicitud u obtener
$inputs = $_POST['inputname'];
print_r($inputs);
Solo si el nombre es de tipo matriz names[]
en ese caso, obtendrá una matriz como variable en la variable $_POST.
Posible duplicado de múltiples entradas con el mismo nombre a través de POST en php
– Ciro Santilli Путлер Капут 六四事
31 mayo 2016 a las 21:45
Esta pregunta es mucho más antigua que el duplicado sugerido y tiene más respuestas. ¿Seguramente ese es un duplicado de este?
– danwellman
31 mayo 2016 a las 21:48
El consenso actual es cerrar con “calidad”: meta.stackexchange.com/questions/147643/…> Dado que la “calidad” no es medible, solo voy por votos a favor. 😉 Probablemente todo se reduce a qué pregunta encontró las mejores palabras clave nuevas de Google en el título.
– Ciro Santilli Путлер Капут 六四事
31 mayo 2016 a las 21:50