フォームについての基礎事項のさいごに,フォームデータの処理について簡単に述べておこう。
同じフォームでも,条件によってコントロールを無効化してデータを送らないようにしたり,データを固定して書き換えを許可しないようにしたりする場面がでてくることがある。これらをコントロールするのに,次の 2 つの属性がある。
属性 | 値 | 解説 |
---|---|---|
DISABLED | ブール値 | フォームコントロールを無効化する。データは送られない。 |
READONLY | ブール値 | フォームコントロールを操作させない。データは送られる。 |
DISABLED 属性は <BUTTON>,<INPUT>,<OPTGROUP>,<OPTION>,<SELECT>,<TEXTAREA> に指定できる。<OPTGROUP>,<OPTION> に指定した場合は選択肢あるいはそのグループを無効化する。無効化されたコントロールはフォーカスを得ることができない。
いっぽう READONLY 属性は TYPE 属性を text または password に設定した <INPUT> と,<TEXTAREA> に指定できる。書き換えができないだけでフォーカスは得ることができる。
しかし,これを HTML に書いただけではコントロールは永続的に無効化されてしまう。ここで,スクリプトが用いられるのである。
このような場合に,スクリプトで DISABLED,READONLY 属性をダイナミックに変えるということが考えられる。
入力されたフォームのデータは,<FORM> の ACTION 属性で示された URI に ENCTYPE 属性の MIME タイプで送られるわけだが,その処理について簡単に述べておく。
データを送るフォームコントロールは,
の条件を満たしていることが必要である。ただし,リセットボタンはデータを送れない(送りようがない)。
データが送られる形式は個別に述べておいたが,一般には NAME と VALUE の組である。ただし,リストボックスの場合は VALUE は選択された <OPTION> の持つ値である。
有効なフォームからデータが集められると,それらは ENCTYPE 属性の値にしたがってエンコードされる。
application/x-www-urlencoded は ENCTYPE 属性の既定値であるが,これはある http: を冠する URI に METHOD="get" で働きかけるときによく用いられる。サーチエンジンがよくこの方法を採る。
このとき,フォームデータは URI に疑問符 ? をつけてそれに続けて渡されるが,このとき URI に用いることができる文字に関する制約で,次のようなエンコードが行われる。
たとえば,
<P>text1: <INPUT TYPE="text" NAME="text1" VALUE="Academic HTML">
<INPUT TYPE="checkbox" NAME="check1" VALUE="on" CHECKED> check1<BR>
<INPUT TYPE="radio" NAME="radio1" VALUE="op1"> op1
<INPUT TYPE="radio" NAME="radio1" VALUE="op2" CHECKED> op2
<INPUT TYPE="radio" NAME="radio1" VALUE="op3"> op3<BR>
text2: <INPUT TYPE="text2" NAME="text2" VALUE="HTML & CSS"></P>
で生成されるフォーム
これを,そのまま送信すると,? 以下は,
?text1=Academic+HTML&check1=on&radio1=op2&text2=HTML+%26+CSS
のようになるはずである。
multipart/form-data は METHOD="post" で働きかけるとき,とくにファイルのアップロードを伴う場合によく用いられる形式である。
multipart というだけに,その中にはいくつかの異なる MIME タイプのデータを混在させることが可能である。それぞれのデータは“区切り符号”で区切られる。
ひじょうに大ざっぱな解説だが,これ以上は本稿の範疇を出るので,詳しくは CGI に関連した書籍やサイトを参考にされるとよいだろう。
重ねて注意しておくが,フォームを用いたインタラクティブなサイトを構築するにあたっては,つねに相手側からデータが入ってきて,それを処理するに際してのセキュリティ上の問題を気にとめておく必要がある。