GET、POSTパラメータの取得

GETパラメータとPOSTパラメータの同時取得可能。しかし同名の場合は片方が無効となる

test06a.cgi

#!"C:/Perl64/bin/perl.exe"
 
use strict;
use warnings;
 
print "Content-Type: text/html\n\n";
 
# タイトル
my $title = "テストタイトル";
my $data = "テスト Hello World";
 
print <<HTML_EOF;
<html>
	<head>
		<title>$title</title>
	</head>
	<body>
		<div>
			$data
		</div>
		<hr />
		<form action="./test06b.cgi?xxx=111&yyy=222&zzz=333" method="post">
			<div>
				ccc=<input type="text" name="ccc" value="" /><br />
				ddd=<input type="text" name="ddd" value="" /><br />
			</div>
			<br />
			<input type="submit" value="OK" />
		</form>
		<hr />
	</body>
</html>
HTML_EOF
 
 
 

HTML結果

<html>
	<head>
		<title>テストタイトル</title>
	</head>
	<body>
		<div>
			テスト Hello World
		</div>
		<hr />
		<form action="./test06b.cgi?xxx=111&yyy=222&zzz=333" method="post">
			<div>
				ccc=<input type="text" name="ccc" value="" /><br />
				ddd=<input type="text" name="ddd" value="" /><br />
			</div>
			<br />
			<input type="submit" value="OK" />
		</form>
		<hr />
	</body>
</html>
 
 

test06b.cgi

#!"C:/Perl64/bin/perl.exe"
 
use strict;
use warnings;
 
sub get_params{
	# パラメータを取得
	my ($_hash) = @_;
 
    # 取得したパラメータをハッシュ型配列へ設定
    my %list;
    my @params = split /&/, $_hash;
    foreach my $var(@params){
        # キーとデータを分割
        my ($key, $value) = split(/=/, $var);
        $list{$key} = $value;
    }
 
	# 返却
	return %list;
}
 
print "Content-Type: text/html\n\n";
 
# GETパラメータ取得
my $_get = $ENV{'QUERY_STRING'};
 
# POSTパラメータ取得
my $_post = <>;
 
my %_list1 = get_params($_get);
my %_list2 = get_params($_post);
 
# タイトル
my $title = "テストタイトル";
my $data = "テスト Hello World";
 
print <<HTML_EOF;
<html>
	<head>
		<title>$title</title>
	</head>
	<body>
		<div>
			$data
		</div>
		<hr />
		<div>
			get =$_get <br />
			post=$_post<br />
		</div>
		<hr />
HTML_EOF
 
print "<hr />";
while(my ($key, $value) = each(%_list1)){
    print "$key=$value<br />";
}
 
print "<hr />";
while(my ($key, $value) = each(%_list2)){
    print "$key=$value<br />";
}
print <<HTML_EOF;
	</body>
</html>
HTML_EOF
 
 
 

HTML結果

<html>
	<head>
		<title>テストタイトル</title>
	</head>
	<body>
		<div>
			テスト Hello World
		</div>
		<hr />
		<div>
			get =xxx=111&yyy=222&zzz=333 <br />
			post=ccc=3333333&ddd=4444444<br />
		</div>
		<hr />
<hr />xxx=111<br />yyy=222<br />zzz=333<br /><hr />ccc=3333333<br />ddd=4444444<br />	</body>
</html>
 
 

画面結果

test06a.cgiで開きSubmitする

test06b.cgiで確認する



最終更新:2012年01月16日 22:50