我知道我可以执行<input name="foo[]">
之类的操作,但有可能执行<input name="foo[bar]">
之类的操作并将其显示在PHP中$_POST['foo']['bar']
吗?
我问的原因是因为我正在制作一个包含多个选择的<select>
表单元素的巨大表格,并且我想让我的数据干净利落地组成我所用的脚本张贴到。我希望每列中的输入元素具有相同的基本名称,但是不同的行标识符作为数组键。这有意义吗?
编辑:我已经尝试了这一点,但显然Drupal干扰了我正在尝试做的事情。我以为我的语法错了。 Firebug告诉我,我的输入名称的构造与此完全相同,但我的数据以[foo[bar]] => data
而不是[foo] => array([bar] => data)
的形式返回。
编辑2:看来我真正的问题是我假设Drupal中的$form_state['values']
与$_POST
具有相同的数组层次结构。我永远不应该认为Drupal会那么合理和直观。我为浪费你的时间而道歉。你可以开展业务。
答案 0 :(得分:24)
假设我们想使用以下表格打印学生分数:
<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 />';
}
这将打印您输入到字段中的值。
答案 1 :(得分:7)
是的,你可以。你甚至可以name="foor[bar][]"
进行更多填充。
答案 2 :(得分:5)
你也可以很容易地在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;
}
现在,如果您在MYMODULE_form_submit($ form,&amp; $ form_state)中print_r()$ form_state ['values'],您会看到如下内容:
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
)