#!/usr/bin/perl # EVENT GUIDE Version 1.1 # Script written by Koujuu # Mail: tf52316@m1.interq.or.jp # Homepage: http://www.interq.or.jp/www1/tf52316/ # This script is free require './jcode.pl'; # -------------- $pass = 'taro'; #管理用パスワード $homepage = 'http://soukoukai.com/top.htm'; #戻り先のURL $title = '走行会宣伝BBS'; #ページのタイトル $bodytag = '';#BODYタグ $tbcolor1 = '#000000'; #テーブルの枠の色 $tbcolor2 = '#cccccc'; #テーブル内の背景色1 $tbcolor3 = '#ffffff'; #テーブル内の背景色2 @stage = ('グリップ・レース走行会','ドリフト','ゼロヨン','ジムカーナ','ラリー・ダートラ','ドライビングスクール'); #ステージの名前 @tiiki = ('十勝インターナショナルスピードウェイ','新協和カートランド','北海道スピードパーク','SUGOインターナショナルレーシングコース','仙台ハイランドレースウェイ','エビスサーキット','メーハイランドSSパークサーキット','日本海間瀬サーキット','関越スポーツランド','那須モータースポーツランド','ツインリンクもてぎ','ヒーローしのいサーキット','日光サーキット','日光スピードパーク','茨城中央サーキット','筑波サーキット','桶川スポーツランド','スポーツランド山梨','ラリーキッズ伊那','富士スピードウェイ','南千葉サーキット','茂原ツインサーキット','ナリタモーターランド','浅間台スポーツランド','相模湖ピクニックランド','YZサーキットミズナミ','瑞浪モーターランド','オートランドツクデ','備北ハイランドパーク','スポーツランドタマダ','幸田サーキット','鈴鹿サーキット','モーターランドSUZUKA','鈴鹿ツインサーキット','セントラルサーキット','キャピタルスポーツランド','名阪スポーツランド','阿讃サーキット','岡山国際サーキット','中山サーキット','瀬戸内海サーキットMINEセントラルパークサーキット','オートポリスサーキット','HSR九州','DEC セキアヒルズ','三井三池オートスポーツランド','清里ハイランドパーク'); #地域の名前 @youbi = ('日','月','火','水','木','金','土'); #曜日の表示 $datafile = './event.dat'; #記録保存用ファイル $lockfile = './event.lock'; #ロックファイル $lock = 0; #ロックファイルを使用するかどうか(0:不使用1:使用) #symlink関数が使えない場合は不使用にしてください。 $banner = 0; #バナー広告をつけるかどうか(0:つけない1:つける) $banner_data = './banner.pl'; #banner.plの位置(バナー広告をつけるときのみ) #同じディレクトリ内にあるときはこのまま # 画像ファイルの指定 $imnew = ''; $immail = ''; $imhome = ''; # new.gifなどの画像ファイルは各自で用意してください。 # 画像を使用しない場合は $imnew = 'NEW';などに書き換えてください。 # -------------- $rhost = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($rhost eq $addr || $rhost eq "") { $rhost = gethostbyaddr(pack('C4',split(/\./,$addr)),2) || $addr; } &form_decode; $mode = $FORM{'mode'}; @lines = &read_data($datafile); if ($banner == 1){require($banner_data);} if($mode eq 'regist'){®ist;} print "Content-type: text/html\n\n";&head;$aaa=1; if($mode eq 'edit'){&editor;} if($mode eq 'useredit'){&uedit;} if($mode eq 'ed'){&user;} if($mode eq 'delete'){&del2;} if($mode eq 'pick'){&pick;} if($mode eq 'new'){&neo;} &view; &plist; &html_end; # ---------------- sub form_decode{ if($ENV{'REQUEST_METHOD'} eq "POST"){read(STDIN, $buffer, $ENV{CONTENT_LENGTH});} else{$buffer = $ENV{'QUERY_STRING'}}; @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); &jcode'h2z_sjis(*value); $value =~ s//>/g; $value =~ s/<>/<>/g; $value =~ s/<\!--/<\!--/g; $FORM{$name} = $value; } } # -------------- sub read_data{ &lock_file; if (!open(IN,$_[0])){ unlink($lockfile); &error("現在は使えません。"); } local(@lines) = ; close(IN); unlink($lockfile); return @lines; } #------------ sub write_data{ local($datafile,@lines) = @_; &lock_file; if (!open(OUT,">$datafile")) { unlink($lockfile); &error("現在は使えません。"); } print OUT @lines;close(OUT); unlink($lockfile); return @lines; } #------------ sub lock_file{ if($lock == 0){return;} local($wait) = 4; while (!symlink(".", $lockfile)) { if ($wait-- <= 0) { local($mtime) = (stat($lockfile))[9]; if ($mtime < time()-300) { unlink($lockfile);} &error("ロックファイルが存在してます。"); } sleep 1; } } #------------ sub head { print<<"_HONOKA_"; $title $bodytag $banner1
_HONOKA_ } # -------------- sub html_end{ #作者のHPへのリンクを消さないでください。 print<<"_HONOKA_";
$banner2
EVENT GUIDE
_HONOKA_ exit; } # --------------- sub neo{ print<<"_HONOKA_";

