Передача массивов через форму в 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>

Комментарии