Perl/CGI研究室 'PERL-LABO'

Perl/CGI研究室 'PERL-LABO' TOPへ
戻る(History.Back)

複数の入力の場合の研究

研究内容

フォームに複数の入力がある場合、CGIプログラムにどのようにデータが送られてくるのか研究します。

詳細

途中、関数にして、ライブラリにして、パッケージにして…と ちょっと横道にそれましたが、フォームからのデータを受け取り、処理する方法の 研究はまだまだ終わっていないのでした (^^; ここから本題に戻ります。

送られてくるデータの数

ここまで、フォームから送られてきたデータをCGIプログラムで受け取る研究を してきました。でも送られてくるデータは1つの文字列だけでした。 HTMLでは、フォームに複数の入力を付けることができます。 テキストボックスを複数用意することもできるし、 テキストボックスとラジオボタンとかチェックボックスとか、 異なる種類のものを混ぜて使用することもできます。 そういう時は、CGIプログラムにどのようにデータが送られて、 CGIプログラムではどのようにそれを処理したらいいのか、研究します。

1つのデータが送られてきた場合

1つのデータが送られてきた場合を復習しておきましょう。 1つのデータだけの場合は、(フォームに付けた名前)=(入力された文字列)という形で データが送られてきたんでした。例えば次のように。

input1=text1

それじゃ、複数のデータが送られてきたときはどうなるか。早速実験してみましょう。

使用したCGIプログラム

前回作ったCGIプログラムをそのまんま使います。

getformdatatest.cgi
#!/usr/bin/perl

require 'getformdata.pl';

print "Content-type: text/html\n";
print "\n";

$formdata = plab::getformdata();
print "formdata : $formdata";
getformdata.pl
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です。

input1
input2

結果、CGIプログラムに送られたデータは次のようなものでした。

input1=text1&input2=text2

データが1つの場合、「(フォームに付けた名前)=(入力された文字列)」でしたが、 これが、& でつながって送られてきていますね! 複数のデータをCGIプログラムに送った場合、このように、& を使ってデータが つながってるんですね。で、データには、ここでのinput1、input2のように自分で自由に 名前を付けられますから、この名前でデータを区別すればいいんですね。なるほど〜

入力が3個の場合は、次のようになりました。

input1=text1&input2=text2&input3=text3

入力が増えると、こうやってデータがつなげられて送られてくるわけです。 データが何十個あっても、同じように1つの文字列として送られてきます。 これで、入力の数に関係なく、データの受け取りができることがわかりましたし、 送られてくるデータの形式も分かりました!

今回の研究はこれで終わり。CGIプログラムは 前回作ったものをそのまま使用しましたし、簡単でした!

考察

受け取ったデータをどう処理するか…

「(フォームに付けた名前)=(入力された文字列)」とか、 「(フォームに付けた名前)=(入力された文字列) & (フォームに付けた名前)=(入力された文字列)」とか、 確かにデータは受け取ることができましたね。 これで、フォームからのデータ受信はバッチリ? いやいや、受け取ったデータをどうやって利用したらいいのかわかっていません。 受け取ったデータ、この後どう処理したらいいんでしょう?というのを、次回は研究したいと思います。

分かったこと

  1. フォームに複数の入力がある場合、CGIプログラムには「名前=値」というのが データの数だけ「&」でつながった文字列が送られてきます。 例えば2個の場合は「input1=text1&input2=text2」、 3個の場合は「input1=text1&input2=text2&input3=text3」となります。
Perl/CGI研究室 'PERL-LABO' TOPへ
戻る(History.Back)

Copyright (c) 'PERL-LABO' All Rights Reserved.  リンクフリーです。