CGI::textfield(-value)

CGI::textfieldに-valueで初期値をセットする。

https://pointoht.ti-da.net/e6782591.html

form.cgiで、

-valueで'value1'をセット。
perlコマンドで、

$ perl form.cgi
Content-Type: text/html; charset=ISO-8859-1

<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>CGI::textfield(-value)</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<input type="text" name="" value="value1" />
</body>
</html>$

となり、ブラウザは、

こうなる
こうなる

こうなる。

Sample/perl/CGI/textfield__value/src/CGI at master · bg1bgst333/Sample · GitHub

CGI::textfield

HTMLでは、inputタグのtype=textでテキストフィールド(エディットボックス)を出していた。
PerlCGIモジュールでは、CGI::textfieldを使う。

https://pointoht.ti-da.net/e6782591.html

form.cgiで、

name必須って言うけど、無くてもエラーにはならない模様。
perlコマンドで、

$ vi form.cgi
$ perl form.cgi
Content-Type: text/html; charset=ISO-8859-1

<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>CGI::textfield</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<input type="text" name=""  />
</body>
</html>$

こうなる。

ブラウザならこうなる
ブラウザならこうなる

ブラウザならこうなる。

Sample/perl/CGI/textfield/src/CGI at master · bg1bgst333/Sample · GitHub

CGI::MULTIPART

マルチパートの場合は、CGI::MULTIPART。

https://pointoht.ti-da.net/e6734582.html

action.cgiは、

perlコマンドだと、

$ vi action.cgi
$ perl action.cgi
Content-Type: text/html; charset=ISO-8859-1

<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>CGI::MULTIPART</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<form method="post" action="http://localhost" enctype="multipart/form-data">
<input name="key1" value="value1">
<input name="key2" value="value2">
<input type="submit" value="submit">
</form>
</body>
</html>$
$

enctype="multipart/form-data"になってる。
POSTの"multipart/form-data"のボディ全読み込みはCGIで確認して無いので見てみる。

submitすると
submitすると

submitすると、

こうなる
こうなる

こうなる。

Sample/perl/CGI/MULTIPART/src/CGI at master · bg1bgst333/Sample · GitHub

CGI::URL_ENCODED

毎回、enctypeに'application/x-www-form-urlencoded'と打つのも大変なので、大抵は指定する時にCGI::URL_ENCODEDという定数を使う。

https://pointoht.ti-da.net/e6734582.html

(正確にはサブルーチンなのか・・・。)
action.cgiを、

こうする。
perlコマンドで確認。

$ vi action.cgi
$ perl action.cgi
Content-Type: text/html; charset=ISO-8859-1

<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>CGI::URL_ENCODED</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<form method="post" action="http://localhost" enctype="application/x-www-form-urlencoded">
<input name="key1" value="value1">
<input name="key2" value="value2">
<input type="submit" value="submit">
</form>
</body>
</html>$
$

enctype="application/x-www-form-urlencoded"が出力されてるので、CGIでの確認は省略。

Sample/perl/CGI/URL_ENCODED/src/CGI at master · bg1bgst333/Sample · GitHub

CGI::start_form(-action,-enctype)

start_formに-actionと-enctypeを指定した場合は、CGIが分かれるのでまだ楽。

CGI - Common Gateway Interface のリクエストとレスポンスを扱う - perldoc.jp

form.cgiが、

で、action.cgiが、

となる。

submitすると
submitすると

submitすると、

こうなる
こうなる

こうなる。

Sample/perl/CGI/start_form__action__enctype/src/CGI at master · bg1bgst333/Sample · GitHub

CGI::start_form(-enctype)

start_formに-enctypeだけ指定した場合をやる。
POSTのlocalhostのapplication/x-www-form-urlencoded。

CGI - Common Gateway Interface のリクエストとレスポンスを扱う - perldoc.jp

ちょっとこれは工夫が要る。
action.cgiを、

こうする。
CGI::paramはPOSTのパラメータも取得できるため、どちらにも使ってしまうと、受け側でPOSTリクエストのボディを読み込もうとしても、CGIモジュール側で既に読み込んでパースしてしまって、残ってないということがある。
なので、REQUEST_METHODで分けて、受け側はCGIモジュールを一切使わないようにしている。

submitすると
submitすると

submitすると、

受け側ではリクエストボディはこうなってる
受け側ではリクエストボディはこうなってる

受け側ではリクエストボディはこうなってる。

Sample/perl/CGI/start_form__enctype/src/CGI at master · bg1bgst333/Sample · GitHub

%ENV(REQUEST_METHOD)

$ENV{'REQUEST_METHOD'}で、リクエストのメソッドを取得できる。

フォームからの入力を受け取る処理の詳細解説 - Web Liberty

ENV.cgiを、

として、form.htmlを、

<html>
  <head>
    <title>ENV#ENV#REQUEST_METHOD</title>
  </head>
  <body>
    <script type="text/javascript">
    <!--
    // -->
    </script>
    <form method="GET" action="/cgi-bin/ENV.cgi">
      <input name="key1" value="value1">
      <input name="key2" value="value2">
      <input type="submit" value="submit">
    </form>
  </body>
</html>

GETにした場合は、

submitで
submitで

submitで、

GET
GET

GET。

POSTにした場合は、

submitで
submitで

submitで、

POST
POST

POST。

Sample/perl/ENV/ENV_REQUEST_METHOD/src/ENV at master · bg1bgst333/Sample · GitHub