#! /usr/local/bin/perl ######################################## #Railway Net joinnetwork # # Scripted by IshidoTaichi# # taichi@gpara.com # ######################################## $version = '1.0'; #環境変数設定 system("export ODBCINI=/usr/openlink/odbcsdk/doc/odbc.ini");$ENV{ODBCINI} = '/usr/openlink/odbcsdk/doc/odbc.ini'; #モジュールのロード use DBI; require './cgi-lib.pl'; require './jcode.pl'; require './headfoot.pl'; ########################### #メインルーチン main::lock(); &headfoot'header('ジーパラドットコム:レールウェイネットワーク登録'); &mode(); &headfoot'footer(); main::unlock(); exit; # ########################### ########################### #固有サブルーチン #モード判断 sub mode{ &ReadParse(*FORM); if ($FORM{ 'mode' } eq 'join'){ &checkon(); } elsif ($FORM{ 'mode' } eq 'join2'){ &joinDB(); } else{ &loginview(); } } ########################### #内容登録 sub joinDB{ $sitename = $FORM{ 'sitename' }; $siteurl = $FORM{ 'siteurl' }; $adminaddr = $FORM{ 'adminaddr' }; $comment = $FORM{ 'comment' }; $getid = $FORM{ 'genre' }; ($genre_a,$genre_b) = split (/-/,"$getid"); if ($ENV{'REQUEST_METHOD'} ne "POST"){ main::errors("何らかのエラーが発生しました。
"); } if ($ENV{'HTTP_REFERER'} !~ /^http:\/\/www.gpara/){ main::errors("何らかのエラーが発生しました。
"); } #iDを得る my @sql_value; $dbh = DBI->connect('DBI:ODBC:Contents','sa','', {AutoCommit=>1, LongReadLen=>15360, LongTruncOk=>0, RaiseError=>0}); $SQL = "SELECT MAX(id) FROM t1_net_db;"; $dbh->do($SQL); $str = $dbh->prepare($SQL); $str->execute(); @sql_value = $str->fetchrow(); $id = $sql_value[0]; $id++; #SQLに登録 $SQL = "INSERT INTO t1_net_db(id,sitename,url,admin,comments,genre_a,genre_b,admin_adr,expo) VALUES('$id','$sitename','$siteurl','','$comment','$genre_a','$genre_b','$adminaddr','1');"; &jcode'convert(*SQL,"sjis","euc","z"); # sjisに変換 $dbh->do($SQL); $str->finish(); $dbh->disconnect(); $ids = sprintf("%05d",$id); print <<"EOHTML";


ご登録ありがとうございました。

ありがとうございまつ。

[ GRN-$ids ] $sitename
を、登録いたしました。
掲載まではしばらく時間がかかる場合もございますのでご了承ください。

削除、登録内容の変更は、
toko\@gpara.com
までお知らせください。

■もどる■

EOHTML } ########################### #登録内容確認 sub checkon{ $sitename = $FORM{ 'sitename' }; $siteurl = $FORM{ 'siteurl' }; $adminaddr = $FORM{ 'adminaddr' }; $comment = $FORM{ 'comment' }; #不正な項目の確認 $errput = ""; if ($sitename eq ""){ $errput .= "サイト名が記入されていません
"; } if ($siteurl eq ""){ $errput .= "URLが記入されていません
"; } elsif ($siteurl !~ /^http/){ $errput .= "URLが正しくありません
"; } $adminaddr = main::mailz2h( $FORM{'adminaddr'} ); if ($adminaddr eq ""){ $errput .= "メールアドレスが正しく記入されていません
"; } if ($comment eq ""){ $errput .= "説明が記入されていません
"; } if ($errput ne ""){ main::errors($errput); } #ジャンルを入手 $getid = $FORM{ 'genre' }; ($tmp,$getid) = split (/-/,"$getid"); my @sql_value; $dbh = DBI->connect('DBI:ODBC:Contents','sa','', {AutoCommit=>1, LongReadLen=>15360, LongTruncOk=>0, RaiseError=>0}); $SQL = "SELECT genre,genre_b FROM t1_genre_list where (gb_id = $getid);"; $dbh->do($SQL); $str = $dbh->prepare($SQL); $str->execute(); @sql_value = $str->fetchrow(); ($genre_a,$genre_b) = @sql_value; $genre_a =~ s/\s//g; $genre_a =~ s/\s//g; &jcode'convert(*genre_a,'euc'); &jcode'convert(*genre_b,'euc'); #表示 print <<"EOHTML";

