見出し画像

【Perl:POST/GETでブラウザから値を受け取る】URLやFORMのテキストボックスなどからデータを受け取って変数に格納するお約束のコード

ホームページからPerlのプログラムに値を渡したいことがあると思います。

例えば、URLの引数で値を引き渡す場合や、ホームページ内のフォームに入力した値をプログラムに引き渡す場合などです。
そんなときのお約束コードを記載します。

以下は、POSTで引き渡す場合の例です。HTMLファイルと Perlファイルです。URLの引数(GET)で日本語や特定の文字を扱う場合はちょっと処理が必要なので別途記載したいと思います。

POSTでPerlの変数に引き渡すお約束のコード

とりあえずHTMLファイルは、input.html としておきます。
このHTMLのページのテキストボックスなどに設定された DATA1、DATA2、DATA3 (nameで変数名、valueで値を設定)をPerlのプログラムに引き継ぎます。とりあえず、TEXTフォームとTEXTAREAとHIDDEN(表示しない)の3つの入力データを PerlにPOSTで引き継ぎます。

<!DOCTYPE html>
<html lang="ja">
<head></head>
<title>ああああ</title>
<body>
<form method="POST" action="input.cgi">   
  <input type="text" name="DATA1">
    <p></p>
  <textarea  name="DATA2" rows="5" cols="10"></textarea>
    <p></p>
  <input type="hidden" name="DATA3" value="あいうえお">
  <input type="submit" value="実行" name="BUTTON"></p>   
</form>   
</body>
</html> 

Perlプログラム側です。ここではファイル名は input.cgi としておきます。
ちなみに、このお約束コードでは、POSTだけでなく、GET(URLの引数で引き渡す)でも変数と値を引き渡すこともできます。

#!/usr/bin/perl 

#POSTやGETで設定されたデータを変数に格納するお約束コード
if ($ENV{'REQUEST_METHOD'} eq 'POST') 
{ read(STDIN, $alldata, $ENV{'CONTENT_LENGTH'});
 } 
else 
{ $alldata = $ENV{'QUERY_STRING'};
 }
foreach $data (split(/&/, $alldata)) 
{
  ($key, $value) = split(/=/, $data);
  $value =~ s/\+/ /g;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1))/eg;
  $value =~ s/\t//g;
  $in{"$key"} = $value;
}

# フォームに登録された内容を変数に格納します
$aaa1 = $in{'DATA1'};
$aaa2 = $in{'DATA2'};
$aaa3 = $in{'DATA3'};

# 画面に表示します
print 'Content-Type: text/html; charset=Shift_JIS';
print "\n\n";
print '<html lang="ja">';
print '<head>';
print '<title>POSTで受け取った変数</title>';
print '</head>';
print '<body>';
print "変数aaa1は ${aaa1}<br>\n";
print "変数aaa2は ${aaa2}<br>\n";
print "変数aaa3は ${aaa3}<br>\n";
print '</body></html>';
print "\n\n";

HTMLをPerl(CGI)が使えるサーバにアップロードして、Perlプログラムに適切な実行属性を設定して、このページのURLをブラウザから開きます。

適当に値を設定して・・・実行を押すと、

変数aaa1は 12345
変数aaa2は 本日は晴天なり
変数aaa3は あいうえお

と、表示されます。

とりあえず、今日は以上です。



この記事が気に入ったらサポートをしてみませんか?