DLH*_*DLH 17 html php forms arrays drupal
我知道我可以做类似的事情<input name="foo[]">
,但有可能做出类似的事情<input name="foo[bar]">
并让它出现在PHP中$_POST['foo']['bar']
吗?
我问的原因是因为我正在制作一个包含<select>
多个表单元素的巨大表格(包括多个选项),并且我希望将我的数据清晰地组织在我正在发布的脚本中.我希望每列中的输入元素具有相同的基本名称,但是不同的行标识符作为数组键.那有意义吗?
编辑:我已经尝试过这个,但显然Drupal干扰了我正在尝试做的事情.我以为我的语法错了.萤火告诉我,我的名字输入构造完全一样,但我的数据回来为[foo[bar]] => data
,而不是[foo] => array([bar] => data)
.
编辑2:似乎我的真正问题是我的假设,$form_state['values']
在Drupal中将具有相同的数组层次结构$_POST
.我永远不应该认为Drupal会那么合理和直观.我为浪费你的时间而道歉.你可以开展你的业务.
小智 24
假设我们想使用以下表格打印学生分数:
<form action="" method="POST">
<input name="student['john']">
<input name="student['kofi']">
<input name="student['kwame']">
<input type="submit" name="submit">
</form>
Run Code Online (Sandbox Code Playgroud)
和PHP代码打印他们的分数:
if(isset($_POST['submit']))
{
echo $_POST['student']['john'] . '<br />';
echo $_POST['student']['kofi'] . '<br />';
echo $_POST['student']['kwame'] . '<br />';
}
Run Code Online (Sandbox Code Playgroud)
这将打印您输入到字段中的值.
你也可以很容易地在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;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您在MYMODULE_form_submit($ form,&$ 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
)
Run Code Online (Sandbox Code Playgroud)