|
Perl/CGI研究室 'PERL-LABO' TOPへ |
戻る(History.Back) |
フォームに複数の入力がある場合、CGIプログラムにどのようにデータが送られてくるのか研究します。
途中、関数にして、ライブラリにして、パッケージにして…と ちょっと横道にそれましたが、フォームからのデータを受け取り、処理する方法の 研究はまだまだ終わっていないのでした (^^; ここから本題に戻ります。
ここまで、フォームから送られてきたデータをCGIプログラムで受け取る研究を してきました。でも送られてくるデータは1つの文字列だけでした。 HTMLでは、フォームに複数の入力を付けることができます。 テキストボックスを複数用意することもできるし、 テキストボックスとラジオボタンとかチェックボックスとか、 異なる種類のものを混ぜて使用することもできます。 そういう時は、CGIプログラムにどのようにデータが送られて、 CGIプログラムではどのようにそれを処理したらいいのか、研究します。
1つのデータが送られてきた場合を復習しておきましょう。 1つのデータだけの場合は、(フォームに付けた名前)=(入力された文字列)という形で データが送られてきたんでした。例えば次のように。
input1=text1
それじゃ、複数のデータが送られてきたときはどうなるか。早速実験してみましょう。
前回作ったCGIプログラムをそのまんま使います。
#!/usr/bin/perl require 'getformdata.pl'; print "Content-type: text/html\n"; print "\n"; $formdata = plab::getformdata(); print "formdata : $formdata";
package plab;
sub getformdata
{
local $formdata;
if ($ENV{'REQUEST_METHOD'} eq "GET") {
$formdata = $ENV{'QUERY_STRING'};
}
else {
read(STDIN, $formdata, $ENV{'CONTENT_LENGTH'});
}
return $formdata;
}
1;
実際に、どんなデータが送られてくるのか試してみればいいですよね。 既に作った、フォームデータを取得するCGIプログラムを使って、 複数のデータが送られてきたときのデータを画面に表示してみます。
テストのために次のようなフォームを使いましょう。 INPUTタグを2つ使ってテキストボックスを2つ作り、 それぞれにinput1、input2という名前を付けました。
<form action=getformdatatest.cgi target=_blank method=get> input1 <input size=70 type=text name="input1" value="text1"><br> input2 <input size=70 type=text name="input2" value="text2"> <input type=submit value="送信"> </form>
それではこの送信ボタンを押してみてください。 ブラウザから送られたデータが画面に表示されます。 テキストは自由に変更してOKです。
結果、CGIプログラムに送られたデータは次のようなものでした。
input1=text1&input2=text2
データが1つの場合、「(フォームに付けた名前)=(入力された文字列)」でしたが、 これが、& でつながって送られてきていますね! 複数のデータをCGIプログラムに送った場合、このように、& を使ってデータが つながってるんですね。で、データには、ここでのinput1、input2のように自分で自由に 名前を付けられますから、この名前でデータを区別すればいいんですね。なるほど〜
入力が3個の場合は、次のようになりました。
input1=text1&input2=text2&input3=text3
入力が増えると、こうやってデータがつなげられて送られてくるわけです。 データが何十個あっても、同じように1つの文字列として送られてきます。 これで、入力の数に関係なく、データの受け取りができることがわかりましたし、 送られてくるデータの形式も分かりました!
今回の研究はこれで終わり。CGIプログラムは 前回作ったものをそのまま使用しましたし、簡単でした!
「(フォームに付けた名前)=(入力された文字列)」とか、 「(フォームに付けた名前)=(入力された文字列) & (フォームに付けた名前)=(入力された文字列)」とか、 確かにデータは受け取ることができましたね。 これで、フォームからのデータ受信はバッチリ? いやいや、受け取ったデータをどうやって利用したらいいのかわかっていません。 受け取ったデータ、この後どう処理したらいいんでしょう?というのを、次回は研究したいと思います。
|
Perl/CGI研究室 'PERL-LABO' TOPへ |
戻る(History.Back) |
| Copyright (c) 'PERL-LABO' All Rights Reserved. リンクフリーです。 |