Html 区分缺少复选框和未选中复选框

Html 区分缺少复选框和未选中复选框,html,forms,checkbox,field,Html,Forms,Checkbox,Field,我的印象是,解析HTML表单的POST的服务器代码(或者至少是PHP)无法区分POST和带有复选框(其值未“选中”)的表单,以及POST和完全不包含复选框的表单 例如,采取以下三种形式。如果它们都按原样提交,没有手动输入,只使用初始值,那么表格f2和f3将发送相同的结果: <form name="f1"> <input type="text" name="txt_1" value="Hello"> <input type="checkbox" name="chk_1

我的印象是,解析HTML表单的POST的服务器代码(或者至少是PHP)无法区分POST和带有复选框(其值未“选中”)的表单,以及POST和完全不包含复选框的表单

例如,采取以下三种形式。如果它们都按原样提交,没有手动输入,只使用初始值,那么表格f2和f3将发送相同的结果:

<form name="f1">
<input type="text" name="txt_1" value="Hello">
<input type="checkbox" name="chk_1" checked="checked">
</form>

<form name="f2">
<input type="text" name="txt_1" value="Hello">
<input type="checkbox" name="chk_1">
</form>

<form name="f3">
<input type="text" name="txt_1" value="Hello">
</form>

在我的实际应用程序中,我提交了f3类型的表单,故意省略了一个复选框(在不同情况下有不同的复选框)。对于我遗漏的任何复选框,我希望后端忽略它——不要将其视为打开或关闭,只需不执行与该字段相关的操作

在我构建它之后,我几乎要在测试之前扔掉我的工作,当我想起后端会像对待未检查的现有chk_1一样对待丢失的chk_1,并关闭后端中的相关值

但我去试了试,成功了!我尝试了不同的变体,它们都很有效。它们正确地忽略与缺失复选框相关的字段(在处理与现有复选框相关的字段时)


所以,这很好,但我不知道它是如何完成的(或者它是否会停止工作——比如在另一个浏览器上,等等)。在PHP中,我知道代码isset($_POST['chk_1'])将获取复选框的值,并且在两种情况下都返回false:未选中复选框或缺少复选框。是否有其他服务器语言的方法来区分?为什么会这样?

简单的回答是PHP只获取浏览器发送的内容。它不知道也不关心表单本身,只关心来自浏览器的数据。数据是
name=data
值的集合

除其他因素外,浏览器仅在以下情况下发送按钮:

  • 它有一个名字,而且
  • 它已被选中
如果按钮没有名字,或者没有被选中,那么PHP将永远听不到它。这适用于

  • 普通按钮(
  • 单选按钮(组中只能选择一个按钮:如果未选择任何按钮,则该按钮也将不存在)
  • 复选框(仅发送选定的复选框)

因此,简短的回答是,PHP永远不会知道复选框是否丢失或只是未选中,因为这两个复选框都不会发送到服务器。

简短的回答是,PHP只获取浏览器发送的内容。它不知道也不关心表单本身,只关心来自浏览器的数据。数据是
name=data
值的集合

除其他因素外,浏览器仅在以下情况下发送按钮:

  • 它有一个名字,而且
  • 它已被选中
如果按钮没有名字,或者没有被选中,那么PHP将永远听不到它。这适用于

  • 普通按钮(
  • 单选按钮(组中只能选择一个按钮:如果未选择任何按钮,则该按钮也将不存在)
  • 复选框(仅发送选定的复选框)

因此,简单的回答是,PHP永远不会知道复选框是否丢失或只是未选中,因为这两个复选框都不会发送到服务器。

感谢您提供的链接,尽管我能从中找到的只是确认我最初对它的理解是正确的:只有选中的复选框输入才被认为是成功的,因此,随帖子一起提交。我仍然感到困惑的是,这个第三方web服务如何能够检测到我完全忽略了一个复选框,而不是将其视为未检查的复选框,而是能够确定它根本没有提交,并正确地忽略了它。请指定一些服务的具体证据,区分缺少的复选框和未选中的复选框。感谢您的贡献。结果是——虚惊一场。通过更多的测试,我发现即使发送了一个现有的未选中复选框,第三方服务也没有清除值。因此,当复选框未发送时,它也没有清除数据值这一事实并不神秘。所以--没关系:表单的一般规则是,发送带有未选中复选框的特定名称的表单相当于发送一个没有复选框的表单。谢谢链接,虽然我能从中找到的只是确认我最初对它的理解是正确的:只有选中复选框的输入才被认为是成功的,因此随帖子一起提交。我仍然感到困惑的是,这个第三方web服务如何能够检测到我完全忽略了一个复选框,而不是将其视为未检查的复选框,而是能够确定它根本没有提交,并正确地忽略了它。请指定一些服务的具体证据,区分缺少的复选框和未选中的复选框。感谢您的贡献。结果是——虚惊一场。通过更多的测试,我发现即使发送了一个现有的未选中复选框,第三方服务也没有清除值。因此,当复选框未发送时,它也没有清除数据值这一事实并不神秘。所以--没关系:表单的一般规则是,发送一个带有某个名称的未选中复选框的表单相当于发送一个没有该名称的复选框的表单。