SiteTOP Return.... TOP Return.....

イベント登録画面

投稿者
 
E-mail
 
HP
 
イベント名
 
ステージ
 
サーキット名
 
開催日
 
時間
  (例)午前10時〜午後5時
料金
 
募集台数
 
内容
  開催内容や紹介コメントを記入してください。
 
問い合わせ先
 
問い合わせ電話
 
編集用パス
  半角英数で8文字以内

    

_HONOKA_ &html_end; } # --------------- sub view{ print<<"_HONOKA_";

新規投稿管理SiteTOP Return....


$imnew ・・・ 新着(1週間以内)    $immail ・・・ 連絡先MAIL    $imhome ・・・ ホームページあり

_HONOKA_ } # --------------- sub plist{ print<<"_HONOKA_";
_HONOKA_ $flg = 0; local($dmy,$dmy,$dmy,$day,$month,$year) = localtime(); $year = $year+1900; $month++; foreach($month,$day){if($_ < 10){$_ = "0$_";}} $chtime = "$year$month$day"; for($i=0;$i<@lines;$i++){ local($htime,$wtime,$name,$email,$url,$event,$date,$area) = split(/<>/,$lines[$i]); if($chtime <= $htime){ push(@new,$lines[$i]); &img; print<<"_HONOKA_"; _HONOKA_ } else{$flg = 1;} } print'
 
イベント名

日時

