■ CGI を起動する HTML のタグに
<FORM METHOD=POST ACTION="起動CGI名">
を記述する.入力フォームは, <INPUT TYPE="text" ....> または <TEXTAREA ....> のタグを使います.
■ 2つの入力を処理する CGI はこのようにします.
read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split (/&/,$buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
$source = $FORM{'source'};
$word = $FORM{'word'};
上の赤色の部分は,STDIN からのデータの読み込みを仮想変数として取り込む部分,その下の青い部分が,実際に HTML から変数に内容を入れ込む部分です.たとえば,HTML のフォームの方で,<INPUT TYPE="Text" NAME="test"> とした場合は,$test = $FORM{'test'} などとします.
■ 検索と結果表示部分に関してはこんな風にします.
print "Content-type: text/html\n\n";
print '<HTML><BODY>';
print '<FONT SIZE="3"><B>検索対象の「'."$word".'」は,</B></FONT><BR><BR><BLOCKQUOTE><FONT SIZE="2">';
@line = split (/\n/, $source);
$wcnt = 1;
foreach $linestr (@line) {
if ($linestr =~ /$word/i) {
print "$wcnt".'行目:'."$linestr".'<BR>';
}
$wcnt++;
}
print '</FONT></BLOCKQUOTE><B>にあります.</B><BR><BR>';
print '<A HREF="../search.html">前のページに戻る</A>';
print '</BODY></HTML>';
動的に HTML 文章を表示します.必ず1行目は記述してください.$word,$wcnt などの変数を表示するときはダブルクォーテーション(")でくくります.4行目は改行(\n)ごとに検索対象の文章を行分離して, @line 変数に入れます.5行目では検索単語の行数表示用変数 $wcnt を "1" にリセットします.6行目以降は @line 変数から,行分離した文を $linestr に順次入れ,{}の中の処理を行います.{}の中の if 文は $linestr の中に,検索対象となる単語 $word があるかどうかを調べる記述です.存在すればその行を表示します.
|