form要素 -- 入力フォーム

基本データ

form要素
文書型 適用 子要素 開始タグ 終了タグ 分類
Strict ブロックレベル要素 script要素(form要素を除く) 必須 必須 ブロックレベル要素
Transitional インライン要素 ブロックレベル要素(form要素を除く)
Frameset

属性

固有属性

action="データ送信先のURI"(必須)
Strict: ○ | Transitional: ○ | Frameset: ○
フォームのデータを処理するプログラムのURIを指定します。この属性は必ず記述しなければいけません。
name="フォームの名前"
Strict: ○ | Transitional: ○ | Frameset: ○
スクリプトからフォームを参照するための名前をつけます。名前に使える文字は英数字のみです。この属性は後方互換のために残されており、名前はid属性でつけることが推奨されています。
method="データの送信方法"
Strict: ○ | Transitional: ○ | Frameset: ○
フォームのデータを送信する方法を指定します。利用できる値は次のとおりです。
get
action属性で指定されたURIの後に「?」を加え、その後ろにフォームのデータをつなげます。<a href="sample.cgi?var=120">のように記述したリンクにアクセスしても同じ動作をします。大量のデータだと途中までしか送信できないことがあります。
post
フォームのデータを本文として送信します。
enctype="MIMEタイプ"
Strict: ○ | Transitional: ○ | Frameset: ○
送信するデータのMIMEタイプを指定します。デフォルトではapplication/x-www-form-urlencodedです。フォームにtype="file"となっているinput属性を含むときはmultipart/form-dataにする必要があります。
accept-charset="文字コード"
Strict: ○ | Transitional: ○ | Frameset: ○
プログラムが処理できる文字コードを指定します。スペースで区切って複数指定することができます。
accept="MIMEタイプ"
Strict: ○ | Transitional: ○ | Frameset: ○
プログラムが処理できるMIMEタイプをカンマで区切って指定します。例えば、<input type="file">を設置し利用者に画像を送信してもらうとき、accept="image/png,image/jpeg,image/gif"と指定します。利用者が指定された形式以外のファイルを送信しようとしたときに、ブラウザが警告を出すといった動作が期待されます。
target="フレーム名"(非推奨)
Strict: × | Transitional: △ | Frameset: △
フォームの送信結果を表示するフレーム名を指定します。この属性は非推奨です。

解説

ボタン、テキストボックス、チェックボックスなどの入力フォームをグループにまとめ、それらに入力されたデータを送信するための要素です。主にCGIプログラムにデータを送信するために使われます。Strict DTDでは子要素にブロック要素しか含むことができないことに注意してください。form要素直下にボタンやテキストボックスを配置することはできません。(Transitional DTDなら可能です。)

action属性に送信されたデータを処理するプログラムのURIを記述します。form要素にはaction属性が必ず必要です。一般に、送信されたデータをサーバ側のプログラムが処理し、その結果をクライアント側に返します。

method属性にはフォームのデータを送信するときに、どのHTTPメソッドを使うかを指定します。省略時の値は「get」ですが、大量のデータを送信しようとしたときに、内容が途中で途切れてしまう可能性があることに注意してください。「post」ならその心配はありません。

form要素の子要素に<input type="file">を含む時は、enctype="multipart/form-data"を指定する必要があります。

<form action="sample.cgi" method="get">
  <p>
    <label>名前:<input type="text" name="name"></label><br>
    <label>E-mail:<input type="text" name="mail"></label><br>
    <label>本文:<br><textarea rows="10" cols="30" name="body"></textarea></label><br>
    <input type="submit" value="送信">
  </p>
</form>




フォームの送信

フォームのデータは次のような手順で送信されます。

  1. データを送信する部品の決定

    最初に、どのフォームの部品のデータを送信するかを決定します。名前と値を両方持つものがデータとして送信されます。

    • テキストボックスの名前(name属性)と値(テキストボックスの内容)
    • オンになっているチェックボックスの名前(name属性)と値(value属性)
    • name属性を共有するラジオボタンのうち、オンになっているものの名前(name属性)と値(value属性)
    • メニューリストのうち選択されているものがあれば、select要素の名前(name属性)とoption要素の値(value属性、value属性がなければoption要素の中身)
    • 隠しコントロールの名前(name属性)と値(value属性)
    • ファイル選択コントロールの名前(name属性)と値(テキストボックスの内容)
    • 送信ボタンの名前(name属性)と値(value属性)

    次のような部品のデータは送信されません。

    • 名前(name属性)を持たない部品
    • 値を持たない部品
    • オフになっているチェックボックス・ラジオボタン
    • リセットボタン
  2. フォームデータのセット

    上の手順で判定されたフォームの部品を、名前と値のペアの組にします。

  3. エンコード

    form要素のenctype属性の値に従って、フォームデータをエンコードします。

    enctype="application/x-www-form-urlencoded"
    1. フォームデータの名前と値をエスケープします。アルファベットと英数字でない文字はアスキーコードとパーセント記号で「%HH」と置き換えられます。
    2. 名前と値を「=」で区切り、それら名前と値のペアを「&」でつなぎます。
    enctype="multipart/form-data"
    [RFC2045]のマルチパートMIME伝送の規則に従います。(説明は省略します。)
  4. データの送信

    エンコードされたデータをform要素のaction属性が示すURIへ送信します。method属性の値により、送信方法が異なります。

    method="get"
    action属性で示されたURIに「?」を加え、その後にエンコードされたデータをつなげます。「http://www.example.com/program.cgi?name1=value1&name2=value2…」のような形式になります。
    GET /program.cgi?name1=value1&name2=value2 HTTP/1.1
    Host: www.example.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1
    Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    Accept-Language: ja,en-us;q=0.7,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Referer: http://www.example.com/
    method="post"
    HTTPリクエストヘッダの後に、本文としてエンコードしたデータを送信します。
    POST /program.cgi HTTP/1.1
    Host: www.example.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1
    Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    Accept-Language: ja,en-us;q=0.7,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Referer: http://www.example.com/
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 25
    name1=value1&name2=value2

メールフォーム

action属性に「mailto:メールアドレス」とメールアドレスを指定することもできます。一般的なブラウザではOS標準のメールソフトが起動し、あて先(To:)の欄にaction属性で指定されたメールアドレスが入力されるようです。action属性のURIのスキームが「http」以外のときの動作は仕様書では未定義とされていますので、必ずしもこのとおりに動作するとは限りません。

<form action="mailto:elastic965@gmail.com?subject=MAIL%20TEST"
  method="post" enctype="text/plain">
  <p>
    本文:<br>
    <textarea rows="5" cols="40" name="message"></textarea><br>
    <input type="submit" value="送信">
  </p>
</form>

本文:

Strict DTDの定義

<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->
<!ATTLIST FORM
  %attrs;                              -- %coreattrs, %i18n, %events --
  action      %URI;          #REQUIRED -- server-side form handler --
  method      (GET|POST)     GET       -- HTTP method used to submit the form--
  enctype     %ContentType;  "application/x-www-form-urlencoded"
  accept      %ContentTypes; #IMPLIED  -- list of MIME types for file upload --
  name        CDATA          #IMPLIED  -- name of form for scripting --
  onsubmit    %Script;       #IMPLIED  -- the form was submitted --
  onreset     %Script;       #IMPLIED  -- the form was reset --
  accept-charset %Charsets;  #IMPLIED  -- list of supported charsets --
  >

Information

現在の位置