[トップページ] [戻る]
簡単な掲示板を作ってみる
簡単な掲示板を作ってみることにしましょう。掲示板自体の仕組みはそんなに難しくありませんが、セキュリティ面での考慮が必要となります。
掲示板の仕組み
管理者が作成している掲示板の仕組みは以下のようになっています。おそらく、作成する方々でいろいろな記述方法があるかと思います。

パラメータ受け取り
|
処理の分岐
書き込み処理を要求

掲示板の書き込み処理
削除処理を要求

メッセージの削除処理
|
掲示板の表示処理

かなり簡略化して記述していますが、要はパラメータを受け取ったときに書き込みなのか、削除なのか、表示するだけなのかを判断してその処理を行うようにします。
データのフォーマットを考える
掲示板では、ブラウザから送信されたデータを何らかの型にしてWebサーバーで保存しなければなりません。
今回、データファイルはcsv形式(,カンマ区切り)で保存を行うことにします。

題名 投稿者の名前 投稿記事
25文字以内 15文字以内 1000文字以内
題名1,名前1,投稿記事1
題名2,名前2,投稿記事2
題名3,名前3,投稿記事3
…
処理の分岐
HTMLから呼び出すとき、パラメータを渡すことで処理を分岐させる仕組みにします。
#! /usr/local/bin/perl

require 'jcode.pl';

##### パラメータ受け取り
if ($ENV{'REQUEST_METHOD'} eq "POST") 
	{read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});}
else 
	{$buffer = $ENV{'QUERY_STRING'};}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
	($key, $value) = split(/=/, $pair);
	$form{$key} = $value;
}
$mode = $form{'mode'};

##### 処理分岐
if ($mode eq "write")
	{&write_rtn;}
elsif ($mode eq "del")
	{&delete_rtn;}
else
	{&display_rtn;}

##### スクリプト終了
exit;
jcode.plをインクルード
日本語文字コード変換のためにjcode.plのインクルードを行います。
■ パラメータ受け取り
送信されたパラメータを受け取り、スカラー変数にパラメータの内容を保存します。
■ 処理分岐
スカラー変数に保持された情報からどの処理を行うのか決定します。
■ スクリプト終了
スクリプトを終了します。
メインとなる処理はすべてサブルーチン内で行うことにします。
現在書き込まれている内容を掲示板に表示する
掲示板に投稿された記事を表示する機能を作成します。掲示板では、Webサーバーに保存されたデータファイルの読み書きで投稿記事の管理を行います。
sub display_rtn {

##### HTML開始
print "<HTML>\n";
print "<BODY>\n";
print "<HR>\n";

##### 入力用フォームを表示
print "<FORM METHOD=\"POST\" ACTION=\"abc.cgi?mode=write\">\n";
print "<INPUT TYPE=\"text\" NAME=\"subject\" SIZE=20>\n";
print "<INPUT TYPE=\"text\" NAME=\"name\" SIZE=20>\n";
print "<TEXTAREA NAME=\"message\" COLS=80 ROWS=5></TEXTAREA>\n";
print "<INPUT TYPE=\"submit\">\n";
print "</FORM>\n";

##### データファイルを読み込んで配列にセット
open(FILE, "message.dat") || die "bussy!!";
@lists = <FILE>;
close FILE;

##### メッセージ表示処理
foreach $list (@lists) {
	@msg = split(/,/, $list);
	print "題名:$msg[0]<BR>";
	print "名前:$msg[1]<BR>";
	print "内容:$msg[2]<BR>";
	print "<HR>";
}

##### HTML終了
print "<HR>\n";
print "</BODY>\n";
print "</HTML>\n";
}
■ 入力用フォームを表示
新規に投稿するための入力フォームをHTMLで記述します。METHOD="POST"は、CGIの標準入力を使用してデータ転送を行います。転送先Webサーバーで自分自身(abc.cgi)をWriteモードで呼び出します。
■ データファイルを読み込んで配列にセット
メッセージデータが書き込まれているファイルをオープンして、配列にセットします。上記の記述でファイル内のすべてのデータが配列にセットされます。
■ メッセージ表示処理
配列内のすべてのデータをHTMLに出力します。split関数は、csv形式で保存されているデータを個々のデータに分解します。
掲示板に書き込む処理
sub write_rtn {

##### POSTデータ取得
local($name) = $form{'name'};
local($subject) = $form{'subject'};
local($message) = $form{'message'};

##### 日本語コンバート
&jcode'convert(*name, "sjis");
&jcode'convert(*subject, "sjis");
&jcode'convert(*message, "sjis");

##### HTMLタグは禁止
$name =~ s/&/&amp;/g;
$name =~ s/</&lt;/g;
$name =~ s/>/&gt;/g;
$name =~ s/,/./g;
$subject =~ s/&/&amp;/g;
$subject =~ s/</&lt;/g;
$subject =~ s/>/&gt;/g;
$subject =~ s/,/./g;
$message =~ s/&/&amp;/g;
$message =~ s/</&lt;/g;
$message =~ s/>/&gt;/g;
$message =~ s/,/./g;

##### 改行コードの変換処理
$message =~ s/\r//g;
$message =~ s/\n/<BR>/g;

# メッセージファイル書き込み
local($buf) = sprintf("%s,%s,%s\n", $subject, $name, $message);
open (FILE, ">> message.dat") || die "bussy!!";
print FILE $buf;
close(FILE);
}

[トップページ] [戻る]
Copyright (C) 2000 Me All rights reserved
Mail To webmaster