SAK 図書館
CGI-Perl 応用実地編 - 簡易伝言板作成2 (投稿パラメタ引き取り)
■伝言投稿パラメタ引き取り
・投稿ボタンを押した後の、入力パラメタの引き取り処理を作ります。
・パラメタ取得 GetPara() 関数をコードの最後に追加します。
コード内容は、次のとおりです。
日本語の入力には、jcode.pl が別途必要です。
jcode.pl を、この cgi プログラムと同じ場所に置いて下さい。
#//=====================================================================
#// パラメタ取得
#//=====================================================================
sub GetPara
{
my($encode) = @_;
my($method) = $ENV{'REQUEST_METHOD'};
local($qu, @in, $key, $val);
#// 日本語コード変換 jcode.pl 読み込み
require 'jcode.pl' if $encode;
#// パラメタ取得
if ($method eq 'GET') {
$qu = $ENV{'QUERY_STRING'};
}
elsif ($method eq 'POST') {
read(STDIN, $qu, $ENV{'CONTENT_LENGTH'});
}
local(@qu) = split(/&/, $qu);
foreach (@qu) {
tr/+/ /;
($key, $val) = split(/=/);
$key =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack('c', hex($1))/ge;
$val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack('c', hex($1))/ge;
$val =~ s/\r\n/\n/g;
jcode'convert(*key, $encode) if ($encode);
jcode'convert(*val, $encode) if ($encode);
$in{$key} = $val;
}
#// 戻り値セット
return *in;
}
・投稿フォームから実際にパラメタを引き取るには、次のコードを
「#// 準備」の下に追加します。
パラメタ取得 GetPara() 関数を呼び出して、その結果を $data のハッシュ
変数に格納します。ハッシュ変数は、アクセスが面倒なので、その後に $md、
$hd、$ms にパラメタをセットしています。
このコードで、投稿時のみ $md が '1' に、「ハンドル」の入力データが
$hd に、「メッセージ」の入力データが $ms にセットされます。
#// パラメタ取得
*data = GetPara();
$md = $data{'md'};
$hd = $data{'hd'};
$ms = $data{'ms'};
・入力パラメタの引き取り確認として、パラメタの表示コードを追加します。
HTML 出力を分割して、フォーム表示の下で、入力されたハンドルとメッセ
ージを表示します。
#// HTML ボディ表示
print 'ハンドル= ', $hd, '<BR>';
print 'メッセージ= ', $ms, '<BR>';
・test2.cgi として全て修正したプログラムは、次のようになります。
「ハンドル」「メッセージ」に色々な文字列を入力して、投稿ボタンを押す
と、その下に入力データが表示されます。
#!/usr/local/bin/perl
#//=====================================================================
#// test2.cgi 簡易伝言板
#//=====================================================================
#// 準備
$title = '簡易伝言板';
$callcgi = 'test2.cgi';
#// パラメタ取得
*data = GetPara();
$md = $data{'md'};
$hd = $data{'hd'};
$ms = $data{'ms'};
#// HTML ヘッド表示
print << "END_OF_HTML";
Content-type: text/html
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE>$title</TITLE>
</HEAD>
<BODY>
<CENTER>
<P><B>◆ 簡易伝言板 ◆</B></P>
<FORM action="$callcgi" id=FORM1 method=post name=FORM1>
<INPUT TYPE="hidden" NAME="md" VALUE="1">
<TABLE bgcolor=#b0b0b0 border=0 cellPadding=3 cellSpacing=2>
<TBODY>
<TR bgcolor=#f0f0f0>
<TD nowrap><FONT size=-1>ハンドル</FONT></TD>
<TD nowrap><INPUT id=hd name=hd size="22" maxlength="40"></TD>
</TR>
<TR bgcolor=#f0f0f0>
<TD nowrap><FONT size=-1>メッセージ</FONT></TD>
<TD nowrap><INPUT id=ms name=ms size="62" maxlength="200"></TD>
</TR>
</TBODY>
</TABLE>
<BR>
<TABLE bgcolor=#b0b0b0 border=0 cellPadding=3 cellSpacing=2>
<TBODY>
<TR bgcolor=#f0f0f0>
<TD nowrap><INPUT id=submit1 name=submit1 type=submit value=" 投稿 "></TD>
<TD nowrap><INPUT id=reset1 name=reset1 type=reset value="リセット"></TD>
</TR>
</TBODY>
</TABLE>
</FORM>
END_OF_HTML
#// HTML ボディ表示
print 'ハンドル= ', $hd, '<BR>';
print 'メッセージ= ', $ms, '<BR>';
#// HTML テイル表示
print << "END_OF_HTML";
</CENTER>
</BODY>
</HTML>
END_OF_HTML
#// 終了
exit(0);
#//=====================================================================
#// パラメタ取得
#//=====================================================================
sub GetPara
{
my($encode) = @_;
my($method) = $ENV{'REQUEST_METHOD'};
local($qu, @in, $key, $val);
#// 日本語コード変換 jcode.pl 読み込み
require 'jcode.pl' if $encode;
#// パラメタ取得
if ($method eq 'GET') {
$qu = $ENV{'QUERY_STRING'};
}
elsif ($method eq 'POST') {
read(STDIN, $qu, $ENV{'CONTENT_LENGTH'});
}
local(@qu) = split(/&/, $qu);
foreach (@qu) {
tr/+/ /;
($key, $val) = split(/=/);
$key =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack('c', hex($1))/ge;
$val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack('c', hex($1))/ge;
$val =~ s/\r\n/\n/g;
jcode'convert(*key, $encode) if ($encode);
jcode'convert(*val, $encode) if ($encode);
$in{$key} = $val;
}
#// 戻り値セット
return *in;
}
■CGI-Perl 応用実地編資料
■CGI-Perl 基礎編資料
■CGI-Perl 基礎実地編資料
■PHP 基礎編資料
■PHP + MySQL 編資料