checkboxの仕様
- そもそも、checkboxはチェックされていない場合はデータがサーバーに送信されない
例えば更新フォームにチェック済みのチェックボックスがあったとする
<label>
<input type="checkbox" name="is_public" value="1" checked> 公開する
</label>
やっぱり非公開にしたいな〜っと思って公開チェックを外して更新しても、$_POST['is_public']
が存在しないのでうまく更新できないケースがしばしば・・・
未チェック用にhidden要素を追加して解決
<label>
<input type="hidden" name="is_public">
<input type="checkbox" name="is_public" value="1"> 公開する
</label>
上記のように同名のhidden要素をcheckboxの前に置いておくと、
チェックがされている場合は後勝ち、未チェックの場合はhiddenの値 (=null)が勝つ
これでサーバー側にも$_POST['is_public']: null
が渡って更新出来るようになった
checkbox未チェックの場合はNULL値がサーバーまで渡らないので注意