目次

CGI.pmで同名のパラメタを複数受け取る

2009年05月23日 02時42分15秒

CGI.pmでCGI書き直しをやった際のメモ。 頚の痛みが和らいでいるうちに残しておく。薬切れたらまた痛みが襲ってくるはずだしorz

サンプル

CGI→url_param() と CGI→param() を使い分け出来ればよい。

URL及びフォームに同名パラメタが複数ある例

ccc.html

ccc.html
<HTML>
<HEAD>
 <TITLE>test form</TITLE>
</HEAD>
<BODY>
 <FORM METHOD="POST" ACTION="ccc.cgi?DATA=123&DATA=789">
   <INPUT TYPE="hidden" NAME="DATA" VALUE="ABC"/>
   <INPUT TYPE="hidden" NAME="DATA" VALUE="XYZ"/>
   <INPUT TYPE="submit" VALUE="Send"/>
 </FORM>
</BODY>
</HTML>

ccc.cgi(Perlのコード)

ccc.cgi
#!/usr/bin/perl
use CGI;
 
 
my $cgi = CGI->new();
my @getval  = $cgi->url_param('DATA');
my @postval = $cgi->param('DATA');
 
print "Content-Type: text/plain; charaset=euc-jp\r\n";
print "\r\n";
 
print $getval[0] . "\r\n";
print $getval[1] . "\r\n";
print $postval[0] . "\r\n";
print $postval[1] . "\r\n";

これをサーバに配置して ccc.html を表示し、submiボタンを押す。 結果は

123
789
ABC
XYZ

となり、URLに追加されたパラメタ、フォームに追加されたパラメタ、いずれも識別して取得が可能となる。

フォームに限定して、同名パラメタが複数ある例

ddd.html

ddd.html
<HTML>
<HEAD>
 <TITLE>test form</TITLE>
</HEAD>
<BODY>
 <FORM METHOD="POST" ACTION="ddd.cgi?DATA=123&DATA=789">
   <INPUT TYPE="hidden" NAME="DATA" VALUE="ABC"/>
   <INPUT TYPE="hidden" NAME="DATA" VALUE="XYZ"/>
   <INPUT TYPE="submit" VALUE="Send"/>
 </FORM>
</BODY>
</HTML>

ddd.cgi(Perlのコード)

ddd.cgi
#!/usr/bin/perl
use CGI;
 
 
my $cgi = CGI->new();
my @val  = $cgi->param('DATA');
 
print "Content-Type: text/plain; charaset=euc-jp\r\n";
print "\r\n";
 
print $val[0] . "\r\n";
print $val[1] . "\r\n";
print $val[2] . "\r\n";
print $val[3] . "\r\n";

これをサーバに配置して ddd.html を表示し、submiボタンを押す。 結果は

ABC
XYZ

となり、フォームのパラメタのみ取得が可能となる。

URLに限定して、同名パラメタが複数ある例

eee.html

eee.html
<HTML>
<HEAD>
 <TITLE>test form</TITLE>
</HEAD>
<BODY>
 <FORM METHOD="POST" ACTION="eee.cgi?DATA=123&DATA=789">
   <INPUT TYPE="hidden" NAME="DATA" VALUE="ABC"/>
   <INPUT TYPE="hidden" NAME="DATA" VALUE="XYZ"/>
   <INPUT TYPE="submit" VALUE="Send"/>
 </FORM>
</BODY>
</HTML>

eee.cgi(Perlのコード)

eee.cgi
#!/usr/bin/perl
use CGI;
 
 
my $cgi = CGI->new();
my @val  = $cgi->url_param('DATA');
 
print "Content-Type: text/plain; charaset=euc-jp\r\n";
print "\r\n";
 
print $val[0] . "\r\n";
print $val[1] . "\r\n";
print $val[2] . "\r\n";
print $val[3] . "\r\n";

これをサーバに配置して eee.html を表示し、submiボタンを押す。 結果は

123
789

となり、URLのパラメタのみ取得が可能となる。