在表单发布时,如何获取复选框元素中未选中的复选框的值?

2022-08-30 15:11:03

我有一个如下表格:

<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

第一种方式 - 隐藏字段(缺点:用户可以操作字段的值(但也可以操作复选框的值,所以如果你只期望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
 */

答案 2

我认为像这样添加隐藏字段会起作用

<input type="hidden" id="status_1_" name="status_1"  value="0">
<input type="checkbox" id="status_1" name="status_1" value="1" />

<input type="hidden" id="status_2_" name="status_2" value="0">
<input type="checkbox" id="status_2" name="status_2" value="1" />

<input type="hidden" id="status_3_" name="status_3" value="0">
<input type="checkbox" id="status_3" name="status_3" value="1" />