Можно объединить несколько элементов формы и получить их на сервере в виде массива. Это делается с помощью манипуляций с атрибутом name.
Так можно передать ассоциативный массив:
<form>
<input type="text" name="product[name]">
<input type="text" name="product[article]">
<input type="text" name="product[price]">
<input type="submit">
</form>
При отправке формы содержимое $_GET будет таким:
Array
(
[product] => Array
(
[name] => Название
[article] => Артикул
[price] => Цена
)
)
Пример обработчика этой формы:
<?php
if(!empty($_GET['product']))
{
// Можно перебрать все поля
foreach($_GET['product'] as $k => $v)
echo "$k : $v <br>";
// Или обратиться к конкретному полю
echo $_GET['product']['name'];
}
?>
<form>
<input type="text" name="product[name]">
<input type="text" name="product[article]">
<input type="text" name="product[price]">
<input type="submit">
</form>
Разумеется, ключами могут быть и обычные числа. А если нужно, чтобы ключи шли по порядку, можно просто ничего не указывать в квадратных скобках:
<form>
<input type="text" name="values[]">
<input type="text" name="values[]">
<input type="text" name="values[]">
<input type="submit">
</form>
Содержимое $_GET будет таким:
Array
(
[values] => Array
(
[0] => Значение 1
[1] => Значение 2
[2] => Значение 3
)
)
Можно передавать и многомерные массивы, например для редактирования сразу нескольких записей в базе данных:
<form>
<input type="text" name="images[10][title]">
<input type="text" name="images[10][url]">
<input type="text" name="images[11][title]">
<input type="text" name="images[11][url]">
<input type="submit">
</form>
Пример обработчика этой формы:
<?php
if(!empty($_GET['images']))
{
foreach($_GET['images'] as $id => $data)
{
echo "ID: $id, ";
echo "Title: $data[title], ";
echo "URL: $data[url] <br>";
}
}
?>
В одной форме можно указывать обычные поля и массивы вместе:
<form>
<input type="text" name="id">
<input type="text" name="product[name]">
<input type="text" name="images[15][title]">
<input type="submit">
</form>