Я знаю, что могу делать такие вещи, как <input name="foo[]">
, но можно ли делать такие вещи, как <input name="foo[bar]">
и показать его в PHP как $_POST['foo']['bar']
?
Причина, по которой я спрашиваю, состоит в том, что я создаю огромную таблицу элементов формы (включая <select>
с несколькими <select>
), и я хочу, чтобы мои данные были организованы для сценария, к которому я отправляю POSTING. Я хочу, чтобы элементы ввода в каждом столбце имели одно и то же базовое имя, но другой идентификатор строки в качестве ключа массива. Имеет ли это смысл?
EDIT: Я уже пытался это сделать, но, по-видимому, Drupal вмешивается в то, что я пытаюсь сделать. Я думал, что я просто неправильно понял свой синтаксис. Firebug сообщает мне, что мои имена ввода построены точно так же, но мои данные возвращаются как [foo[bar]] => data
а не [foo] => array([bar] => data)
.
EDIT 2: Кажется, моя реальная проблема заключалась в моем предположении, что $form_state['values']
в Drupal будет иметь такую же иерархию массивов, что и $_POST
. Я никогда не должен был предполагать, что Drupal будет настолько разумным и интуитивным. Прошу прощения за то, что потратил ваше время. Вы можете заниматься своим бизнесом.
Вы тоже можете сделать это в Drupal, довольно легко. Важная вещь, о которой вы должны помнить, это установить параметр '#tree' в значение TRUE. Чтобы дать вам быстрый пример:
function MYMODULE_form() { $form = array('#tree' => TRUE); $form['group_1']['field_1'] = array( '#type' => 'textfield', '#title' => 'Field 1', ); $form['group_1']['field_2'] = array( '#type' => 'textfield', '#title' => 'Field 2', ); $form['group_2']['field_3'] = array( '#type' => 'textfield', '#title' => 'Field 3', ); $form['submit'] = array( '#type' => 'submit', '#value' => 'Submit', ); return $form; }
Теперь, если вы напечатаете_r () $ form_state ['values'] в MYMODULE_form_submit ($ form, & $ form_state), вы увидите что-то вроде этого:
Array ( [group_1] => Array ( [field_1] => abcd [field_2] => efgh ) [group_2] => Array ( [field_3] => ijkl ) [op] => Submit [submit] => Submit [form_build_id] => form-7a870f2ffdd231d9f76f033f4863648d [form_id] => test_form )
Скажем, мы хотим напечатать студенческие баллы, используя форму ниже:
<form action="" method="POST"> <input name="student['john']"> <input name="student['kofi']"> <input name="student['kwame']"> <input type="submit" name="submit"> </form>
и PHP-код для печати своих баллов:
if(isset($_POST['submit'])) { echo $_POST['student']['john'] . '<br />'; echo $_POST['student']['kofi'] . '<br />'; echo $_POST['student']['kwame'] . '<br />'; }
Это напечатает значения, введенные вами в поле.
Да, ты можешь. вы можете даже сделать name="foor[bar][]"
и дальше для еще большего заполнения.