将HTML输入数组命名为[]或[0]?

时间:2016-03-14 17:18:31

标签: php html arrays

我需要使用单个提交(保存)按钮创建多个表单。

<?php for ($i = 0; $i < count($c); $i++): ?>

    <div>            
        <input type="radio" name="gender[<?php echo $i ?>]" id="gender_<?php echo $i ?>_male" value="male" />
        <label for="gender_<?php echo $i ?>_male">Male</label>
        <input type="radio" name="gender[<?php echo $i ?>]" id="gender_<?php echo $i ?>_female" value="female" />
        <label for="gender_<?php echo $i ?>_female">Female</label>
    </div>

    <div>
        <div><label for="Name_<?php echo $i ?>">Name:</label></div>
        <div><input type="text" name="Name[]" id="Name_<?php echo $i ?>" /></div>
    </div>    

<?php endfor ?>

我必须name the radio buttons作为性别[0] ...性别[1],以便这些群组具有唯一的名称。 但我已将Name命名为Name []。

我的问题是,我是否将Name []命名为Name [0] ...而是命名[1]以使流量恒定? 我的意思是,可以 $ _POST ['姓名'] [0]曾被映射到性别[1]?

2 个答案:

答案 0 :(得分:2)

浏览器将始终以相同的顺序提交字段。这是the HTML specification

所必需的
  

循环:对于控件中的每个元素字段,按树顺序,运行以下子步骤:

因此,除非您开始禁用字段,否则您将不会遇到问题。

明确可能会让你的代码更容易阅读。

答案 1 :(得分:0)

浏览器TEND按照他们在html中列出的相同顺序提交字段,但据我所知,没有必要这样做。所以,如果你有

<input name="foo[]" ...>    ... should become $_POST['foo'][0]
<input name="foo[]" ...>    ... should become $_POST['foo'][1]
<input name="foo[]" ...>    ... should become $_POST['foo'][2]

但由于没有要求,你可能会以其他顺序获得这些字段。如果您正在使用[]命名黑客,并且执行必须相互关联的多个字段,那么最好明确列出索引,以确保维护字段关联,例如

<input name="firstname[0]"> <input name="lastname[0]">
<input name="firstname[1]"> <input name="lastname[1]">
etc...

如果不这样做,您的用户名可以输入John DoeJane Smith,但会在服务器上接收John SmithJane Doe。不太可能,但......比抱歉更安全。