【PHP】 checkboxの未チェック値が更新されないとき

カレーライス

checkbox未チェックの場合はNULL値がサーバーまで渡らないので注意

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が渡って更新出来るようになった