form#enctype

ファイルを送信する場合は、enctype属性で"multipart/form-data"を指定しないといけない。

HTMLタグ/フォームタグ/送信時のデータ形式を指定する - TAG index

form.htmlで、

として、

最初はこの状態
最初はこの状態

最初はこの状態。
"ファイルを選択"ボタンをクリックし、

前回と同じこのファイルを選択
前回と同じこのファイルを選択

前回と同じこのファイルを選択。

セットされた状態でsubmit
セットされた状態でsubmit

セットされた状態でsubmitを押す。

サーバはこのように受け取っている。ファイルの中身をちゃんと受け取ってる。
サーバはこのように受け取っている。ファイルの中身をちゃんと受け取ってる。

サーバはこのように受け取っている。ファイルの中身をちゃんと受け取ってる。

Sample/html/form/enctype/src/form at master · bg1bgst333/Sample · GitHub

input#type(file)

inputタグのtype属性に"file"を指定すると、ファイルを選択できる。

<input> - フォーム部品:入力欄 - とほほのWWW入門

input.htmlで、

このように"type=file"と"type=submit"を組み合わせると、ファイルをアップロードできるらしい。

「ファイルを選択」を押すと
「ファイルを選択」を押すと

「ファイルを選択」を押すと、

ファイル選択ダイアログが出てくるのでこれを指定
ファイル選択ダイアログが出てくるのでこれを指定

ファイル選択ダイアログが出てくるのでこれを指定。

中身はこういうシンプルなテキストファイル
中身はこういうシンプルなテキストファイル

中身はこういうシンプルなテキストファイル。

選択後はこうなってる
選択後はこうなってる

選択後はこうなってる。
これでsubmitを押すと、

CGI側にはファイル名しか来ていない
CGI側にはファイル名しか来ていない

CGI側にはファイル名しか来ていない。
何かが足りない模様。

Sample/html/input/type_file/src/input at master · bg1bgst333/Sample · GitHub

form#method(POST)

method属性がPOSTだと、URLにクエリ文字列は付かず、リクエストボディにクエリ文字列が書き込まれる。

<form> - フォーム - とほほのWWW入門

form.htmlで、

とすると、

最初この状態でsubmitを押すと
最初この状態でsubmitを押すと

最初この状態でsubmitを押すと、

query_stringのほうが空なのに対し、リクエストボディにクエリ文字列が来てる。
query_stringのほうが空なのに対し、リクエストボディにクエリ文字列が来てる。

query_stringのほうが空なのに対し、リクエストボディにクエリ文字列が来てる。

Sample/html/form/method_POST/src/form at master · bg1bgst333/Sample · GitHub

form#method(GET)

method属性でGETの時には、inputタグのname属性がキー、value属性が値となり、クエリ文字列として渡される。

<form> - フォーム - とほほのWWW入門

form.htmlで、

こう書く。
action.cは、

クエリ文字列は環境変数で取得、リクエストボディは標準入力で読み込む。

この状態からsubmitを押す
この状態からsubmitを押す

この状態からsubmitを押す。

GETなのでURLにクエリ文字列が付く
GETなのでURLにクエリ文字列が付く

GETなのでURLにクエリ文字列が付く。
そして、クエリ文字列は取得できるが、GETはリクエストボディがないので、そちらは空。

Sample/html/form/method_GET/src/form at master · bg1bgst333/Sample · GitHub

form#method

method属性でリクエストメソッドを変えられる。

<form> - フォーム - とほほのWWW入門

form.htmlで、

<html>
  <head>
    <title>form#method</title>
  </head>
  <body>
    <script type="text/javascript">
    <!--
    // -->
    </script>
    <form action="/cgi-bin/action.cgi">
      <input type="submit" value="submit">
    </form>
  </body>
</html>

何も指定してないと、

submitボタンを押した時
submitボタンを押した時

submitボタンを押した時、

ここに飛ぶが
ここに飛ぶが

ここに飛ぶが、この時のリクエストは、access_logを見ると、

GETメソッド
GETメソッド

GETメソッド。

method属性で"POST"を指定すると、

ここからsubmitを押された時
ここからsubmitを押された時

ここからsubmitを押された時、

こうなって
こうなって

こうなって、

POSTメソッドになってる
POSTメソッドになってる

POSTメソッドになってる。

Sample/html/form/method/src/form at master · bg1bgst333/Sample · GitHub

form#action

前回CGIのURLと書いてしまったが、action属性は、正確にはリクエストの送り先ページのURLなので、PHPでも可能。

<form> - フォーム - とほほのWWW入門

form.htmlを、

こうして、action.phpを、

こうすると、

この状態でsubmitを押すと
この状態でsubmitを押すと

この状態でsubmitを押すと、

action.phpに飛ぶ
action.phpに飛ぶ

action.phpに飛ぶ。
ここには載せないけど、HTMLページを指定しても同様に飛んだ。

Sample/html/form/action/src/form at master · bg1bgst333/Sample · GitHub

form

inputタグのtype属性で"submit"にした場合、formタグで囲み、action属性にCGIのURLを指定することで、CGIを実行できる。

<form> - フォーム - とほほのWWW入門

form.htmlは、

formのactionに実行するCGIのURLを指定。
このaction.cgiは、

こういう内容。

最初こうだけど
最初こうだけど

最初こうだけど、submitボタンを押すと、

action.cgiに切り替わる
action.cgiに切り替わる

action.cgiに切り替わる。

Sample/html/form/form/src/form at master · bg1bgst333/Sample · GitHub