在HTML表单中使用多维数组有什么好处?

时间:2014-07-11 00:12:18

标签: php arrays html5 forms

关于以下代码:使用数据[类别] [县] [梅肯]数组的优势是什么,而不仅仅是命名' county'或者县[]和价值' Macon'以及他们如何处理服务器端的表单数据,每个复选框共享相同的值1?另外,为什么每个复选框都有一个具有相同名称但值为0的隐藏输入?

任何有助于理解的帮助都将受到赞赏。

<li>
    <div class="input checkbox">
        <input type="hidden" name="data[Category][county][Macon]" id="CategoryCountyMacon_" value="0" />
        <input type="checkbox" name="data[Category][county][Macon]" value="1" id="CategoryCountyMacon" />
        <label for="CategoryCountyMacon">Macon</label>
    </div>
</li>
<li>
    <div class="input checkbox">
        <input type="hidden" name="data[Category][county][Madison]" id="CategoryCountyMadison_" value="0" />
        <input type="checkbox" name="data[Category][county][Madison]" value="1" id="CategoryCountyMadison" />
        <label for="CategoryCountyMadison">Madison</label>
    </div>
</li>

2 个答案:

答案 0 :(得分:1)

实际上它在某些框架中很常见。假设Category是表格或模型,county是列,Madison是列的数据,或者是另一个查找表中的相关数据。看起来有点像CakePHP。

假设您有一个表单,用户可以在其中更新具有多个相关表的内容。你如何智能地和可重复地定义哪些数据绑定到哪个表等...框架在接收代码中有逻辑,它将第一级键作为表/模型,然后是列和值。

此外,复选框仅在选中后才会提交,因此如果不是,则不会在$_POST数组中。在复选框之前定义具有相同名称和值0的隐藏输入以确保存在值,如果未选中则为0,如果选中则为1。它是一种获取提交值并使用它们的方式,而不是检查是否存在某些内容,然后执行其中一项操作。

答案 1 :(得分:1)

我认为你可能有点过分复杂了。

我假设您向用户展示了一组县,并勾选了他们感兴趣的县。

现在要记住的第一件事是,只有选中复选框时,才会将复选框发送回脚本,如果不是您从未在脚本中看到它。发送回脚本的还有value="something"

因此,如果您只对选择了哪些县感兴趣,则可以更容易理解并在脚本中进行处理。此外,我不确定隐藏字段的功能是什么,我猜不到。

<li>
    <div class="input checkbox">
        <input type="checkbox" name="counties[]" value="Macon" id="CategoryCountyMacon" />
        <label for="CategoryCountyMacon">Macon</label>
    </div>
</li>
<li>
    <div class="input checkbox">
        <input type="checkbox" name="counties[]" value="Madison" id="CategoryCountyMadison" />
        <label for="CategoryCountyMadison">Madison</label>
    </div>
</li>

现在,如果检查MaconMadison,您将在$ _POST数组中返回一个名为counties的数组,如下所示。

counties[0] = 'Macon'
counties[1] = 'Madison'

因此您可以使用

轻松处理它
foreach( $_POST['counties'] as $county ) {
    // $county will = 'Macon' on first iteration
    // $county will = 'Madison' on second iteration
}

当然,将数据库中的县行的唯一键放入值属性即value="99而不是名称value="Macon"可能更好。这取决于您以后想要做什么以及如何设计数据库。