メールアドレスの入力欄を追加する

メールアドレスの入力欄を追加する

今回は入力項目にメールアドレスを追加してみます。

入力欄の追加は難しい事はないと思います。投稿フォーム表示部分に以下の処理を追加します。

print "メールアドレス<br>\n";
print "<input type=\"text\" name=\"mail\" size=\"20\" value=\"\"><br>\n";

投稿者名を表示させる容量でメールアドレスの表示も可能ですが、一工夫してメールアドレスに自動的にリンクがはられるようにしたいと思います。

投稿されたメールアドレスを単純に表示するのみなら

print "メールアドレス:$mail<br>\n";

とすれば大丈夫ですが、表示処理の直前に以下の処理を追加する事で、自動的にリンクさせる事ができます。

if ($mail ne '') {
  $mail = "<a href=\"mailto:$mail\">$mail</a>";
}

以下に、これまでのプログラム全文を記載します。

#!/usr/local/bin/perl

#ライブラリの読み込み
require 'jcode.pl';

#投稿された値を受け取る
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;

  &jcode::convert(*value, 'sjis');

  $in{"$key"} = $value;
}

#ヘッダの表示
print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">\n";
print "<head><title>掲示板</title></head>\n";
print "<body>\n";

#受け取ったデータをファイルに書き込む
if ($in{'handle'} ne '' && $in{'message'} ne '') {
  if (open(FH, "bbs.txt")) {
    @file = <FH>;
    close(FH);

    #改行コードを改行タグに変換
    $in{'message'} =~ s/\r\n/<br>/g;
    $in{'message'} =~ s/\r/<br>/g;
    $in{'message'} =~ s/\n/<br>/g;

    #現在日時の取得
    ($sec, $min, $hour, $day, $mon, $year, $week) = localtime(time());
    @week = ('日', '月', '火', '水', '木', '金', '土');
    $year = $year + 1900;
    $mon  = $mon + 1;
    $week = $week[$week];
    $date = "$year年$mon月$day日($week) $hour時$min分$sec秒";

    #古い記事を自動的に削除
    splice(@file, 30);

    #投稿者のホスト・IPアドレスを取得
    $host = $ENV{'REMOTE_HOST'};
    $addr = $ENV{'REMOTE_ADDR'};
    if ($host eq '') {
      $host = $addr;
    }

    unshift(@file, "$in{'handle'}\t$in{'mail'}\t$in{'message'}\t$date\t$host\n");

    if (open(FH, ">bbs.txt")) {
      print FH @file;
      close(FH);
    } else {
      print "<p>ファイルに書き込めません。</p>";
    }
  } else {
    print "<p>ファイルを読み込めません。</p>";
  }
}

#投稿フォームの表示
print "<form method=\"post\" action=\"bbs.cgi\">\n";
print "<p>\n";
print "ハンドルネーム<br>\n";
print "<input type=\"text\" name=\"handle\" size=\"20\" value=\"\"><br>\n";
print "メールアドレス<br>\n";
print "<input type=\"text\" name=\"mail\" size=\"20\" value=\"\"><br>\n";
print "メッセージ<br>\n";
print "<textarea name=\"message\" cols=\"50\" rows=\"5\"></textarea>\n";
print "</p>\n";
print "<p><input type=\"submit\" value=\"送信する\"></p>\n";
print "</form>\n";

#記事の一覧表示
if (open(FH, "bbs.txt")) {
  while ($data = <FH>) {
    ($handle, $mail, $message, $date, $host) = split(/\t/, $data);

    #メールアドレスに自動的にリンク
    if ($mail ne '') {
      $mail = "<a href=\"mailto:$mail\">$mail</a>";
    }

    print "<p>\n";
    print "投稿者:$handle<br>\n";
    print "メールアドレス:$mail<br>\n";
    print "メッセージ:<br>$message<br>\n";
    print "投稿日時:$date\n";
    print "</p>\n";
  }
} else {
  print "<p>ファイルを読み込めません。</p>";
}

#フッタの表示
print "</body>\n";
print "</html>\n";

exit;