POST массив из HTML-формы без javascript

91

У меня есть форма, которая немного сложна, и я надеюсь упростить обработку на стороне сервера (PHP), изначально отправив массив кортежей POST.

Первая часть формы представляет пользователя :

  • Имя
  • Фамилия
  • Эл. адрес
  • Адрес
  • и т.д

Вторая часть формы представляет собой дерево :

  • Фрукты
  • Высота
  • и т.д

Проблема в том, что мне нужно иметь возможность размещать несколько деревьев для одного пользователя в одной форме. Я хотел бы отправить информацию как один пользователь с массивом деревьев, но это может быть слишком сложно для формы. Единственное, что приходит в голову, - это использование javascript для создания некоторого сообщения JSON с объектом User и массивом объектов Tree. Но было бы неплохо избежать использования javascript для поддержки большего числа пользователей (у некоторых людей скрипты отключены).

стиль
источник
1
Гарантирует ли массив порядок? Мне нужен массив объектов Tree, которые будут иметь несколько полей, поэтому это будет означать, что мне придется использовать несколько массивов для представления дерева, и массивы должны быть упорядочены, чтобы я мог выяснить, какое дерево они представляют.
styfle

Ответы:

156

проверьте это.

<input type="text" name="firstname">
<input type="text" name="lastname">
<input type="text" name="email">
<input type="text" name="address">

<input type="text" name="tree[tree1][fruit]">
<input type="text" name="tree[tree1][height]">

<input type="text" name="tree[tree2][fruit]">
<input type="text" name="tree[tree2][height]">

<input type="text" name="tree[tree3][fruit]">
<input type="text" name="tree[tree3][height]">

он должен так закончиться в массиве $ _POST [] (формат PHP для упрощения визуализации)

$_POST[] = array(
    'firstname'=>'value',
    'lastname'=>'value',
    'email'=>'value',
    'address'=>'value',
    'tree' => array(
        'tree1'=>array(
            'fruit'=>'value',
            'height'=>'value'
        ),
        'tree2'=>array(
            'fruit'=>'value',
            'height'=>'value'
        ),
        'tree3'=>array(
            'fruit'=>'value',
            'height'=>'value'
        )
    )
)
Джозеф
источник
6
Какие символы разрешены при индексировании массива? Можем ли мы использовать,.: `@? Пример: tree[tree 1][fr ui_t] tree[tree.1][fru:it] tree[tree@1][fru,it] _ только безопасный разделитель в именовании ключей?
CoR
5
будет ли tree[][fruit]и tree[][height]недействительно автоматически индексировать массив?
Wobbles
Как мне получить эти отправленные данные в виде массива / объекта в js для использования в new formData($("form")[0])$("form").serializeArray()name="tree[tree1][fruit]"
обратном вызове
Примечание: он не работает с функциями jquery для сбора данных формы как .serialize()или.serializeArray()
SubjectDelta
Я пробовал, но у меня не получилось в ларавеле
Вешрадж Джоши
67

Вы также можете опубликовать несколько входов с тем же именем и сохранить их в массив, добавив пустые квадратные скобки к имени входа следующим образом:

<input type="text" name="comment[]" value="comment1"/>
<input type="text" name="comment[]" value="comment2"/>
<input type="text" name="comment[]" value="comment3"/>
<input type="text" name="comment[]" value="comment4"/>

Если вы используете php:

print_r($_POST['comment']) 

вы получите это:

Array ( [0] => 'comment1' [1] => 'comment2' [2] => 'comment3' [3] => 'comment4' )
Дэн
источник