サーキット
MAIL
HP
投稿者
$neo
$event
$date
$area
$ml
$home
$name
'; if($flg == 1){@lines = &write_data($datafile,@new);} } # --------------- sub regist{ $name = $FORM{'name'}; $email = $FORM{'mail'}; $url = $FORM{'url'}; $event = $FORM{'event'}; $area = $FORM{'area'}; $year = $FORM{'year'}; $month = $FORM{'month'}; $day = $FORM{'day'}; $etime = $FORM{'etime'}; $money = $FORM{'money'}; $place = $FORM{'basyo'}; $naiyou = $FORM{'naiyou'}; $renraku = $FORM{'renraku'}; $tel = $FORM{'tel'}; $epass = $FORM{'epass'}; local($d) = int(rand(26)); $d2 .= ('a'..'z')[$d]; $d = int(rand(26)); $d2 .= ('a'..'z')[$d]; $dpass = crypt($epass,$d2); foreach($name,$event,$year,$month,$day,$money,$place){ $_ =~ s/\r\n//g; $_ =~ s/\r|\n//g; if($_ eq ''){&error('必須の項目が入力されていません。');} } foreach($email,$url,$etime,$area,$renraku,$tel){ $_ =~ s/\r\n//g; $_ =~ s/\r|\n//g; } $naiyou =~ s/\r\n/
/g; $naiyou =~ s/\r|\n/
/g; if(length($naiyou) < 10){&error('この書き込みは認められません。');} if(length($naiyou) > 1200){&error('1200文字以上の投稿は、受け付けられません。');} if(($day < 1)||($day > 31)){&error('日付が間違っています。');} if(($month < 1)||($month > 12)){&error('日付が間違っています。');} if($year < 1900){&error('年は、西暦で書いてください。');} foreach($month,$day){if(length($_) < 2){$_ = "0$_";}} $htime = "$year$month$day"; $youbi = &getweek($year,$month,$day); foreach($month,$day){if($_ < 10){$_ =~ s/0//;}} $wtime = time; $ev = "$htime<>$wtime<>$name<>$email<>$url<>$event<>$month月$day日($youbi[$youbi])<>$area<>$etime<>$money<>$naiyou<>$renraku<>$tel<>$place<>$dpass<>\n"; local(@new); for($i=0;$i<@lines;$i++){ if(($arp==1)||($htime > $lines[$i])){push(@new,$lines[$i]);} else{push(@new,$ev);push(@new,$lines[$i]);$arp=1;} } if($arp == 0){push(@new,$ev);} @lines = &write_data($datafile,@new); } sub getweek{ local($year, $month, $day) = (@_); if ($month == 1 || $month == 2) { $year--; $month += 12; } int($year + int($year/4) - int($year/100) + int($year/400) + int((13*$month+8)/5) + $day) % 7; } # --------------- sub pick{ $no = $FORM{'no'}; local($flg,$i)=(0,0); while($flg==0){ local($wt) = (split(/<>/,$lines[$i]))[1]; if($wt == $no){$flg = 1;}else{$i++;} if($i == @lines){$flg = 2;} } if($flg == 2){&error('その記事は存在しません。');} else{ local($ht,$wtime,$name,$email,$url,$event,$date,$area,$et,$money,$naiyou,$renraku,$tel,$place)=split(/<>/,$lines[$i]); local(@dd) = localtime($wtime); $dd[5] = $dd[5]+1900;$dd[4]++; &img; print<<_HONOKA_;

      Site TOP Return....  TOP Return.....


$imnew ・・・ 新着(1週間以内)    $immail ・・・ 連絡先MAIL    $imhome ・・・ ホームページあり

$neo
イベント名 :  $event
開催日◆$date
ステージ◆$stage  
時間◆$et
料金◆$money
募集台数◆$place
催し内容等◆

$naiyou

問い合わせ先◆$renraku
問い合わせ電話◆$tel
投稿者◆$name  投稿日◆$dd[5].$dd[4].$dd[3]
サーキット◆$area   $home $ml
_HONOKA_ } &html_end; } sub img{ if((time - $wtime) < 604800){$neo = "$imnew";} else{$neo = ' ';} if($email eq ''){$ml = ' ';}else{$ml = "$immail";} if(length($url) < 10){$home = ' ';}else{$home = "$imhome";} } # --------------- sub editor{ if($FORM{'pass'} ne "$pass"){ print<<"_HONOKA_";
_HONOKA_ &html_end; }else{ &del; print<<"_HONOKA_";


管理室
戻る
削除したい場合は削除したい投稿をチェックしてから投稿削除のボタンをクリックしてください。

_HONOKA_ for($i=0;$i<@lines;$i++){ local($dmy,$no,$name,$dmy,$dmy,$event) = split(/<>/,$lines[$i]); print<<"_HONOKA_"; _HONOKA_ } print"
$event 投稿者:$name
"; &html_end; } } sub del{ local($fam) = 0; for($i=0;$i<@lines;$i++){ local($dmy,$no)=split(/<>/,$lines[$i]); if($FORM{"$no"} ne 'on'){push(@new,$lines[$i]);} else{$fam = 1;} } if($fam == 1){@lines = &write_data($datafile,@new);} } # --------------- sub uedit{ $epass = $FORM{'epass'}; $eno = $FORM{'eno'}; foreach(@lines){ local($ax) = (split(/<>/,$_))[1]; if($eno == $ax){$data = $_;} } if($data eq ''){&error("その記事は存在しません。");} local($ht,$wtime,$name,$email,$url,$event,$date,$area,$et,$money,$naiyou,$renraku,$tel,$place,$dpass,$stage)=split(/<>/,$data); if($epass ne $pass){ if(crypt($epass,$dpass) ne $dpass){&error('パスワードが違います。');} } local(@aho) = split (//,$ht); local($year,$month,$day) = ("$aho[0]$aho[1]$aho[2]$aho[3]","$aho[4]$aho[5]","$aho[6]$aho[7]"); foreach($month,$day){if($_ < 10){$_ =~ s/0//;}} $naiyou =~ s/
/\n/ig; print<<"_HONOKA_";

編集用画面

投稿者
 
E-mail
 
HP
 
イベント名
 
サーキット名
 
開催日
 
時間
  (例)午前10時〜午後5時
料金
 
募集台数
 
内容
  開催内容や紹介コメントを記入してください。  
問い合わせ先
 
問い合わせ電話
 
編集用パス
  半角英数で8文字以内

    

_HONOKA_ &html_end; } # --------------- sub user{ $epass = $FORM{'epass'}; $eno = $FORM{'no'}; foreach(@lines){ local($ax) = (split(/<>/,$_))[1]; if($eno == $ax){$data = $_;} } if($data eq ''){&error("その記事は存在しません。");} local($ht,$wtime,$name,$email,$url,$event,$date,$area,$et,$money,$naiyou,$renraku,$tel,$place,$dpass)=split(/<>/,$data); if($epass ne $pass){ if(crypt($epass,$dpass) ne $dpass){&error('パスワードが違います。');} } $name = $FORM{'name'}; $email = $FORM{'mail'}; $url = $FORM{'url'}; $event = $FORM{'event'}; $area = $FORM{'area'}; $year = $FORM{'year'}; $month = $FORM{'month'}; $day = $FORM{'day'}; $etime = $FORM{'etime'}; $money = $FORM{'money'}; $place = $FORM{'basyo'}; $naiyou = $FORM{'naiyou'}; $renraku = $FORM{'renraku'}; $tel = $FORM{'tel'}; foreach($name,$event,$year,$month,$day,$money,$place){ $_ =~ s/\r\n//g; $_ =~ s/\r|\n//g; if($_ eq ''){&error('必須の項目が入力されていません。');} } foreach($email,$url,$etime,$area,$renraku,$tel){ $_ =~ s/\r\n//g; $_ =~ s/\r|\n//g; } $naiyou =~ s/\r\n/
/g; $naiyou =~ s/\r|\n/
/g; if(length($naiyou) < 10){&error('この書き込みは認められません。');} if(length($naiyou) > 1200){&error('1200文字以上の投稿は、受け付けられません。');} if(($day < 1)||($day > 31)){&error('日付が間違っています。');} if(($month < 1)||($month > 12)){&error('日付が間違っています。');} if($year < 1900){&error('年は、西暦で書いてください。');} foreach($month,$day){if(length($_) < 2){$_ = "0$_";}} $htime = "$year$month$day"; $youbi = &getweek($year,$month,$day); foreach($month,$day){if($_ < 10){$_ =~ s/0//;}} $ev = "$htime<>$eno<>$name<>$email<>$url<>$event<>$month月$day日($youbi[$youbi])<>$area<>$etime<>$money<>$naiyou<>$renraku<>$tel<>$place<>$dpass<>\n"; local(@new); for($i=0;$i<@lines;$i++){ local($x) = (split(/<>/,$lines[$i]))[1]; if($eno != $x){ if(($arp==1)||($htime > $lines[$i])){push(@new,$lines[$i]);} else{push(@new,$ev);push(@new,$lines[$i]);$arp=1;} } } if($arp == 0){push(@new,$ev);} @lines = &write_data($datafile,@new); } # --------------- sub del2{ $epass = $FORM{'epass'}; $eno = $FORM{'no'}; for($i=0;$i<@lines;$i++){ local($x) = (split(/<>/,$lines[$i]))[1]; if($x == $eno){ if($epass ne $pass){ local($dpass) = (split(/<>/,$lines[$i]))[14]; if(crypt($epass,$dpass) ne $dpass){push(@new,$lines[$i]);} } }else{push(@new,$lines[$i]);} } @lines = &write_data($datafile,@new); } # --------------- sub error{ if($aaa != 1){print "Content-type: text/html\n\n";&head;} print "エラー発生



$_[0]"; &html_end; } # ---------------