#!/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; #■データ内改行コードを無効(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"; # print "メッセージ:
\n"; # print "
\n"; print "メッセージ:
\n"; print "削除キー(必須)
\n"; print "
\n"; print "\n"; print "\n"; print "
\n"; print "■(必須)の項目以外は省略できます。
\n"; print "■タグは使用できません。
\n"; print "■新しい投稿ほど上になります。\n"; print "
\n"; print "\n\n"; print "
\n"; &read; #■投稿数を表示前に数える $number = 0; foreach $line(@DATA) { $number++; } #■ひとつも投稿がない場合の処理は省いている(何も表示しない) foreach $line (@DATA) { ($Rname,$Rmail,$Rmes,$Rhpurl,$Rmyself,$Rpass, $Ryear,$Rmon,$Rmday,$Rhour,$Rmin,$Rsec,$Rwday) = split(/\,/,$line); chop($Rwday); print "No.$number■$Rnameさん"; print "  登録日:$Ryear年$Rmon月$Rmday日($Rwday)$Rhour時$Rmin分$Rsec秒\n"; print "  削除
\n"; if($Rmail ne ""){ print "メールアドレス:$Rmail  \n"; } if($Rhpurl ne "http://" & $Rhpurl ne ""){ print "ホームページ:$Rhpurl\n"; } if($Rmyself ne ""){ print "

興味のあること:
$Rmyself\n"; } if($Rmes ne ""){ print "

メッセージ:
$Rmes
\n"; } print "
\n"; $number--; } #■削除機能 print "\n"; print "
\n"; print "■投稿の削除:投稿時の削除キーを\n"; print "\n"; print "に入力し、消したい投稿をチェックしてを押す
\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); }