トップ > Perl Tips > postでの入出力


 ■ 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