Несколько входов с одинаковым именем через POST в php
Можно ли получить несколько входов с одинаковым именем для публикации, а затем получить доступ к ним из PHP? Идея такова: у меня есть форма, которая позволяет вводить неопределенное количество физических адресов вместе с другой информацией. Если бы я просто дал каждому из этих полей одно и то же имя в нескольких записях и отправил эти данные по почте, смог бы ли PHP получить к ним доступ?
Скажем, например, у меня есть пять входов на одной странице с именем "xyz", и я хочу получить к ним доступ с помощью PHP. Могу ли я сделать что-то вроде:
$_POST['xyz'][0]
Если это так, это сделало бы мою жизнь в десять раз проще, поскольку я мог бы посылать неопределенное количество информации через форму и обрабатывать ее на сервере, просто просматривая массив элементов с именем "xyz".
3 ответа
Измените имена ваших входов:
<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" />
Затем:
$_POST['xyz'][0] == 'Lorem'
$_POST['xyz'][4] == 'amet'
Если это так, это сделало бы мою жизнь в десять раз проще, поскольку я мог бы посылать неопределенное количество информации через форму и обрабатывать ее на сервере, просто просматривая массив элементов с именем "xyz".
Обратите внимание, что это, вероятно, неправильное решение. Очевидно, это зависит от данных, которые вы отправляете.
В вашем HTML вы можете передать массив для имени, т.е.
<input type="text" name="address[]" />
Таким образом php получит массив адресов.
Эрик отвечает правильно, но проблема в том, что поля не сгруппированы. Представьте, что у вас есть несколько улиц и городов, которые принадлежат друг другу:
<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" />
Результат будет
$POST = [ 'street' => [ 'Hauptstr', 'Wallstreet'],
'city' => [ 'Berlin' , 'New York'] ];
Чтобы сгруппировать их по адресу, я бы рекомендовал использовать то, что Эрик также упомянул в разделе комментариев:
<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" />
Результат будет
$POST = [ 'address' => [
1 => ['street' => 'Hauptstr', 'city' => 'Berlin'],
2 => ['street' => 'Wallstreet', 'city' => 'New York'],
]
]
Для всех, кто нашел это - стоит отметить, что вы можете установить значение ключа во входном имени. Благодаря ответу в полях формы POSTing с тем же атрибутом имени вы также можете взаимодействовать со строками или целыми числами без кавычек.
Ответы предполагают, что вы не возражаете против значения ключа, возвращающегося для PHP, однако вы можете установить name=[yourval]
(строка или int), которая затем позволяет вам ссылаться на существующую запись.
Может быть:
echo "Welcome".$_POST['firstname'].$_POST['lastname'];