§8 フォームからの入力に応答 - エラー処理なし -


フォームに入力されたプレゼント応募のあて先などをサーバーに保存するCGIをエラー処理なしの状態まで作成する。


▼エラーチェックなしのサンプル
#!/usr/local/bin/perl
use strict;
use CGI;
use Jcode;     #…(1)

# CGIモジュールを誕生させる
my $query = new CGI;

# フォームからのデーターを取り出す
my $name = $query->param('name');
my $address = $query->param('address');
my $age = $query->param('age');
my $email = $query->param('email');

# EUC文字コードに統一する
$name = new Jcode($name)->euc;    #…(2)
$address = new Jcode($address)->euc;

# 応募データーを保存
if (open (FILE, ">>oubo.txt")){    #…(3)
  my $ouboData;
  $ouboData = join(',', $name, $address, $age, $email);    #…(4)
  print FILE "$ouboData\n";    #…(5)
  close FILE;    #…(6)
  }
  else {
   die ("オープンエラー");    #…(7)
}

# Webページを返す
print "Content-Type: text/html\n\n";
print <<"END_HTML";
<html>
<head>
<title>パンダクイズ</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" cellpadding="10" cellspacing="0">
  <tr>
  <td><img src="img/panda2.gif" width="111"  height="150"></td>
  <td>$nameさん、ご応募ありがとうございました。</td>
  </tr>
</table>
</body>
</html>
END_HTML


■日本語モジュールを使う ・・・(1)
use Jcode;
日本語モジュールはperlに標準で入っていない。別途インストールする必要がある。レンタルサーバーなどでインストールできない場合は、モジュールのファイルをCGIと同じディレクトリにコピーすれば利用できる。

■フォームからの日本語文字をEUCに変換 ・・・(2)
$name = new Jcode($name)->euc;
シフトJISなどで入力された文字コードをEUCコードに統一するため、日本語モジュールを使って変換する。上記は$nameの文字を持った日本語オブジェクトを生成(誕生)させて、EUC命令でEUCコードに変換する処理を行っている。

■ファイルを追加モードで開く ・・・(3)
open (FILE, ">>oubo.txt");
openはファイルを特別な変数(ファイル識別子)に関連づけて利用できるようにする命令。FILEがファイル識別子、oubo.txtがファイル名、>>が追加モードを表す。

ファイルのオープンモード

なし
読み込み
>
上書きモード
>>
追加モード

※追加モードの時はファイルが存在しないとエラーになる。


■カンマ区切りのデーターを作る ・・・(4)
$ouboData = join(',', $name, $address, $age, $email);
join命令は最初の引数の文字を区切り記号にして、残りの文字を連結する。

■ファイルにデーターを出力 ・・・(5)
print FILE "$ouboData\n";
print命令の出力先にファイル識別子を指定すればファイルに書き込める。


■ファイルを閉じる ・・・(6)
close FILE;
開いたファイルは必ず閉じる。

■致命的なエラー ・・・(7)
die ("オープンエラー");
ファイルが開けないなど、処理の続行ができないエラーが発生した場合は、die命令でエラーログに詳細を出力して終了する。




戻る メニューへ 次へ