■ postでの入出力
データをデコード(文字化けを直す)して出力します。
・post
<FORM>タグでmethodパラメータに
POSTがセットされた場合に適応されるものです。
アドレスの後に何もつきません。
環境変数CONTENT_LENGTHに、セットされたデータの長さが入っており、
その長さ分だけが標準入力からデータを読み取ります。
データの破損が少ない。
という特徴があります。
<サンプル>
#!/usr/bin/perl
require 'jcode.pl';
read( STDIN, $data, $ENV{ 'CONTENT_LENGTH' } );
$data =~ tr/+/ /;
$data =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;
&jcode'convert( *value, 'sjis' );
($name,$mail)=split(/&/,$data);
($name1,$name2)=split(/=/,$name);
($mail1,$mail2)=split(/=/,$mail);
print "Content-type: text/html\n\n";
print "名前:$name2 メール:$mail2";
<解説>
前回のサンプルをご覧ください。
前回:getでの入出力
変わっているのは
read( STDIN, $data, $ENV{ 'CONTENT_LENGTH' } );
の部分だけです。
なので今回はこれ以外の説明はしません。
もしわからなければ上のページをご覧ください。
read( STDIN, $data, $ENV{ 'CONTENT_LENGTH' } );
というのは、環境変数 "CONTENT_LENGTH" の長さの分だけ、
標準入力(STDIN)からデータを取得し変数 "$data" に格納します。
POSTメソッドで送信された情報はこの標準入力から入力されます。
続いて送信するためのフォームを作りたいと思います。
<HTML>
<BODY>
<FORM ACTION="***.cgi" METHOD="POST">
投稿者<INPUT TYPE="text" NAME="name"><BR>
E-mail <INPUT TYPE="text" NAME="mail"><BR>
<INPUT TYPE="submit" VALUE="送信">
<INPUT TYPE="reset" VALUE="リセット">
</FORM>
</BODY>
</HTML>
<FORM ACTION="***.cgi" METHOD="POST">
の ***.cgi はCGIファイル名にしてください。
これも前回と一緒です。getでの入出力をご覧ください。
METHOD="POST" とするだけでOKです。
METHODを省略するとGETメソッドで送られます。
jcode.pl(こちらでダウンロードできます。)と、
このCGIファイル(拡張子は *.cgi にすること)と、
HTMLのフォームをアップロードして、枠に何か文字を入れて送信すると、
名前:*** メール:***
と出ます。
サンプルはこちらです。
トラックバック
このエントリーのトラックバックURL:
http://easycgi.xrea.jp/mt-tb.cgi/33