HTML Form チェックボックスが off の時の値

今更ながらに知ったことがあります。


HTML Form でチェックボックスを使うとき、off の時はデータが送信されない訳ですが、これではチェックボックスの on/off でサーバー側のデータの状態を変化させたい場合等で問題があります。つまり、チェックボックスが on の時は、'on' と、off の時は 'off' という値を送信して欲しいわけです。


こういう時、これまで僕は、javascript を使ったり、PHP スクリプト側で誤魔化したりしていたわけですが、そんなことはしなくても良かったんですね。


次のソースで解決っす。

<input type="hidden" name="completed" value="off" />
<input type="checkbox" name="completed" value="on" />


PHP の場合、同じ name 属性の時は、後の値が優先されるようです。つまり、チェックボックスが on の時は、後に書かれた checkbox の値 'on' が有効で、チェックボックスが off の時は、前の値の hidden の値 'off' が有効になるようです。


そういえば…と、PerlCGI を勉強したはるか昔を少し思い出しました。
PHP は http を良く隠蔽していますが、こういう事を思いつかなくなりますね。


ということで、こんなことを今更言っていると、ダメダメかしら?