我的印象是,解析HTML表單的POST的服務器代碼(或至少PHP)無法區分POST與表單之間的複選框,而該複選框的值未被「檢查「而不是根據該名稱包含複選框的表單中的POST。區分缺失和未選中複選框
例如,採取以下3種形式。如果他們都提交的是,沒有手工錄入,只是用inital值,然後形成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:未選中複選框或缺少複選框。有其他服務器語言的方法可以區分嗎?爲什麼這個工作?
http://www.w3.org/TR/html401/interact/forms.html#checkboxes – Musa
感謝您的鏈接,儘管我可以在其中找到的是確認,我原來的理解是正確的:只有CHECKED複選框的輸入被認爲是成功的,因此通過POST提交。 我仍然不知道這個第三方Web服務如何能夠檢測到我完全省略了一個複選框,而不是將其視爲未經檢查的複選框,而是能夠確定它沒有被正確提交忽視它。 – oxfordian
請指定一些服務的具體證據,區分缺失複選框和未選中複選框。 –