#!/usr/local/bin/perl
# #################################################
# #
# #学文社(講座一覧)
# #N.Seto
# #
# #last update 2001/06/11
# #
# #################################################
# -------------------------------------------------
# 以下設定項目です
# -------------------------------------------------
# ######## 初期設定 ######## #
sub first
{
# ##基本的設定## #
# jcodeの有[0]無し[1]
$jcodeflag = 1;
# タグに変換[0]/無変換[1]
$tagflag = 0;
# ログの保存[1]/非保存[0]
$saveflag = 0;
# メールの送信[1]/非送信[0]
$mailflag = 0;
# このファイルのファイル名
$this = './.cgi';
# サンクス画面ジャンプ先
$url = 'http://www';
# ファイルへのパス
$path = './';
# 読み込みHTMLファイル
$html_file = 'form.html';
# jcodeに関する設定
if($jcodeflag == 1)
{
$jcode = '../jcode.pl';
require "$jcode";
}
# ログ保存に関する設定
if($saveflag == 1)
{
# flock不使用[0]/flock使用[1]/flock不使用[2](UNIX ONLY)/flock不使用[3](UNIX and NT)/flock不使用[4](can't rename and procces NT system)
$flockflag = 1;
# 拡張子の指定
$ext = 'dat';
# ログ保存用のファイル指定
$logfile = "./.$ext";
}
# sendmailに関する設定
if($mailflag == 1)
{
$sendmail = '/usr/lib/sendmail';
# 管理者側への設定
$mail_to_admin = ''; # メールの送信先
$mail_from_admin = ''; # メールの送信元
# ユーザー側への設定
$mail_to_user = ''; # メールの送信先
$mail_from_user = ''; # メールの送信元
}
return;
}
# ######## 初期設定2 ######## #
sub second
{
}
# -------------------------------------------------
# 設定項目はここまでです
# -------------------------------------------------
# ######## メイン ######## #
&first;
&form_decode;
# &second;
# &connect_data;
# &check_data;
# &check_mail($);
&list_html;
exit;
# ########フォームからのデータ処理######## #
sub form_decode
{
if($ENV{'REQUEST_METHOD'} eq 'POST')
{
if($ENV{'CONTENT_LENGTH'} > 204800){&error('COMMENT DATA IS OVER FLOWED');}
read(STDIN, $QUERY_DATA, $ENV{'CONTENT_LENGTH'});
}
else {$QUERY_DATA = $ENV{'QUERY_STRING'};}
@pairs = split(/&/, $QUERY_DATA);
foreach $pair (@pairs)
{
if($pair eq 'test') {&error('TEST OK');}
($key, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# ログファイルを作る場合
if($saveflag == 1)
{
# CSV形式の記録ならば「,」を大文字に変換
if($ext eq 'csv') {$value =~ s/\,/,/g;}
# CSVでなければ区切り文字である「<>」を大文字に変換
else {$value =~ s/<>/<>/g;}
}
# タグを使用するならばHTML文字に変換
if($tagflag == 1)
{
$value =~ s/&/&/g;
$value =~ s/"/"/g;
$value =~ s/</g;
$value =~ s/>/>/g;
$value =~ s/\r\n/
/g;
$value =~ s/\r|\n/
/g;
}
# それ以外時の変換
else
{
}
if($jcodeflag == 1)
{
# &jcode'h2z_sjis(\$value);
&jcode'convert(*value,'euc');
}
# 同じNAMEで送信されたら「、」で繋ぐ
if($$key ne '') {$$key .= "、";}
$$key .= $value;
}
return;
}
# ######## タグ変換 ######## #
sub tag_convert
{
$_[0] =~ s/&/&/g;
$_[0] =~ s/"/"/g;
$_[0] =~ s/</g;
$_[0] =~ s/>/>/g;
# $_[0] =~ s/ / /g;
$_[0] =~ s/\r\n/
/g;
$_[0] =~ s/\r|\n/
/g;
return;
}
# ######## タグ変換 ######## #
sub confirm_convert
{
$_[0] =~ s/&/&/g;
$_[0] =~ s/"/"/g;
return;
}
# ######## タグ逆変換 ######## #
sub tag_invert
{
$_[0] =~ s/
/\n/g;
$_[0] =~ s/ / /g;
$_[0] =~ s/>/>/g;
$_[0] =~ s/</"}
# if( eq '') {$error .= "「」
"}
# if($error ne '') {&error("$errorは必須項目です \n\n";
$debug_flag = 1;
return;
}
# ######## error出力 ######## #(引数:メッセージ)
sub error
{
print << "END";
Content-type: text/html
");}
return;
}
# ######## メールの型チェック ######## #
sub check_mail
{
if($_[0] !~ /^[\w\.\-]+\@[\w\.\-\?]+$/)
{
&error('「E-mail」が正しくありません');
}
return;
}
# ######## 一覧HTML ######## #
sub list_html
{
@class = split(/、/, $class);
@html = &openfile_r($html_file);
# 選択済みのチェック化
for($i = 0; $i < $num; $i++)
{
$t_html = $html[$i];
&jcode'convert(*t_html, 'euc');
$t_html =~ s///g;
foreach $class (@class)
{
if(index($t_html, "value=\"$class\"") >= 0)
{
$t_html =~ s/value=\"$class\"/value=\"$class\" checked/g;
}
$html[$i] = $t_html;
}
}
# HTML出力
print "Content-type: text/html\n\n";
foreach $html (@html)
{
&jcode'convert(*html, 'sjis');
print $html;
}
exit;
}
# ######## ログの保存 ######## #
sub save_log
{
@data = &openfile_r($logfile);
unshift @data, "\n";
&openfile_w($logfile, @data);
return;
}
# ######## 2重書き込みチェック ######## #
sub check_double
{
@data = &openfile_r($logfile);
foreach $line (@data)
{
# ($, $) = split(//, $line);
# if($ eq $) {&error('2重書き込み');}
}
return;
}
# ######## 利用者へのメール送信 ######## #
sub sendmail_user
{
# メールのタイトル
$mail_subject = '';
# 以下送信メッセージ
$mail_msg = << "END";
END
if($jcodeflag == 1)
{
&jcode'convert(*mail_subject, 'jis');
&jcode'convert(*mail_msg, 'jis');
}
&sendmail($mail_to_user, $mail_from_user, $mail_subject, $mail_msg);
return;
}
# ######## 管理者へのメール送信 ######## #
sub sendmail_admin
{
# メールのタイトル
$mail_subject = '';
# 以下送信メッセージ
$mail_msg = << "END";
END
if($jcodeflag == 1)
{
&jcode'convert(*mail_subject, 'jis');
&jcode'convert(*mail_msg, 'jis');
}
&sendmail($mail_to_admin, $mail_from_admin, $mail_subject, $mail_msg);
return;
}
# ######## メール送信 ######## # (引数:送信先, 送信先, タイトル, メッセージ)
sub sendmail
{
if (!open(MAIL,"| $sendmail -t")) {&error('FAILED TO MAIL');}
print MAIL "Mime-Version: 1.0\n";
print MAIL "X-Mailer:MAILER\n";
print MAIL "To: $_[0]\n";
print MAIL "From: $_[1]\n";
print MAIL "Subject: $_[2]\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "Content-type: text/plain; charset=iso-2022-jp\n";
print MAIL "$_[3]\n";
close(MAIL);
return;
}
# ######## ジャンプ ######## # (引数:ジャンプ先)
sub jump
{
print "Location: $_[0]\n\n";
exit;
}
# ######## 読み込みログファイルオープン######## #(引数:読み込みファイル)
sub openfile_r
{
open(FILE, "<$_[0]"); # || die &error("Can't open $_[0] file error!");
if($flockflag == 1) {flock(FILE, 2);}
@data =
END
exit;
}
# ######## HTML出力 ######## #(引数:タイトル, メッセージ)
sub html
{
print << "END";
Content-type: text/html
END
exit;
}