例)
HTMLテンプレート(filename.cgi)の中身は、以下の様に書ける。
<SSM FUNCTION="check_ip" MODE="begin"> <SSM MODE="end"> <HTML> <HEAD> <TITLE>SSM サンプルファイル - CGI</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF"> <H1>SSM サンプルファイル - CGI</H1> <H2>書き方のルール</H2> (以下省略) |
スクリプトファイル側(filename.pl)には以下のように関数を定義しておく。
sub check_ip($$$){
local (%main::SIG); $SIG{'TERM'} = $SIG{'CHLD'} = $SIG{'KILL'} = $SIG{'INT'} = \&signalhandler; my ($ssmstr, $queryref, $paramref) = @_; if ($main::ENV{'REMOTE_ADDR'} =~ /^10\.0\./){ print "Content-type: text/html; charset=EUC_JP\n\n"; } else { print "Location: http://somehost.mydomain.com/error.html\n\n"; } } |
REMOTE_ADDR 環境変数の値が "10.0." で始まればページのコンテンツを表示し、そうでなければ別のロケーション( http://somehost.mydomain.com/error.html )に移動する。
フォームから入力された値をチェックし、決められた形式でなかった場合、エラーメッセージとともにフォームページを返す。
送信元フォームでは、表示実行時に、エラーメッセージがセットされていたらそれを表示する処理を行う。
<FONT COLOR="#CC0000"> <SSM FUNCTION="check_value" MODE="begin">%_errormsg_%<SSM MODE="end"> </FONT> <FORM ACTION="sample_cgi_exe.cgi" METHOD="get"> 数字を入力してください:<INPUT TYPE="text" NAME="string" VALUE=""><BR> <INPUT TYPE="submit" VALUE="色々な値を入力してチェック"> </FORM> |
sub check_value($$$){
local (%main::SIG); $SIG{'TERM'} = $SIG{'CHLD'} = $SIG{'KILL'} = $SIG{'INT'} = \&signalhandler; my ($ssmstr, $queryref, $paramref) = @_; if ($$queryref->Vars->{'errormsg'}){ $ssmstr =~ s/%_errormsg_%/$$queryref->Vars->{'errormsg'}/eg; print $ssmstr; } return 1; } |
送信先CGIでは、送信された値が条件に合っていれば送信先ページを表示(ヘッダを送信)、条件に合わなければ、エラーメッセージを添えてもとのフォームページを表示する処理を行う。
<SSM FUNCTION="check_input" MODE="begin"><SSM MODE="end"> <HTML> <HEAD> <TITLE>SSM サンプルファイル - CGI - 入力値の確認</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF"> <H1>SSM サンプルファイル - CGI - 入力値の確認</H1> <P> 送信された値は <SSM ACTION="once" FUNCTION="Ssm::Common::printvalue" MODE="begin"> <BLOCKQUOTE>%_string_%</BLOCKQUOTE> <SSM MODE="end"> です。 </P> (以下省略) |
sub check_input($$$){
my ($ssmstr, $queryref, $paramref) = @_; unless ($$queryref->Vars->{'string'} =~ /^\d+$/){ #エラーを示す値をクエリーにセット $$queryref->Vars->{'errormsg'} = '入力値 ['.$$queryref->Vars->{'string'}.']:数字を入力してください。'; #元のページに戻る &Ssm::Common::go_and_exit('sample_cgi.html', $queryref); } else { #エラーが無い場合は、ページの表示を行う print "Content-type: text/html; charset=$main::charset\n\n"; } } |