私は、HTML フォームの POST を解析するサーバー コード (または少なくとも PHP) は、値が「チェックされていない」チェックボックスを含むフォームからの POST と、値が「チェックされていない」フォームからの POST を区別できないという印象を受けました。その名前のチェックボックスを含めないでください。
たとえば、次の 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 とまったく同じように扱い、関連する値を Off にすることを思い出しました。バックエンド。
しかし、私は行って試してみましたが、うまくいきました! そして、さまざまなバリエーションを試しましたが、すべてうまくいきました。欠落しているチェックボックスに関連するフィールドを正しく無視します (既存のチェックボックスに関連するフィールドを処理している間)。
それで、それは素晴らしいことですが、それがどのように行われたかはわかりません(または、別のブラウザなどで動作しなくなる可能性があるかどうかなど)。PHP では、コード isset($_POST['chk_1']) がチェックボックスの値を取得し、両方の場合で false を返すことを知っています。他のサーバー言語で区別する方法はありますか? なぜこれが機能するのですか?