ポンクソフト

占いプログラムを作る - CGI(Perl)の基本と掲示板作成

前ページ CGI(Perl)の基本と掲示板作成 TOP 次ページ

目次

  1. CGI(Perl)の基本と掲示板作成
  2. ブラウザに文字列を表示する
  3. アクセスカウンタを作る
  4. フォーム内容を表示する
  5. 占いプログラムを作る
  6. 掲示板 その1
  7. 掲示板 その2
  8. 掲示板 その3
  9. 掲示板 その4

占いプログラム

前回のプログラムをふまえて、占いプログラムを作ってみましょう。
今回新たに学ぶこと

フォームのHTML

前回と同じように、最初にフォームの入ったHTMLファイルを作成します。
以下のHTMLをテキストエディタで入力してください。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>占いの館</title>
</head>
<body>
<h2>占いの館</h2>
<form method="post" action="uranai.cgi">
名前:
<input type="text" name="namae" size="20">
<br>
性別:
<input type="radio" name="seibetsu" value="男" checked>男
&nbsp;
<input type="radio" name="seibetsu" value="女">女
<br>
誕生月:
<input type="text" name="month" size="2">月
<br>
<input type="submit" value="送信">
</form>
</body>
</html>
入力が終わったら、「uranai.html」という名前でサーバにアップロードし、ブラウザで確認してみてください。テキスト入力フィールド・ラジオボタン(丸い選択ボタン)・送信ボタンが表示されると思います。

HTMLの説明

前回と同じく、<form>~</form>に挟まれたフォーム部品の内容が、action属性に書かれたCGI(uranai.cgi)に送られます。
<input type="text" name="namae" size="20">
前回と同じく、namaeという名前のテキスト入力フィールドを配置します。size属性は、横幅が半角何文字分になるかを指定する部分ですが、あまり正確ではないので目安程度に考えてください。
<input type="radio" name="seibetsu" value="男" checked>男
&nbsp;
<input type="radio" name="seibetsu" value="女">女
seibetsuという名前のラジオボタンを配置します。type属性が「radio」のフォーム部品はラジオボタンとなり、複数の項目からひとつを選択するときに使われます。フォームを送信したときにチェックされていたラジオボタンのvalue属性の値がCGIに送られます。今回の場合は、男をチェックしたときには「男」、女をチェックしたときには「女」という値が送られることになります。
checked属性は、最初にHTMLを呼び出したときに予めチェックしておく項目に付けます。

「&nbsp;」とは、スペースを空けるというHTMLの特別な書き方です。見やすくするためのもので、ラジオボタンとは関係ありません。
<input type="text" name="month" size="2">月
monthというテキスト入力フィールドを配置します。

以上3つのフォーム部品を配置したことにより、CGIには「namae」「seibetsu」「month」の3つの値が送られることになります。

フォームを処理するプログラム

次に、以下のプログラムをテキストエディタで入力してください。
#!/usr/bin/perl

# 占いプログラム

require "cgi-lib.pl";

print "Content-type: text/html; charset=Shift_JIS\n\n";

&ReadParse(*form);

# ほめ言葉設定
if ($form{"seibetsu"} eq "男") {
  $home = "男前";
} else {
  $home = "べっぴんさん";
}

# 運勢設定
if ($form{"month"} < 3) {
  $unsei = "スーパーラッキー";
} elsif ($form{"month"} < 10) {
  $unsei = "ごくふつう";
} else {
  $unsei = "大凶";
}

print <<EOL;
<html>
<body>
<p>
ほう、$form{"namae"} はえらく $home じゃのう。<br>
$form{"namae"} の運勢は $unsei じゃ。<br>
</p>
</body>
</html>
EOL
注意事項として、下部のHTML内に書かれている変数の前後には半角スペースを空けてください。
入力が終わったら、「uranai.cgi」という名前でサーバにアップロードし、パーミッションを755にしてください。
その後、もういちどuranai.htmlをブラウザで呼び出し、フォーム内容を入力して送信ボタンを押してください。占い結果のメッセージが表示されれば成功です。

プログラムの説明

&ReadParse(*form);
前回と同じく、フォーム送信内容を解釈し、formという連想配列に格納します。この関数によって、$form{"namae"} に名前、$form{"seibetsu"} に性別(「男」または「女」)、$form{"month"} に誕生月が入ります。
if ($form{"seibetsu"} eq "男") {
  $home = "男前";
} else {
  $home = "べっぴんさん";
}
if文は条件分岐を行なう命令です。
変数の内容によって処理の流れを変えたいことは多々ありますが、そういったときに使うのが条件分岐です。if文の基本的な構文は以下のようになります。
if (条件) {処理}
条件が正しいときだけ処理を行ないます。
if (条件) {処理1}
else {処理2}
条件が正しいときに処理1を行ない、条件が違うときに処理2を行ないます。
if (条件1) {処理1}
elsif (条件2) {処理2}
else {処理3}
条件1が正しいときに処理1を行ない、条件1が違ってなおかつ条件2が正しいときに処理2を行ないます。条件1と条件2のどちらも違うときに処理3を行ないます。
if ($form{"seibetsu"} eq "男") {
上記の場合、条件は「$form{"seibetsu"} eq "男"」の部分になります。
eqというのはequal、つまり等しいという意味で、$form{"seibetsu"}の値が「男」の場合に条件が正しくなり、中カッコの中の処理を行ないます。

まとめると、$form{"seibetsu"}が「男」の場合に変数$homeが「男前」となり、$form{"seibetsu"}が「男」でない、つまり「女」の場合に変数$homeが「べっぴんさん」となります。
if ($form{"month"} < 3) {
  $unsei = "スーパーラッキー";
} elsif ($form{"month"} < 10) {
  $unsei = "ごくふつう";
} else {
  $unsei = "大凶";
}
この部分も変数の値によって条件分岐をしている部分です。
$unseiの値が、
になります。上のプログラムをじっくり読んで、なぜそうなるかを理解してください。
前ページ CGI(Perl)の基本と掲示板作成 TOP 次ページ
このエントリーをはてなブックマークに追加 そっか0