这里有一个使用纯HTML的方法,可以让你接近你想要到达的地方,而且只使用HTML:
<form action="options.php" method="post">
<input type="text" name="options[deptid]" id="deptid" />
<input type="text" name="options[deptname]" id="deptname" />
<input type="submit" name="submit" id="submit" value="save" />
</form>
这将在 PHP 中给你:
$post_options = array(
'options' => array(
'deptid '=> '[that input element value]',
'deptname' => '[that input element value]'
)
);
然后您可以像这样访问它(包括消毒):
$post_options = array('options');
if (is_numeric($post_options['deptid'] && $post_options['deptid'] > 0) {
}
if (is_string($post_options['deptname'] && strlen($post_options['deptname'] > 2)) {
}
编辑
或者... 您想在input name
属性中引用deptid
,并使用它来修改部门名称的行?这似乎意味着类似于以下内容:
<?php
$deptid = 1;
$deptname = 'Department of Silly Walks';
?><input type="hidden" name="options[<?=$deptid?>]" value="<?=$deptname?>">
输出结果为:
<input type="hidden" name="options[1]" value="Department of Silly Walks">
http://codepad.org/DtgoZGe7
这种方法的问题在于$deptid
的值成为一个并未直接命名或引用的值。我认为,由于该值从服务器到客户端再回来时的抽象,实现起来可能存在潜在问题,因此我建议使用顶部的代码。实际上差别不大,但更具自说明性。
请注意,如果您想序列化部门列表,则会有一些麻烦。例如,您可以尝试以下方法:
<input type="text" name="options[][deptid]" id="deptid" />
<input type="text" name="options[][deptname]" id="deptname" />
这将为每个input
添加一个索引值。然而...它们不会直接关联。因此,您将得到每个键的两个从零开始的数组。
在这种情况下,我建议使用JavaScript添加每个新部门的input
元素,这样您可以给每个元素分配一个数字,例如:
<input type="text" name="options[0][deptid]" id="deptid" />
<input type="text" name="options[0][deptname]" id="deptname" />
<br/>
<input type="text" name="options[1][deptid]" id="deptid" />
<input type="text" name="options[1][deptname]" id="deptname" />
<br/>
<input type="text" name="options[2][deptid]" id="deptid" />
<input type="text" name="options[2][deptname]" id="deptname" />
<br/>
<input type="text" name="options[3][deptid]" id="deptid" />
<input type="text" name="options[3][deptname]" id="deptname" />
或者使用老派的POSTBACK方法,使用PHP计算$POST['options']
并"手动"添加一个具有相同索引的新输入行。这是一个常见的陷阱,所以如果你在某些时候需要这个,你只需要认真思考一下。