php复选框始终显示已选中

时间:2009-11-09 02:56:45

标签: php html checkbox

我有一个复选框,我希望未选中的值为0,选中的值为1,但是当帖子通过时,它总是显示为1是否选中了复选框。

这是复选框:

<input name="stock[]" type="checkbox" id="stock[]"> value="1" />

无论是否检查,它都是吐出来的。(有多个“股票”复选框..

[stock] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 1
            [3] => 1
            [4] => 1
            [5] => 1
        )

我似乎无法让它工作..:S有什么想法吗? :)

3 个答案:

答案 0 :(得分:6)

好像你有额外的&gt;在您的复选框HTML中。在复选框的情况下不使用值。

 <input name="stock[]" type="checkbox" />

因为您有value="1",无论是否选中,表单都会始终提交值。因此删除value属性将有所帮助。

要预设要选中的复选框,请改用checked属性。例如:

 <input name="stock[]" type="checkbox" checked="checked" />

答案 1 :(得分:1)

(显然,你需要先删除那个无关的&gt;符号。)

复选框和单选按钮必须具有值属性。如果选中它们,则在提交表单时会发送该值;如果没有选中,则不会提交任何价值。因此,您不能直接执行“如果未选中则为0,如果已选中则为1”。你可以做的是使用value属性来检测检查了哪些复选框。

<input type="checkbox" name="stock[]" value="1" id="stock1" />
<input type="checkbox" name="stock[]" value="2" id="stock2" />
<input type="checkbox" name="stock[]" value="3" id="stock3" />

如果选中第1个和第3个框,但第2个框不是,那么当你查看代码中stock []数组的值时,你会发现它包含1和3,但不包含2。

编辑:我刚刚确认,看起来所有复选框都有提交值的原因是您没有给表单任何方式来区分它们。如果您有多个复选框,不仅名称相同但值相同,那么表单结果将类似于“stock [] = 1,stock [] = 1,stock [] = 1”。然后PHP会将其解释为stock [1] = 1,stock [2] = 1等,但重点是stock [2]可能实际上是第四个复选框 - 表单和php都没有任何方法可以告诉每个值都来自。

所以底线是,您可以对一系列复选框使用相同的名称, OR 您可以使用相同的值,但不能同时使用两者:如果您使用相同的名称,则使用该值来区分控件;反之亦然,如果要使用相同的值,则需要使用不同的名称。

顺便说一句,如果你没有指定复选框的值,那么大多数浏览器都会提供自己的默认值 - 例如,IE和Firefox使用“on”(或某些版本中的“ON”) 。但取决于这种默认值总是一个坏主意。

答案 2 :(得分:0)

我不确定你是否可以/应该命名一个输入元素“stock []” - 尝试摆脱[]并重新测试。