--登録内容の確認--

以下の内容を 登録します。
ご確認ください。

登録ジャンル $genre_a鉄
$genre_b派
サイト名 $sitename
URL $siteurl
管理者メールアドレス $adminaddr
説明 $comment

EOHTML $dbh->do($SQL); $str->finish(); $dbh->disconnect(); &main::unlock(); } ########################### #ジャンルを得る sub getGenre{ my @sql_value; $dbh = DBI->connect('DBI:ODBC:Contents','sa','', {AutoCommit=>1, LongReadLen=>15360, LongTruncOk=>0, RaiseError=>0}); $SQL = "SELECT * FROM t1_genre_list;"; $dbh->do($SQL); $str = $dbh->prepare($SQL); $str->execute(); while (@sql_value = $str->fetchrow()){ ($genre_a,$genre_b,$genre_code_a,$genre_code_b,$ex1,$ex2) = @sql_value; if (($ex2 == 1)&&($ex2 == 1)){ &jcode'convert(*genre_a,'euc'); &jcode'convert(*genre_b,'euc'); $genre_a =~ s/\s//g; $genre_b =~ s/\s//g; $genrelist .= "\n"; } } } ########################### #コメントを得る sub getComment{ $SQL = "SELECT joincoment FROM t1_config;"; $dbh->do($SQL); $str = $dbh->prepare($SQL); $str->execute(); @sql_value = $str->fetchrow(); $comment = $sql_value[0]; &jcode'convert(*comment,'euc'); } ########################### #ログイン画面 sub loginview{ #変数部分処理 #現在アクティブなgenreを得る &getGenre(); #入力フォーム用コメントを得る &getComment(); print <<"EOHTML";

$comment
登録ジャンル
サイト名
URL
管理者メールアドレス
説明
※メールアドレス以外の登録内容は、レールウェイネットワーク内で公開されます。削除、登録内容の変更は、toko\@gpara.comまでお知らせください。
EOHTML &main::unlock(); } ########################### #必要サブルーチン #ファイルロック処理 sub lock { $lockfile = "./lockfile.loc"; $c = 0; while (-f "$lockfile") { $c++; if ($c >= 2) { unlink($lockfile); &errors("サーバが混雑しています。
もう一度試してみてください
ERROR_0x0011"); exit; } sleep(2); } if (! open(LOCK,">$lockfile")){errors("ロック失敗
ERROR_0x0101");} close(LOCK); } sub unlock { $lockfile = "./lockfile.loc"; unlink($lockfile); } #エラー処理 sub errors{ @msg = @_; print '
'; print '

登録エラーです。

'."\n"; print "$msg[0]\n"; print 'ごめんでつ。
'."\n"; print "$msg[1]
\n"; print "戻って入力しなおしてください
\n"; print 'もどる'."\n".'
'; print '
'; &main::unlock(); exit; } #メールアドレス正当性チェック sub mailz2h{ my $str = $_[0]; jcode::convert(\$str,'euc'); jcode::tr(\$str,'0-9A-Za-z_.@ー','0-9A-Za-z_.@-'); #エラーチェック(全角文字を含む) if ($str =~ /[\xA1-\xFE][\xA1-\xFE]/){ $str = undef; } #エラーチェック(@を含まない) if ($str !~ /[^\@]+\@[^\@]+\.[^\@]+/){ $str = undef; } return $str; }