PHP
HTML
input
checkbox
submit

HTMLの input type="checkbox" の値をPHPに渡すときに詰まった

HTMLのinputタグの値をPHPに渡したい。
type="checkbox"で「チェックしていない」、ってことをどうしても渡したいんだ。

何がしたいか

社員名簿の登録画面のようなものを作っていて、登録時に管理者権限のありなしを入れたい。
集計表には下表のように0,1で表示したいが、HTMLでは0,1の選択ではなくチェックマークにしたい。

社員ID 名前 管理者権限
1 乾 巧 1
2 草加 雅人 1
3 木場 勇治 1
4 海堂 直也 0

やってみた

まず基本通りにやってみる。

index.html
管理者権限:<input type="checkbox" name="kanri_flg">   ※管理者にはチェックする

inputのtypeをチェックボックスにして渡す。
これで試すと、チェックマークを付けた場合は集計に1と出るものの、チェックマークを付けなかった場合に"0"を表示してくれない。
どうやらcheckboxはチェックをつけないとまるで存在しないかのような挙動を見せる。

解決策

valueを持たせてみた。

どうやったか

同じnameを持つinputタグを2つ作り、上段のタグにvalue="0"を設定し、typeをhiddenにして隠す。
下段のタグにはvalue="1"を設定。
もしチェックマークがあれば、下段のinputタグが有効になって、上段を上書きして渡してくれるようにした。

html.index.html
<input type="hidden" name="kanri_flg" value="0">
管理者権限:<input type="checkbox" name="kanri_flg" value="1">   ※管理者には☑する

inputタグのvalueの値は文字列(String)として渡される

はじめはvalueにtrue入れたりしてみたけど、どうも正しく渡してくれない。というかvar_dumpで確認するとString(4)と書いてある。
checkboxなので、真偽値(boolean)なのかと思っていたが、どうやら文字列(String)として扱われるらしい。

あとがき

HTMLの勉強中は気にかけなかったことも、PHPとの連携だと細かく見ていかなければいけない。
ちなみにcheckboxだとvalueは必須ではないらしい。