我有如下形式:
<form action="" method="post"> <input type="checkbox" id="status_1" name="status_1" value="1" /> <input type="checkbox" id="status_2" name="status_2" value="1" /> <input type="checkbox" id="status_3" name="status_3" value="1" /> </form>
当我选中所有复选框并发布表单时,结果如下所示:
Array ([status_3] => 1 [status_2] => 1 [status_1] => 1 )
然后我取消选中第二个复选框并发布表单,结果是这样的:
Array ( [status_3] => 1 [status_1] => 1 )
当我取消选中第二个复选框时,是否有可能得到如下所示的结果:
Array ( [status_3] => 1 [status_2] => 0 [status_1] => 1 )
有想法吗?
第一种方法-隐藏字段(缺点:用户可以操纵字段的值(但是也可以操纵复选框的值,因此,如果只期望1或0,这不是真正的问题))
<form action="" method="post"> <input type="hidden" name="status_1" value="0" /> <input type="checkbox" id="status_1" name="status_1" value="1" /> <input type="hidden" name="status_2" value="0" /> <input type="checkbox" id="status_2" name="status_2" value="1" /> <input type="hidden" name="status_3" value="0" /> <input type="checkbox" id="status_3" name="status_3" value="1" /> <input type="submit" /> </form> <?php var_dump($_POST); /* * checking only the second box outputs: * * array (size=3) 'status_1' => string '0' (length=1) 'status_2' => string '1' (length=1) 'status_3' => string '0' (length=1) */
第二种方法-为未设置的索引分配默认值:
<form action="" method="post"> <input type="checkbox" id="status_1" name="status_1" value="1" /> <input type="checkbox" id="status_2" name="status_2" value="1" /> <input type="checkbox" id="status_3" name="status_3" value="1" /> <input type="submit" /> </form> <?php for($i = 1; $i<=count($_POST); $i++) { $_POST["status_$i"] = isset($_POST["status_$i"]) ? $_POST["status_$i"] : 0; } var_dump($_POST); /** * Here we will be checking only the third checkbox: * * array (size=3) 'status_3' => string '1' (length=1) 'status_1' => int 0 'status_2' => int 0 */