#! /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";
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;
}