破棄されたブログ

このブログは破棄されました。

HTML におけるフォームの送信プロセスとチェックボックスについて

(X)HTML を長いこと触っているわりに、フォームとかインタラクティブな要素を使うことがあんまりなかった。というのも、フォームの値を受け取ってどうこうするようなモノを作って来なかったし、作ったとしてもそのときはJavaScript で処理していたから。
で、今チェックボックスの値をサーバ側で処理しなきゃいけなくなったんだけど、チェックボックスの値に "on" とか言うのが入っていて、いやそりゃ経験者からしてみりゃあたり前の値なんだろうけど、ぼくはなんだこれって思ったので W3C の仕様を調べてみた。

フォームの送信プロセス (HTML4.01)

1. successful なコントロール (successful controls) の判定

2. 送信するフォームデータセット (form data set) を構築

データセットというのは、successful なコントロールの name 属性の値(今の) value 属性の値のペアを配列(sequence) にしたもの。

3. データセットエンコード

FOMR 要素の enctype 属性に指定された content type でデータセットエンコードする。

4. エンコードされたデータセットを送信

FORM 要素の method 属性で指定されたメソッド(プロトコル)を使って、 action 属性で指定された処理プログラム (processing agent) へ送信する。

ついで言うと、ここで仕様化されているのは get と post の 2 メソッドだけで、ほかのメソッドに関しては知らないよ。(意訳)

successful なコントロールとは

successful なコントロールというのは何かというと、type 属性の値によって判断基準が変わるわけ。チェックボックスに限って言えばチェックが入れられている ("on") 時、successful なコントロールになる。

で、問題のチェックボックスで何が送信されるかというと、チェックボックスが "on" になっていた時のみ value 属性の値を送信する。
え、value 属性の値って具体的に何が入るのさって言うと、value 属性の値が入る。そもそも、チェックボックスラジオボタンは value 属性を省略しちゃいけない。だから、value 属性には、(X)HTML のコードを書いた時に自分で指定した値が入る。もしくは JavaScript とかで変更されていた場合その値が入る。
具体的に言うと

<input name="hoge" type="checkbox" value="fuga" checked>

というチェックボックスからは、hoge の値として fuga が送られてくる。
これを post で送信して PHP で受け取ったとすれば、$_POST の値は

array(1) {
["hoge"]=>
string(4) "fuga"
}

みたいな感じになる。はず。たぶん。

じゃあ具体的にどういう値を入れたらいいのかと言うと fuga を設定すれば fuga が送られてくるように、好きな値を入れたらいい。ただ、CDATA だからそこには注意。あと大文字小文字は区別される。
ちょうど開いていた facebook なんかを見てみたら value="1" だった。まあそんなのが妥当なんじゃないかなあ。

というんなの当たり前だ知っとけボケナス情報。

広告を非表示にする