为什么我们不能 POST 取消选中复选框?

Why we cannot POST unchecked checkbox?

我有一个包含大约 80 个复选框的表单,默认情况下将选中所有这些复选框。用户只会取消选中不需要的项目,所以我在 POST 中寻找未选中的复选框元素。但是,POST 仅保留选中的值。

经过一番搜索,我找到了适合我的情况的解决方法:this question

解决方法:

<form>
  <input type='hidden' value='0' name='selfdestruct'>
  <input type='checkbox' value='1' name='selfdestruct'>
</form>

使用这个我可以得到隐藏字段的值,这样我的目的就实现了。

但重要的问题是 为什么这不是默认功能? 对于任何第一次听起来很奇怪的技术问题,我都找到了正当理由。但是对于这个(不能post未选中的复选框)我还是很想知道原因。

如果有人能阐明这个主题,我将不胜感激。

W3C explains 仅提交“成功”的控件。

A successful control is "valid" for submission.

  • All "on" checkboxes may be successful.

同样,对于单选按钮,只有“打开”的单选按钮是“成功的”,对于菜单,只有选中的选项是“成功的”。

未选中的复选框不会在 POST 数据中发送。你应该检查它是否为空:

if (empty($_POST['field1']))
     ....
else
     ....

您还忘记了在您的字段中添加正确的 nameid。添加这个将使检查更容易。

<input type='hidden' value='0' name='field1' id="field1" >