HTMLフォームのチェックボックスがオフの場合、パラメータ自体が送られない。しかしチェックしていない時に何らかの値を取得したい場合がある。
Ruby on Railsではチェックボックスがオフの場合の値を取得する事ができる。Railsのフォームへルパを使ってチェックボックスを生成すると、以下のようなHTMLが生成される。
<input type="checkbox" name="hoge" value="a"><input type="hidden" name="hoge" value="b">
チェックボックスをオンにすると hoge=a&hoge=b というリクエストパラメータが送信される。Railsは同じ名前のパラメータが複数あると最初の値を使うので hoge の値は a となる。オフにすると hidden の値のみが送信されるので hoge=b というリクエストパラメータになり、hoge の値は b となる。
さて、PHPでチェックボックスオフの場合にパラメータ値が欲しくなった。PHPの $_GET や $_POST は同じ名前のパラメータがあった場合、Railsとは逆に最後の値を返すようだ。だが、この挙動はPHPマニュアルに仕様として書かれているものではない。
ところでPHP版Railsとも言えるCakePHPにもフォームへルパが存在しており、
<input type="hidden" name="hoge" value="b"><input type="checkbox" name="hoge" value="a">
というHTMLを生成してチェックオフの値を取っているようだ。ケーキがやってるなら問題なかろうと思って、この動作を利用することにした。