#!/usr/local/bin/perl
require '../jcode.pl';
require '../sendemail.pl';
#■---------------------------------------------------------------------
#■ デザインは好きに変更してね
#■---------------------------------------------------------------------
#■各種表示
$title="自作CGIゲストブック";
$wabmaster="バウンティーハンター";
$myhpurl="http://www3.plala.or.jp/bountyhunter/";
$mymail="**********\@*******.*******.*****";
#■背景
$bgcolor="#f0e0a0";
#■名前
$namecolor="#f06030";
#■注意書き
$attentioncolor="#ff4444";
#■未リンク
$linkcolor="#f06030";
#■既リンク
$vlinkcolor="ee9966";
#■リンク押下
$alinkcolor="3060f0";
#■削除ボタンのテーブル
$tabledelete="ffaa77";
#■登録をメールで通達する場合は1、しない場合は0にしてね
$mailservice='0';
#■sendmailのパス(メール通知する場合。詳しくはプロバイダに問い合わせてね)
$sendmail = '/usr/lib/sendmail';
#■投稿通達先メールアドレス
$mailto='';
#■---------------------------------------------------------------------
#■ ここから先は変更しないでね
#■---------------------------------------------------------------------
$this="../guestbook/guestbook.cgi";
$datafile="guest.dat";
$ver="HUNTER\'s Station / GuestBook Ver1.10";
#■POST/GET処理----------------------------------------------------------
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $formdata, $ENV{'CONTENT_LENGTH'});
}else{
$formdata = $ENV{'QUERY_STRING'};
}
#■$formdata の各部分を"&"で分割して配列に格納----------------------------
@pairs = split(/&/,$formdata);
#■各データ内無効文字列の変換と文字コードの設定--------------------------
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
#■引数内の<>やスペースを変換
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/</g;
$value =~ s/>/>/g;
#■データ内改行コードを無効(null文)に
$value =~ s/\n//g;
#■半角スペース、","を全角に
$value =~ s/ / /g;
$value =~ s/\,/,/g;
#■jcode.plを使ってShift-JISにコンバート(sjisの部分)
#■JISにするときはjis,EUCはeucと設定
&jcode'convert(*value,sjis);
$DAT{$name} = $value;
}
#■処理の分岐
if($DAT{'mode'} eq 'reg'){ &write; }
if($DAT{'mode'} eq 'del'){ &delete; }
&html;
exit;
#■HTMLで表示する--------------------------------------------
sub html {
print "Content-Type: text/html\n\n";
print "
\n";
print "$title\n";
print "\n";
print "\n";
print "\n\n";
print "\n";
print "$title
\n";
print "めっちゃ手始めっぽいですな(笑)
\n";
print "ここに来た記念に、足跡をどうぞ♪
\n";
print "\n";
print "\n\n";
print "
\n";
print "\n";
print "■(必須)の項目以外は省略できます。
\n";
print "■タグは使用できません。
\n";
print "■新しい投稿ほど上になります。\n";
print "
\n";
print "\n\n";
print "\n";
#■管理人情報を表示
print "\n〜$title〜
\n";
print "管理人:$wabmaster
\n";
print "メールアドレス:$mymail
\n";
print "ホームページ:$myhpurl
\n";
print "
\n\n\n";
}
#■データファイルを読み込む--------------------------------------------
sub read {
open(FILE,$datafile) or die "Error";
@DATA = ;
close(FILE);
}
#■送信内容を $datafile に書き出す--------------------------------------
sub write {
#■必須項目に未記入があるときのエラー処理
if($DAT{'name'} eq "" | $DAT{'passwrite'} eq "") {
print "Content-Type: text/html\n\n";
print "\n入力エラー\n";
print "\n";
print "\n\n";
print "必須項目に未記入があります。
\n";
print "ブラウザの「戻る」を押し、再度記入して下さい。
\n";
print "\n
\n";
print "〜$title〜
\n";
print "管理人:$wabmaster
\n";
print "メールアドレス:$mymail
\n";
print "ホームページ:$myhpurl
\n";
print "
\n\n\n";
exit;
}
#■現在の年月日時をサーバーから取得
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year =$year + 1900;
$mon++;
$mon = "0$mon" if $mon <10;
$mday = "0$mday" if $mday < 10;
$hour = "0$hour" if $hour < 10;
$min = "0$min" if $min < 10;
$sec = "0$sec" if $sec < 10;
$wday = ("日","月","火","水","木","金","土")[$wday];
#■削除キーを暗号化
srand;
@key = ('0'..'9','a'..'z','A'..'Z','.','/');
$password = crypt($DAT{'passwrite'},"$key[rand(63)]$key[rand(63)]");
#■新規投稿を $datafile の最初に書き込むため、一度全てを読み込む
open(BASE,$datafile) or die "Error";
@MASTER=;
close(BASE);
#■$datafile を新規作成し、新規投稿を書き込む
open(FILE, ">$datafile") or die "Error";
print FILE "$DAT{'name'},$DAT{'mail'},$DAT{'mes'},$DAT{'hpurl'},$DAT{'myself'},$password,";
print FILE "$year,$mon,$mday,$hour,$min,$sec,$wday";
print FILE "\n";
#■残ったデータを全て書き出す
foreach $line(@MASTER) {
print FILE $line;
}
close(FILE);
if($mailservice eq '1') { &mail; }
}
#■投稿の削除-------------------------------------------------
sub delete {
#■削除キーかチェックボックスが未入力のときのエラー処理
if($DAT{'select'} eq "" | $DAT{'passread'} eq "") {
print "Content-Type: text/html\n\n";
print "\n入力エラー\n";
print "\n";
print "\n\n";
print "削除キーやチェックボックスに入力して下さい。
\n";
print "ブラウザの「戻る」を押し、再度記入して下さい。
\n";
print "\n
\n";
print "〜$title〜
\n";
print "管理人:$wabmaster
\n";
print "メールアドレス:$mymail
\n";
print "ホームページ:$myhpurl
\n";
print "
\n\n\n";
exit;
}
&read;
#■投稿数を数える
$number = 0;
foreach $line(@DATA) {
$number++;
}
#■選択番号の投稿以外を、新規作成した $datafile に書き込む
open(FILE, ">$datafile") or die "Error";
foreach $line (@DATA) {
($Rname,$Rmail,$Rmes,$Rhpurl,$Rmyself,$Rpass,
$Ryear,$Rmon,$Rmday,$Rhour,$Rmin,$Rsec,$Rwday) = split(/\,/,$line);
chop($Rwday);
&password;
$number--;
}
close(FILE);
}
#■投稿の削除2----------------------------------------------------
sub password {
#■番号を照合する
if($number ne $DAT{'select'}) {
print FILE $line;
}else{
#■パスワードを照合する
if($Rpass ne crypt($DAT{'passread'},substr($Rpass,0,2)) ) {
#■残ったデータを全て書き出す
foreach $line(@DATA) {
print FILE $line;
}
print "Content-Type: text/html\n\n";
print "\n削除エラー\n";
print "\n";
print "\n\n";
print "削除キーが間違っています。
\n";
print "ブラウザの「戻る」を押し、再度記入して下さい。
\n";
print "\n
\n";
print "〜$title〜
\n";
print "管理人:$wabmaster
\n";
print "メールアドレス:$mymail
\n";
print "ホームページ:$myhpurl
\n";
print "
\n\n\n";
exit;
}
}
}
#■メール送信----------------------------------------------------
sub mail {
$subject = "登録通知";
#■訪問者のアドレスをチェックして有効なら差し出し人アドレス$fromにセットする
if ($DAT{'mail'} =~ /([#-9A-~\-\_]+\@[#-9A-~\-\_\.]+)/) { $from = $1; }
if (!$from) { $from = 'nomail@xxxxxxxx.xx.xx'; }
#■本文を作成する
$body = "Name : $DAT{'name'}\n";
$body .= "Message : $DAT{'mes'}\n";
$body .= "Hobby : $DAT{'myself'}\n";
$body .= "E-Mail : $DAT{'mail'}\n";
$body .= "HP : $DAT{'hpurl'}\n";
#■メール送信用に文字コードを「jis」に変換する
&jcode'convert(*subject,jis);
&jcode'convert(*body,jis);
#■send_email()関数を呼び出し、メールを送信する
&send_email($subject,$from,$mailto,'','',$body);
}