ОПАСУЙТЕ масив із HTML-форми без JavaScript


90

У мене є форма, яка є трохи складною, і я сподіваюся спростити обробку на стороні сервера (PHP) шляхом власного розміщення масиву кортежів.

Перша частина форми представляє Користувача :

  • Ім'я
  • Прізвище
  • Електронна пошта
  • Адреса
  • тощо

Друга частина форми представляє Дерево :

  • Фрукти
  • Висота
  • тощо

Проблема полягає в тому, що мені потрібно мати можливість розміщувати кілька дерев для одного користувача в однаковій формі. Я хотів би надіслати інформацію як єдиному Користувачеві з масивом Дерев, але це може бути занадто складно, щоб зробити це з формою. Єдине, що спадає на думку - це використання javascript для створення деяких повідомлень JSON з об’єктом User та масивом об’єктів Tree. Але було б непогано уникати JavaScript для підтримки більшої кількості користувачів (у деяких людей сценарії вимкнено).


1
Чи гарантує масив порядок? Я хотів би масив об’єктів дерева, який мав би кілька полів, тому це означало б, що мені потрібно використовувати кілька масивів для представлення дерева, і масиви повинні бути упорядковані, щоб я міг зрозуміти, яке дерево вони представляють.
styfle

Відповіді:


153

перевірте це.

<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] Чи є _ лише безпечним роздільником у іменуванні ключів?
КР

4
буде tree[][fruit]і tree[][height]не буде дійсним для автоматичного індексування масиву?
Хитається

Як мені отримати ці надіслані дані як масив / об’єкт у js для використання у поданні зворотного виклику ... я спробував new formData($("form")[0])і jQuery $("form").serializeArray()обидва повертаються name="tree[tree1][fruit]"як рядок .... help
santosh

Примітка: він не працює з функціями jquery для збору даних форми як .serialize()або.serializeArray()
SubjectDelta

64

Ви також можете опублікувати кілька входів з однаковим іменем і зберегти їх у масиві, додавши порожні квадратні дужки до імені вводу, як це:

<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' )
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.