|
CGI 作成の初歩 |
|
12. フォームから入力された値を表示する |

フォームからの入力を受け取る場合 split を使用して文字を区切るので、
まずは split を使った文字列の区切り方を説明します。
= (イコール) を区切り文字として、その前後に分けるやり方です。
ここではイコール記号を区切り文字としていますが、他の文字でも同様に行えます。
文字列中の = 部分で区切り、用意された変数に先頭から順に値が入っています。
【書式】
(変数1,変数2,変数3・・・) = split (/区切り文字/, 対象の変数)
例 変数 $string に入っている文字列を & で区切って $aaa $bbb $ccc に入れる
($aaa,$bbb,$ccc) = split (/&/,$string);

次にフォームから CGI に何らかの値を送信し、それをそのまま画面表示してみます。
フォームから直接受け取ったデータはどのようになっているのでしょうか?
下のようなフォームを使って、CGI に選択されたボタンのデータを送ってみます。
|
ラジオボタン1の名前は sentaku 送信する値は 1
ラジオボタン2の名前は sentaku 送信する値は 2
ラジオボタン3の名前は sentaku 送信する値は 3
送信メソッドは POST
送信先は サンプルのCGI へ
|
フォームの例は以下のようになっています。
送信先の CGI のソースは以下のようになっています。
実行結果 |
sentaku=1&submit=%91%97%90M%82%B7%82%E9 |
実行結果で表示された内容は以下のようになっています。
日本語部分がURLエンコードされ記号になっていますが、フォームからの入力を
受け取れた事が分かると思います。
フォーム要素1=要素1の値&送信ボタン=送信ボタンの値
これのフォーム要素を増やしていくと、下のように受け取れます。
フォーム要素1=要素1の値&フォーム要素2=要素2の値&フォーム要素3=要素3の値&・・・・送信ボタン=送信ボタンの値
フォームでつけた name と、その値が イコール(=) でつながれ、それぞれの要素が & で区切られているのが分かると思います。

POST メソッドで送信されたデータを read(STDIN, $formin, $ENV{'CONTENT_LENGTH'});
の部分で、
送信された長さ分 ( $ENV{'CONTENT_LENGTH'} ) 標準入力から読み込み、変数
$formin に入れています。
これが GETメソッドの場合の内容は $ENV{'QUERY_STRING'} に格納されていますので、その内容を直接
split で
区切り、各変数へ格納すれば結構です。
|
受け取ったデータを使えるようにする |

この項の先頭で紹介した split を使い、受け取ったデータを使える形にします。
ここでは区切る為の split 区切った値を格納する 連想配列 それらの処理を要素
の数だけ繰り返す foreach を使って行いますので、下のイメージと見比ながら
順に処理を追って見てみましょう。

入力するフォームは先の手順で使ったフォームを使いますが、この方法で行えば
フォームの要素が増えても、同じように扱う事ができます。
下のサンプルソースでは各処理の右側に、どのような処理を行っているかのコメントを
入れてありますので、それも参考にしながら処理を追ってみてください。
実行結果 |
1 %91%97%90M%82%B7%82%E9 |
受け取ったデータをフォーム要素の名前を使った連想配列によりアクセスできる状態になりました。
これが出来れば、フォームからの送信により CGI 側で処理を分けたりする事ができます。
|
このフォームからの受け取りは難しそうに思えますが、実際に個々で行っている
処理自体は簡単なものですので、どのデータがどこにあるのか、又連想配列の
使い方に注意して流れを見て下さい。
次項はファイルに書き出す処理を行ってみます。 |
 |
|
|
|