我的印象是,解析 HTML 表单的 POST 的服务器代码(或至少是 PHP)无法区分 POST 和带有未“选中”值的复选框的表单与没有“检查”的表单的 POST t 根本不包括该名称的复选框。
例如,采取以下 3 种形式。如果它们都按原样提交,没有手动输入,只使用初始值,那么表单 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:未选中的复选框或缺少复选框。其他服务器语言有没有办法区分?为什么这行得通?