Справочники, инструменты, документация

PHP: Передача массивов через форму

Можно объединить несколько элементов формы и получить их на сервере в виде массива. Это делается с помощью манипуляций с атрибутом `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>