□Perl 講座 初級編 > 出力させてみよう

◆フォームを使ったデータを出力

実際に簡単なフォームから送られるデータの流れと、動作を確認していきましょう!

input.htm(入力用HTMLファイル)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>入力してみよう</TITLE>
</HEAD>
<BODY>

<H3>入力してみよう(POST編)</H3>
<FORM action="output.cgi" method="POST">
お名前<INPUT type=text name="name"><BR>
性別<INPUT type=radio name="sex" value="男">
男 / <INPUT type=radio name="sex" value="女">女<BR>
<INPUT type=submit value="送信"> <INPUT type=reset value=クリア">
</FORM>

<HR>

<H3>入力してみよう(GET編)</H3>
<FORM action="output.cgi" method="GET">
お名前<INPUT type=text name="name"><BR>
性別<INPUT type=radio name="sex" value="男">
男 / <INPUT type=radio name="sex" value="女">女<BR>
<INPUT type=submit value="送信"> <INPUT type=reset value=クリア">
</FORM>

</BODY>
</HTML>

output.cgi(出力用CGIファイル)
#!/usr/local/bin/perl

$|=1; #データのフラッシュ
require './jcode.pl'; #jcode.plへのパス
print "Content-type: text/html\n\n"; # データ形式

# プラウザからのデータ取込み
if ($ENV{'REQUEST_METHOD'} eq "POST") {
    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else {
    $buffer = $ENV{'QUERY_STRING'};
}

# プラウザからのデータ変換
$i = 0;
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
    #1行毎に$name,$valueを取り出す
    ($name, $value) = split(/=/, $pair);
    # 変換演算子  tr  +  を  スペースに置き換え
    $value =~ tr/+/ /;
    # 変換演算子  s/// 単語の構成文字にマッチ
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    # タグ処理
    if ($tag == 0) {
        $value =~ s/</&lt\;/g;
        $value =~ s/>/&gt\;/g;
        }
    else {
        $value =~ s/<!--(.|\n)*-->//g;
        $value =~ s/<>/&lt\;&gt\;/g;
    }

    # " を &quot; に変換
    $value =~ s/"/&quot;/g;
    #\n を "" に変換
    # $value =~ s/\n//g;

    # 日本語に変換(デコード処理部分)
    &jcode'convert(*value,'sjis');
    &jcode'convert(*name,'sjis');

    $FORM{$name} = $value;
    @num[$i]=$value;
    $i=$i++;
}

##---------出力HTML------------
print <<"EOT";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>出力結果</TITLE>
</HEAD>
<BODY>

<H3>出力結果</H3>

あなたのお名前は$FORM{'name'}さんです。<BR>
性別は$FORM{'sex'}です。<BR><BR>

あなたのお名前は@num[0]さんです。<BR>
性別は@num[1]です。<BR><BR>

</BODY>
</HTML>
EOT

exit;

上記の二つのファイルとjcode.plを同一フォルダ内にアップロードして下さい。

例:
フォルダ ファイル名 パーミッション
cgi-bin/   777
/ input.htm 644
/ output.cgi 755
/ jcode.pl 644

とにかく実際にアップロードしてみて確かめてください。上手く出来た人は、POSTとGETの時の違いを見てみると良いでしょう。またFORMをいろいろと変化させてアレンジしてみるのも練習になると思います。とにかくいろいろ自分なりに弄くってみることが、成長の第一歩だと言うことを忘れないで下さいねo(≧▽≦)o

□初級編 プログラミングに入る前に