#!/usr/local/bin/perl
# 掲示板2(フレームを利用したパターン)右画面
# id=bbs2.cgi
# update. 01.9.16
# 使用上の注意・・・漢字コードの変換が不完全ですので文字化けするおそれがあります。# そのつもりでお使い下さい。
# 日本語コード変換ライブラリ(v2.0)の指定# &ReadParse命令で、$in{ }の変数にフォーム入力データが格納される
require 'cgi-lib.pl';require 'jcode.pl';&ReadParse;
# 設置するURLを設定$reload = 'http://xxx/bbs2.cgi';
$file = "/cgi/bbs2.dat";$sendmail = '/usr/lib/sendmail';
# 掲示板へ記入したら管理者へメール通知するならON$send="off";# メールの送り先$myaddress =' oooooo@xxx.co.jp';
# データ確認デバッグモード(通常は$test=""、各画面で変数状態を見たいときは"on")$test="";
# 最大登録数$max=200;# メッセージの文字数制限(この値の半分が漢字数)$mojisu = 200;# 表示期間の設定(設定した日数後のファイル更新時に消去します、消去しない場合は0)$syokyo=7; # 1週間後
# 1画面表示件数$gyosu=10 ;
##################################### ## メインルーチン(処理の分岐) ## #####################################
# 消去日計算($byo,$fun,$ji,$dd,$mm,$yy,$yobi) = localtime(time);$mm++;# 2桁化$mm = sprintf("%.2d",$mm);$dd = sprintf("%.2d",$dd);# 西暦4桁処理if ($yy < 70) { $yy = $yy + 2000;}else { $yy = $yy + 1900;}# 本日$ymd=$yy.$mm.$dd;
$page=$in{'page'};$syurui=$in{'syurui'};# 最初に渡された状態セーブ$syurui_sv=$syurui;
# 該当データを調べるif ($syurui ne "all") { &read4 }
# 全体の流れを決定するif ($in{'action'} eq 'main') { &main; }
elsif ($in{'action'} eq 'kinyu') { &kinyu; }
elsif ($in{'action'} eq 'check') { ✓ &main; }
elsif ($in{'action'} eq 'meisai') { &meisai; }
elsif ($in{'action'} eq 'next') { &next; }
elsif ($in{'action'} eq 'back') { &back; }
elsif ($in{'action'} eq 'narabi') { &narabi; }# メール送信画面elsif ($in{'action'} eq 'email') { &email; }
# 詳細表示画面elsif ($in{'action'} eq 'teisei') {&teisei;&main; }
else { &first; }
# なくても良いが最終出口を示すexit;
############################################## ## データを読む # # ##############################################
sub read {
# データを読み各連想配列に加算する# 1 2 3 4 5 6# 日付時刻、宛先、内容、差出人、消去日、訂正用パスワード$j=0;# 配列の初期化@data=();
open(DB,"$file");flock(DB,2);while (<DB>) {($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$_);
# とりあえずキーがないデータを表示しないためif ($dt1 ne "") {
# 表示期限チェックif ($dt5 > 0 && $dt5 >= $ymd) {# 9は全部、他は指定分類のみ、指定なしも全件if ($syurui eq "all") { $data[$j]=$_ ;$j++}elsif ($syurui eq $dt2) { $data[$j]=$_ ;$j++}} # end of if
} # とりあえずここまで
} # end of while
flock(DB,8);close(DB);# データ数$cnt=@data;
} # end of read############################################## ## 登録データを読む(訂正削除用配列) # # ##############################################
sub read2 {
# データを読み各連想配列に加算するopen(DB,"$file");flock(DB,2);@data=<DB>;flock(DB,8);close(DB);
# データ数$cnt=@data;# 配列の初期化%idxdt=();
# 各レコードを日時をキーにした連想配列にセットするforeach (@data) {($idx,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$_);
# キーを変数名に入れて1レコード全体をセットする$idxdt{$idx} = $_;} # end of foreach
} # end of read2############################################## ## データを読む(全件) # # ##############################################
sub read3 {open(DB,"$file");flock(DB,2);@data=<DB>;flock(DB,8);close(DB);} # end of read3
############################################## # アンカータグで渡されたキーデータから該当内容を調べる # #############################################
sub read4 {
open(DB,"$file");flock(DB,2);
while (<DB>) {($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$_); # 指定レコードキーがあったらそのレコードの宛先をセットするif ($syurui == $dt1) { $syurui=$dt2 ;last ; }
flock(DB,8);close(DB);
} # end of read4######################### ## 項目分解ルーチン ## #########################sub bunkai {($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$bundt);
# 日付時刻分解$yy=substr($dt1,0,4);$mm=substr($dt1,4,2);$dd=substr($dt1,6,2);$ji=substr($dt1,8,2);$fun=substr($dt1,10,2);$byo=substr($dt1,12,2);$nichiji=$yy.$mm.$dd.$ji.$fun.$byo;$hizuke="$yy年$mm月$dd日$ji時$fun分";$hizuke1="$yy年$mm月$dd日";$hizuke2="$ji時$fun分";# 番号
# 内容の改行を元に戻す$dt3 =~ s/&k/\n/g;# 表示用に変換する$naiyo2 = $dt3;$naiyo2 =~ s/\n/<BR>/g;
} # end of bunkai
############################################## ## 最初に処理するルーチン # # ##############################################
sub first {
print "Content-type: text/html\n\n";
print <<EOM;<HTML><HEAD><TITLE>掲示板2</TITLE></HEAD><BODY BGCOLOR="#ffffff" BACKGROUND="http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif"> EOM
print '<BR><BR><FONT size=5 color="blue">';print '<CENTER>左側から表示させる内容を選択してください</CENTER></FONT>'."\n";print '<BR><BR>'."\n";$page=1;print '<form method="post" action="' . $reload . '">' . "\n";print '<input type=hidden name="action" value="kinyu">' . "\n";print '<input type=submit value=" 記入画面へ ">' . "\n";&hidpara;print '</FORM>';
print '</BODY></HTML>'. "\n";
} # end of first
############################################## ## メイン処理画面を表示する # # ##############################################
sub main {
# 表示用変数$page = $in{'page'};$sortkb = $in{'sortkb'} ;
&read;
# 昇順にするif ($sortkb == 1) { @data=reverse(@data);}# ページ数計算$page_max = (($cnt-1) / $gyosu) + 1;# 整数部をとりだす($page_max,$dummy)=split(/\./,$page_max);
# 表示出力処理print "Content-type: text/html\n\n";print <<EOM;<HTML><HEAD><TITLE>掲示板2</TITLE></HEAD><BODY BGCOLOR="#ffffff" BACKGROUND="http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif"> EOM
print '<TABLE BORDER="1">';print '<TR><TD>';print '<FONT SIZE=3 COLOR=#0000FF>'."\n";print '掲示板2'."\n";print '</FONT></TD>';print '<TD>指定データ</TD>';
print "<TH>該当件数</TH><TH><FONT COLOR=#0000FF>表示頁</FONT></TH><TH>最終頁</TH></TR>\n";
print '<TR VALIGN="MIDDLE"><TD ALIGN="CENTER">';print '<form method="post" action="' . $reload . '">' . "\n";print '<input type=hidden name="action" value="kinyu">' . "\n";print '<input type=submit value=" 記入画面へ ">' . "\n";&hidpara;print '</FORM>';print '</TD>';if ($syurui eq "all") { $sitei="全件" } else { $sitei=$syurui }print "<TD ALIGN=\"CENTER\"><FONT COLOR=#AA0000>$sitei</FONT></TD>\n";
print "<TD ALIGN=\"right\"><FONT COLOR=#AA0000>$cnt</FONT></TD><TD ALIGN=\"right\"><FONT COLOR=#0000FF>$page</FONT></TD>\n";print "<TD ALIGN=\"right\"><FONT COLOR=#AA0000>$page_max</FONT></TD>\n";print '</TR></TABLE>'."\n";
# 前頁表示
# ボタンを並べる# 上段print '<TABLE BGCOLOR="#ffffCC">';print '<TR VALIGN="BOTTOM">';# 表示順序print '<TD>';print '<form method="post" action="' . $reload . '">' . "\n";print '<input type=hidden name="action" value="narabi">' . "\n";&hidpara;if ($sortkb == 0) { $sortkbn = "日付の古いものを先に"; }else { $sortkbn = "日付の新しいものを先に"; }print '<input type=submit value="'.$sortkbn.'">' . "\n";print '</FORM>'. "\n";print '</TD>';print '<TD> </TD>';# 前頁表示print '<TD>';if ($page == 1) { print ' '; }else {print '<form method="post" action="' . $reload . '">' . "\n";print '<input type=hidden name="action" value="back">' . "\n";&hidpara;print '<input type=submit value="前頁">' . "\n";print '</FORM>';} # end of if
print '</TD>';print '<TD> </TD>';# 次頁表示print '<TD>';if ($page == $page_max) { print ' '; }else {print '<form method="post" action="' . $reload . '">' . "\n";print '<input type=hidden name="action" value="next">' . "\n";&hidpara;print '<input type=submit value="次頁">' . "\n";print '</FORM>'. "\n";} # end of ifprint '</TD>';print '<TD> </TD>';
print '</TR></TABLE>'."\n";print '</FORM>'. "\n";
# 該当データが0件の場合if ($cnt == 0) {print '<BR><BR><FONT size=5 color="blue">';print '<CENTER>該当データは0件です、選択内容を変えてご覧ください</CENTER></FONT>'."\n";return } # end of if
# 最初は詳細形式を表示する&disp3;
} # end of main
################################## hiddenパラメータ共通項目 ##################################sub hidpara {print '<input type=hidden name="page" value="'.$page.'">'."\n";print '<input type=hidden name="sortkb" value="'.$in{'sortkb'}.'">' . "\n";print '<input type=hidden name="syurui" value="'.$syurui_sv.'">' . "\n";} # end of hidpara
########################### ## 詳細表示ルーチン ## ###########################sub disp3 {
print "<TABLE BORDER=\"1\" WIDTH=\"100%\" >\n";print "<TR><TH>№</TH><TH>宛先</TH><TH>日付</TH><TH>内 容</TH><TH>差出人</TH></TR>\n";
# 行数分だけ繰り返すfor($i=1; $i<=$gyosu; $i++) {
#print '<TR>';# 1列目はページカウンタ*行数+$i
$lno=$gyosu * ($page - 1) + $i;$no=$lno-1;
# 項目分解処理$bundt=$data[$no];&bunkai;
# 分類別色$iro=$buncol[$bunrui];
print '<TR>';print '<TD ALIGN="right"><FONT COLOR='.$iro.'>'.$lno.'</FONT>'."\n";if ($test eq "on") { print '<BR>'.$bundt.''."\n"; } # テスト表示print '</TD>'."\n";print '<TD ALIGN="left" NOWRAP><FONT COLOR='.$iro.'>'.$dt2.'</FONT></TD>';print '<TD ALIGN="left" NOWRAP><FONT COLOR='.$iro.'>'.$hizuke1.'<BR>'.$hizuke2.'</FONT></TD>'; print '<TD ALIGN="left"><FONT COLOR='.$iro.'>';$act="meisai";print '<A HREF = "'.$reload.'?action='.$act.'&keyno='.$dt1.'&tbno='.$lno.'&page='.$page.'&sortkb='.$sortkb.'">'.$naiyo2.'</A>'; print '</FONT><BR>'."\n";print '</TD>'."\n";print '<TD ALIGN="left"><FONT COLOR='.$iro.'>'.$dt4.'</FONT></TD>'."\n";print '</TD>'."\n";#print '<TD ALIGN="left"><FONT COLOR='.$iro.'>'.$dt5.'</FONT></TD>'."\n";#print '</TD>'."\n";#print '<TD ALIGN="left"><FONT COLOR='.$iro.'>'.$dt6.'</FONT></TD>'."\n";print '</TR>'."\n";
# 最終データを表示したら抜けるif ($lno >= $cnt) { last }
} # end of for
print '</TABLE>';print "</BODY></HTML>\n";
} # end of disp3
############################################## ## 掲示板新規記入処理 # # ##############################################
sub kinyu {# 消去日が設定してある場合if ($syokyo > 0) {# 消去日計算$syokyobyo = $syokyo * 60 * 60 * 24;($byo,$fun,$ji,$dd,$mm,$yy,$yobi) = localtime(time + $syokyobyo);$mm++;# 2桁化$mm = sprintf("%.2d",$mm);$dd = sprintf("%.2d",$dd);$ji = sprintf("%.2d",$ji);$fun = sprintf("%.2d",$fun);$byo = sprintf("%.2d",$byo);# 西暦4桁処理if ($yy < 70) { $yy = $yy + 2000;}else { $yy = $yy + 1900;}# 消去日$symd=$yy.$mm.$dd;} # end of ifelse { $symd=0 } # end of else
print <<EOM;<HTML><HEAD><TITLE>掲示板への記入</TITLE></HEAD><BODY BGCOLOR="#ffffff" BACKGROUND="http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif"> <H2>掲示板への記入</H2>EOM
# 外側の飾り線(画面の設定によってはわくとして表示しないことがある)print '<TABLE BORDER="10" CELLPADDING="10" WIDTH="100%">';print '<TR>';
print '<form method="post" action="' . $reload . '">' . "\n";print '<input type=hidden name="action" value="check">' . "\n";# 左画面から指定された宛先があれば表示させるif ($syurui eq "all") { $atesaki = "" } else { $atesaki = $syurui }print '宛先 <input type=text name="namae" size="40" MAXLENGTH="40" value="'.$atesaki.'"><br>'."\n";print '<BR>';print 'メッセージをどうぞ(漢字の場合100文字以内)';print '<BR>';print '<TEXTAREA NAME="naiyo" COLS=70 ROWS=5></TEXTAREA>' . "\n";print '<BR><BR>';
print '差出人 <input type=text name="sasidasi" size="40" MAXLENGTH="40">' . "\n";print '<BR><BR>';
print '<FONT COLOR=#AA0000>';print '登録後にあなたが訂正削除する場合に必要。未設定時は訂正削除不可';print '</FONT>';print '<BR>';print '訂正削除パスワード <input type=text name="pwd1" size="10" MAXLENGTH="10">' . "\n";print '<BR><BR>';
print '<FONT COLOR=#AA0000>';print "表示期限は本日より $syokyo日間です、要変更の場合は訂正して下さい\n";print '<BR>';print '</FONT>';print '表示期限 <input type=text name="symd" size="10" MAXLENGTH="10" value="'.$symd.'">' . "\n";print '<BR>';print '<TABLE BGCOLOR="#ffffCC">';print '<TR VALIGN="BOTTOM">';# 表示順序print '<TD>';print '<input type=submit value="登録">' . "\n";print '</TD>';print '<TD> </TD>';print '<TD>';print '<input type=reset value="入力内容取消">' . "\n";
# 登録日時セット($byo,$fun,$ji,$dd,$mm,$yy,$yobi) = localtime;$mm++;# 2桁化$mm = sprintf("%.2d",$mm);$dd = sprintf("%.2d",$dd);$ji = sprintf("%.2d",$ji);$fun = sprintf("%.2d",$fun);$byo = sprintf("%.2d",$byo);# 西暦4桁処理if ($yy < 70) { $yy = $yy + 2000;}else { $yy = $yy + 1900;}# 登録日時$nichiji=$yy.$mm.$dd.$ji.$fun.$byo;
# ここで同時刻に登録しようとした場合を考えてキーをユニーク(唯一)にするため# 日時の後に4桁のランダム数字を足す(これでも同一になった場合は訂正時1つのデータ消滅する)srand;$a=rand;$no4=substr($a,index($a,".")+1,4);if ($no4 == 0) { $no4 = "0000"; }$nichiji.=$no4;print '<input type=hidden name="nichiji" value="'.$nichiji.'">' . "\n";
# 共通データ渡し$syurui_sv=$nichiji;&hidpara;print '</FORM>'. "\n";print '</TD>';print '<TD> </TD>';print '<TD>';# 戻るprint '<form method="post" action="' . $reload . '">' . "\n";print '<input type=hidden name="action" value="main">' . "\n";print '<input type=submit value="記入せずに戻る">' . "\n";
# 最初の画面から来たときは何も指定データがないからif ($syurui eq "") { $syurui="all" }$syurui_sv=$syurui;&hidpara;print '</TD></TR></TABLE>'."\n";
print '</FORM>'. "\n";
# 外側の飾り線print '</TR></TABLE>';
print '</BODY></HTML>'. "\n";} # end of kinyu
########################################### ## 入力されたデータのチェックルーチン ## ###########################################
sub check {
&form_data;
# 宛名がない場合if ($namae eq "" ) { &error(2); }# 差出人がない場合if ($sasidasi eq "" ) { &error(3); }
# チェック通過、更新へ&update;
$syurui=$namae;# 管理者へメール送信if ($send eq "on") { &mymail }
} # end of check
############################################## ## 管理者へのメール送信ルーチン # # ##############################################
sub mymail {# 改行コードを戻す$naiyo =~ s/&k/\n/g;
$message = <<EOM;Subject: 掲示板記入連絡Reply-To: $myaddress
掲示板2への書き込みがありました。
宛先 : $namae
メッセージ
$naiyo
差出人 : $sasidasi
訂正削除パスワード : $pwd1
登録日時 : $nichijiEOM
# メール送信はJISと決められている&jcode'convert(*message,'jis');
open(MAIL,"|$sendmail $myaddress");print MAIL $message;close(MAIL);} # end of mymail############################################## ## フォーム入力データセットルーチン # # ##############################################sub form_data {$nichiji=$in{'nichiji'};$namae=$in{'namae'};$naiyo=$in{'naiyo'};
# メッセージの改行のみをカットする@chk = split(/\n/,$naiyo);$msg="";foreach (@chk) {if (length($_) > 1) {$msg=$msg.$_."\n";} # end of if} # end of foreach$naiyo=$msg;
$naiyo=~ s/\015\012/\n/g;$naiyo=~ s/\015/\n/g;$naiyo =~ s/\n/&k/g;# 文字数チェックif (length($naiyo) > $mojisu) { $naiyo = substr($naiyo,0,$mojisu); }
$sasidasi=$in{'sasidasi'};$pwd1=$in{'pwd1'};$symd=$in{'symd'};
# タグの無効化$ckdt=$namae ; &tagck ; $namae=$ckdt;# 宛先をセットする$syurui=$namae;$ckdt=$naiyo ; &tagck ; $naiyo=$ckdt;$ckdt=$sasidasi ; &tagck ; $sasidasi=$ckdt;$ckdt=$pwd1 ; &tagck ; $pwd1=$ckdt;$ckdt=$symd ; &tagck ; $symd=$ckdt;
} # end of form_data
################################ タグの無効化サブルーチン###############################sub tagck {$ckdt =~ s/</</ig;$ckdt =~ s/>/>/ig;$ckdt =~ s/<!--.*-->//ig;$ckdt =~ s/\,//g;
}
########################################### ## 次ページ表示処理 ## ###########################################
sub next {$in{'page'}++;&main;} # end of sub
########################################### ## 前ページ表示処理 ## ###########################################
sub back {if ($page > 1) { $in{'page'}--; }&main;} # end of sub########################################### ## 表示順序の変更指示 ## ###########################################sub narabi {if ($in{'sortkb'} == 0) { $in{'sortkb'} = 1; }else { $in{'sortkb'} = 0; }&main;} # end of sub
###################### ファイル登録#####################sub update {
# 1 2 3 4 5 6# 日付時刻、宛先、内容、差出人、消去日、訂正用パスワード$value = "$nichiji\t$namae\t$naiyo\t$sasidasi\t$symd\t$pwd1\n";$pwd1=$in{'pwd1'};
# 登録済みデータを読み配列にセットするif ($pwd1 ne "subetekesu") { &read3; unshift(@data,$value);}else {push(@data,$value);}
# 表示期限を過ぎたデータを消す%new=();foreach(@data) {($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$_);# 消去日が本日を過ぎていたら除外するif ($dt5 == 0 || $dt5 >= $ymd) { push(@new,$_);}} # end of foreach
# 掲示板は先頭から古い順になっているのでそのまま1番目のデータをシフトする$a=@new;if ($a > $max) {$herasu=$a - $max;for ($i=1; $i<=$herasu; $i++) { pop(@new) }} # end of if
# ファイル登録if (!open(WRITE,">$file")) { &error(0); }flock(WRITE,2);print WRITE @new;flock(WRITE,8);close (WRITE);
} # end of update
############################################## ## チェックエラー表示画面ルーチン # # ##############################################
sub error {
# &error(xx); で呼び出されたルーチンは、()内の数字が $error に代入される。
$error = $_[0];
if ($error eq "0") { $error_msg = 'ファイルがない、またはOPENできない。'; }
elsif ($error eq "2") { $error_msg = '宛名がありません'; }
elsif ($error eq "3") { $error_msg = '差出人は必ず入力してください'; }
elsif ($error eq "91") { $error_msg = '訂正パスワードが最初の登録時入力してありませんので、訂正/削除はできません。'; }
elsif ($error eq "92") { $error_msg = '訂正パスワードが最初の登録時のものと不一致のため、訂正/削除はできません。'; } print "Content-type: text/html\n\n";
print '<html><head><title>掲示板</title></head>' . "\n";print '<body bgcolor="#ff66ff" text="#000000" LINK="#0000ff" VLINK="#ff8888" ALINK="#FF0000">' . "\n";print '<h2>掲示板の入力で下記のエラーが発生しました</h2>' . "\n";print '<BR><BR>';print "<i>$error_msg</i>\n";
# リロードでもどると入力データが消えてしまうのでprint 'ブラウザ画面の戻るをクリックする'."\n";;print '</body></html>' . "\n";# サブルーチンからプログラムを抜けるのでexit;}
############################################## ## 明細データの訂正・削除ルーチン # # ##############################################
sub meisai {
&read2;# キー$keyno=$in{'keyno'};# 配列番号(次前データ移動用)$tbno=$in{'tbno'};# 実配列番号は-1$tbno--;
# 項目分解処理$bundt=$idxdt{$keyno};&bunkai;
&meisai_display;
} # end of meisai############################################## ## 明細データの訂正・削除ルーチン # # (次前データ処理用) ############################################## sub meisai2 {
# 項目分解処理$bundt=$data[$tbno];&bunkai;# キー$keyno=$dt1;
} # end of meisai2############################################## ## 明細データの共通表示ルーチン # # ############################################## sub meisai_display {# 明細表示データ№は配列№+1$mno=$tbno+1;
print "Content-type: text/html\n\n";print <<EOM;<HTML><HEAD><TITLE>掲示板の詳細</TITLE></HEAD><BODY BGCOLOR="#ffffff" BACKGROUND="http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif"> <H2>掲示板の詳細</H2>EOM
print '<form method="post" action="' . $reload . '">' . "\n";# 外側の飾り線print '<TABLE BORDER="10" CELLPADDING="10" WIDTH="100%">';print '<TR>';
print '宛先 <input type=text name="namae" size="40" MAXLENGTH="40" value="'.$dt2.'"><br>' . "\n";print '<BR>';
print 'メッセージをどうぞ';print '<BR>';print '<TEXTAREA NAME="naiyo" COLS=70 ROWS=5>'.$dt3.'</TEXTAREA>' . "\n";print '<BR><BR>';
print '差出人 <input type=text name="sasidasi" size="40" MAXLENGTH="40" value="'.$dt4.'"><br>' . "\n";print '<BR>';
print '表示期限 <input type=text name="symd" size="10" MAXLENGTH="10" value="'.$dt5.'"><br>' . "\n";print '<BR>';
# パスワードが設定してあれば変更可能# 最終項目なので改行コードがあるのでカットして比較する$dt6=~s/\n//g;if ($dt6 ne "") {print '訂正削除パスワード <input type=text name="pwd1" size="10" MAXLENGTH="10">' . "\n";print '<BR>';print '<FONT COLOR=#AA0000>';print '*訂正又は削除する場合に必要です。未設定時は訂正削除不可';print '</FONT>';print '<BR>';# 訂正か削除か選択するprint '<TABLE BGCOLOR="#ffffCC">';print '<TR><TD>';print '<input type="radio" name="syori" value ="0" checked>訂正削除なし' . "\n";print '</TD><TD> </TD><TD>';print '<input type="radio" name="syori" value ="1">訂正します' . "\n";print '</TD><TD> </TD><TD>';print '<input type="radio" name="syori" value ="2">削除します' . "\n";print '</TD><TD> </TD><TD>';print '<input type=hidden name="action" value="teisei">'."\n";print '<input type=hidden name="keyno" value="'.$keyno.'">'."\n";$syurui_sv=$dt1;&hidpara;
print '<input type=submit value="訂正削除の実行">' . "\n";print '</TD></TR></TABLE>'."\n";print '</FORM>'. "\n";print '<BR>';# キーの確認表示if ($test eq "on") { print "<right><i>($keyno)</i></right>\n"; }
} # end of if
############################
# 戻るprint '<form method="post" action="' . $reload . '">' . "\n";print '<input type=hidden name="action" value="main">' . "\n";$syurui_sv=$dt1;&hidpara;print '<input type=submit value="戻る">' . "\n";print '</FORM>'. "\n";print '<BR>';# 外側の飾り線print '</TR></TABLE>';
print '</BODY></HTML>'. "\n";} # end of meisai
###################### データ訂正#####################sub teisei {# 訂正削除なしの場合if (($in{'action'} eq 'teisei') && ($in{'syori'} == 0)) { return }# 入力項目チェック# フォーム入力データ&form_data;
# チェック通過、更新へ
&read2;# キー$keyno=$in{'keyno'};# 管理者用強制パスワードif ($pwd1 ne "nopassword") {# 訂正パスワードチェック$bundt=$idxdt{$keyno};($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$bundt);
#登録パスワードの改行コードをカットしたものと比較する (98.7.11)$pck=$dt6;$pck=~s/\n//g;
if ($pck eq "") { &error(91) }if ($pck ne $pwd1) { &error(92) }} # end of if########################
# 削除の場合if (($in{'action'} eq 'teisei') && ($in{'syori'} == 2)) { &sakujo; return }
# ここからは訂正選択時処理
# データ訂正# 1 2 3 4 5 6# 日付時刻、宛先、内容、差出人、消去日、訂正用パスワード$value = "$keyno\t$namae\t$naiyo\t$sasidasi\t$symd\t$pwd1\n";$idxdt{$keyno}=$value;&file_write;} # end of teisei
###################### データ削除#####################sub sakujo {
# データ削除delete $idxdt{$keyno};&file_write;} # end of sakujo
########################### ファイル登録共通処理 ###########################sub file_write {
# 登録用配列にデータセット%new=();
# 配列データを降順にソートする(keysでは登録順に値が返されるとは限らないため)@data=sort by_date keys(%idxdt);
foreach (@data){# 通常では発生しないが開発途中での空のデータを除く(10は適当)if (length($idxdt{$_}) > 10) {push(@new,$idxdt{$_});}} # end of foreach
} # end of write##################################### ## キー(日付)を降順ソートする ## #####################################sub by_date { $b cmp $a }
################ end of script ###################
このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー と 利用規約 が適用されます。
1文字以上入力してください
本文は少なくとも1文字以上必要です。
1文字以上入力してください。
下から選んでください: