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 編資料