#!/usr/local/bin/perl # アドレス帳の保守 # id=address.cgi # update. 2000.10.10 # 日本語コード変換ライブラリ(v2.0)の指定 # &ReadParse命令で、$in{ }の変数にフォーム入力データが格納される require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse; # 設置するURLを設定 $reload = 'http://www0.kumagaya.or.jp/cgi-bin/users/chichibu/address.cgi'; $bkhmpg = "http://www.kumagaya.or.jp/~chichibu/cgi1.html"; $file = "/dialup/chichibu/cgi-bin/address.dat"; # 管理者用パスワードを設定する場合のみ(半角ならば10文字以内) $pwd="y"; # データ確認デバッグモード(通常は$test=""、各画面で変数状態を見たいときは"on") $test=""; # 種類名配列 $syuruimei[1]="パソコン"; $syuruimei[2]="携帯"; $syuruimei[3]="モバイル"; # 分類名配列 $bunruimei[1]="プライベート"; $bunruimei[2]="会社"; $bunruimei[3]="ビジネス"; $bunruimei[4]="その他"; # 分類毎の表示色 $buncol[1]="#000000"; # 黒 $buncol[2]="#0000FF"; # 青 $buncol[3]="#007700"; # 緑 $buncol[4]="#FF00FF"; # ピンク # 送信許可メッセージ $mailokmsg[0]="×"; $mailokmsg[1]="○"; # 表示順序の既定値 ・・・ 1=名前昇順・2=名前降順・3=アドレス昇順・4=アドレス降順・・・ $narabi=1; # 備考欄の最大文字数 $mojisu=100; #################################### # # # メインルーチン(処理の分岐) # # # #################################### # 全体の流れを決定する $page=$in{'page'}; if ($in{'action'} eq 'main') { &main; } elsif ($in{'action'} eq 'kinyu') { &kinyu; } elsif ($in{'action'} eq 'check') { ✓ &kakunin; } elsif ($in{'action'} eq 'update') { &update; } elsif ($in{'action'} eq 'meisai') { &meisai; } elsif ($in{'action'} eq 'next') { &next; } elsif ($in{'action'} eq 'back') { &back; } # 詳細表示画面 elsif ($in{'action'} eq 'teisei') {&teisei; &main;} else { &first; } # なくても良いが最終出口を示す exit; ############################################# # # # データを読む           # # # ############################################# sub read { # データを読み各連想配列に入れる #   1 2 3  4   5 6    7 # 名前、アドレス、種類、分類、登録日、備考、メール送信許可 # 種類とは、携帯かPCか open(DB,"$file"); flock(DB,2); $j=0; %data=(); while () { $bundt = $_; &bunkai; # 9は全部、他は指定分類のみ、指定なしも全件 # $bunrui_fは画面からの選択指示 ############################ # 各項目をソートさせるため、項目データ+連番をキーとした連想配列をつくる ############################ # 名前 if ($sortkb == 1 || $sortkb == 2) { $rkey="$name\0$j" } # アドレス if ($sortkb == 3 || $sortkb == 4) { $rkey="$email\0$j" } # 種類 if ($sortkb == 5 || $sortkb == 6) { $rkey="$syurui\0$j" } # グループ if ($sortkb == 7 || $sortkb == 8) { $rkey="$bunrui\0$j" } # メール送信許可 if ($sortkb == 9 || $sortkb == 10) { $rkey="$mailok\0$j" } # 登録日 if ($sortkb == 11 || $sortkb == 12) { $rkey="$tymd\0$j" } if ($bunrui_f == 9) { $data{$rkey}=$_ } elsif ($bunrui_f == $bunrui) { $data{$rkey}=$_ } # $jは先頭からの行b示す $j++; } # end of while flock(DB,8); close(DB); # データ数(キーの数から調べる) @a=keys(%data); $cnt=@a; # 次にソート処理・・・2.4.6.8.10は降順 if ($sortkb == 2 || $sortkb == 4 || $sortkb == 6 || $sortkb == 8 || $sortkb == 10 || $sortkb == 12) { @a=sort by_koujun keys(%data)} else { @a=sort by_shojun keys(%data)} # ソートしたキーから表示用の配列を作る @data=(); @datano=(); foreach (@a){ # ソート済みのデータが格納される push(@data,$data{$_}); # 元データの登録行b烽ィなじ添え字の配列にセットする ($dummy,$no) = split(/\0/,$_); push(@datano,$no); } # foreach } # end of read ############################################# # # # 登録データを読む(訂正削除用配列)  # # # ############################################# sub read2 { # データを読み各連想配列に加算する open(DB,"$file"); flock(DB,2); @data=; flock(DB,8); close(DB); # データ数 $cnt=@data; # 各レコードを連番をキーにした連想配列にセットする $idx=0; foreach (@data) { # 連想配列にセット $idxdt{$idx} = $_; # カウントアップ $idx++; } # end of foreach } # end of read2 ############################################# # # # データを読む(全件)          # # # ############################################# sub read3 { open(DB,"$file"); flock(DB,2); @data=; flock(DB,8); close(DB); } # end of read3 ######################## #            # # 項目分解ルーチン   # #            # ######################## sub bunkai { #   1 2 3  4   5 6 7 # 名前、アドレス、種類、分類、登録日、備考、メール送信許可 ($name,$email,$syurui,$bunrui,$tymd,$biko,$mailok) = split(/\t/,$bundt); # 内容の改行を元に戻す $biko =~ s/&k/\n/g; # 表示用に変換する $biko2 = $biko; $biko2 =~ s/\n/
/g; } # end of bunkai ############################################# # # # 最初に処理するルーチン         # # # ############################################# sub first { # 初期値セット $in{'page'}=1; # 内容は全件 $in{'bunrui'}=9; # 表示は明細 $in{'hyoji'}=3; $in{'gyosu'}=10 ; # 初期値は名前の昇順 $in{'sortkb'}=$narabi; &main; } # end of first ############################################# # # # メイン処理画面を表示する    # # # ############################################# sub main { # 表示用変数 $page = $in{'page'}; $bunrui_f = $in{'bunrui'} ; $hyoji = $in{'hyoji'} ; $gyosu = $in{'gyosu'} ; $sortkb = $in{'sortkb'} ; # ソート区分セーブ $sortkb_sv=$sortkb; &read; # ページ数計算 if ($hyoji == 2) { $page_max = ($cnt /(2*$gyosu)) + 1;} else { $page_max = ($cnt / $gyosu) + 1;} # 整数部をとりだす ($page_max,$dummy)=split(/\./,$page_max); # 表示出力処理 print "Content-type: text/html\n\n"; print < アドレス帳の保守 EOM print ''; print ''; print ''; print "\n"; print ''; print "\n"; print "\n"; print '
'; print ''."\n"; print 'アドレス帳の保守'."\n"; print '   登録件数表示頁最終頁
'; print '
' . "\n"; print '' . "\n"; print '' . "\n"; &hidpara; print '
'; print '
 '."\n"; print ''."\n"; print '
' . "\n"; print '' . "\n"; print '
' . "\n"; print '
$cnt$page$page_max
'."\n"; # 前頁表示 # ボタンを並べる # 上段 print ''; print ''; # 前頁表示 print ''; print ''; # 次頁表示 print ''; print ''; print ''; print '
'; if ($page == 1) { print ' '; } else { print '
' . "\n"; print '' . "\n"; &hidpara; print '' . "\n"; print '
'; } # end of if print '
  '; if ($page == $page_max) { print ' '; } else { print '
' . "\n"; print '' . "\n"; &hidpara; print '' . "\n"; print '
'. "\n"; } # end of if print '
  '; print '
' . "\n"; print ''."\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '
   '; $sels1="";$sels2="";$sels3="";$sels4="";$sels9=""; if ($bunrui_f == 9) {$sels9 = "SELECTED";} elsif ($bunrui_f == 1) {$sels1 = "SELECTED"; } elsif ($bunrui_f == 2) {$sels2 = "SELECTED"; } elsif ($bunrui_f == 3) {$sels3 = "SELECTED"; } elsif ($bunrui_f == 4) {$sels4 = "SELECTED"; } else {$sels9 = "SELECTED"; } print ''. "\n"; print '   '; $selh1="";$selh2="";$selh3=""; if ($hyoji == 1) {$selh1 = "SELECTED";} elsif ($hyoji == 2) {$selh2 = "SELECTED"; } else {$selh3 = "SELECTED"; } print ''. "\n"; print '   '; $sel5="";$sel10="";$sel30="";$sel40="";$sel50=""; if ($gyosu == 5) {$sel5 = "SELECTED";} elsif ($gyosu == 10) {$sel10 = "SELECTED"; } elsif ($gyosu == 30) {$sel30 = "SELECTED"; } elsif ($gyosu == 40) {$sel40 = "SELECTED"; } elsif ($gyosu == 50) {$sel50 = "SELECTED"; } else {$sel20 = "SELECTED"; } print ''. "\n"; print '   
'."\n"; print ''. "\n"; # 該当データが0件の場合 if ($cnt == 0) { print '

'; print '
該当データは0件です、選択内容を変えてご覧ください
'."\n"; return } # end of if # 最初は詳細形式を表示する if ($hyoji == 1) { &disp1; } elsif ($hyoji == 2) { &disp2; } else { &disp3; } } # end of main ################################# # hiddenパラメータ共通項目  # ################################# sub hidpara { print ''."\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; } # end of hidpara ########################## #            # #  詳細表示ルーチン  # #            # ########################## sub disp3 { # 表示順序 # 1-2  3-4 5-6 7-8 9-10 11-12 # 名前、アドレス、種類、グループ、メール送信許可、登録日 $act="main"; print "\n"; print "\n"; # 名前 &th_name; # アドレス &th_email; # 種類 &th_syurui; # グループ &th_bunrui; # 送信許可 &th_mailok; # 登録日 &th_tymd; print "\n"; # 行数分だけ繰り返す for($i=1; $i<=$gyosu; $i++) { # 1列目はページカウンタ*行数+$i $lno=$gyosu * ($page - 1) + $i; #$no=$lno-1; # 項目分解処理 $bundt=$data[$lno-1]; &bunkai; # 分類別色 $iro=$buncol[$bunrui]; print ''; print ''."\n"; print ''; print ''."\n"; print ''."\n"; print ''."\n"; print ''."\n"; # 送信許可 print ''."\n"; $tymd1=substr($tymd,0,8); #年月日 $tymd2=substr($tymd,8,4); #時分 (秒まではいらない) print ''."\n"; print ''."\n"; print ''."\n"; # 最終データを表示したら抜ける if ($lno >= $cnt) { last } } # end of for print '
備考
'; $act="meisai"; # $noは実行 $no=$datano[$lno-1]; print ''.$lno.''; print '
'."\n"; if ($test eq "on") { print '
'.$bundt.''."\n"; } # テスト表示 print '
'.$name.''.$email.''.$syuruimei[$syurui].''.$bunruimei[$bunrui].''.$mailokmsg[$mailok].''.$tymd1.'
'.$tymd2.'
'.$biko2.'
'; print "\n"; } # end of disp3 ############################## #             # #  見だし表示共通ルーチン  # #             # ############################## # ソート区分が1なら降順の2にする、それ以外は昇順の1にする sub th_name { if ($sortkb_sv == 1) { $sortkb = 2; $sortkbn = "名前"; } elsif ($sortkb_sv == 2) { $sortkb = 1; $sortkbn = "名前"; } else { $sortkb = 1; $sortkbn = "名前"; } print ''.$sortkbn.''. "\n"; } # ソート区分が3なら降順の4にする、それ以外は昇順の3にする sub th_email { if ($sortkb_sv == 3) { $sortkb = 4; $sortkbn = "アドレス"; } elsif ($sortkb_sv == 4) { $sortkb = 3; $sortkbn = "アドレス"; } else { $sortkb = 3; $sortkbn = "アドレス"; } print ''.$sortkbn.''. "\n"; } # ソート区分が5なら降順の6にする、それ以外は昇順の5にする sub th_syurui { if ($sortkb_sv == 5) { $sortkb = 6; $sortkbn = "種類"; } elsif ($sortkb_sv == 6) { $sortkb = 5; $sortkbn = "種類"; } else { $sortkb = 5; $sortkbn = "種類"; } print ''.$sortkbn.''. "\n"; } # ソート区分が7なら降順の8にする、それ以外は昇順の7にする sub th_bunrui { if ($sortkb_sv == 7) { $sortkb = 8; $sortkbn = "グループ"; } elsif ($sortkb_sv == 8) { $sortkb = 7; $sortkbn = "グループ"; } else { $sortkb = 7; $sortkbn = "グループ"; } print ''.$sortkbn.''. "\n"; } # ソート区分が9なら降順の10にする、それ以外は昇順の9にする sub th_mailok { if ($sortkb_sv == 9) { $sortkb = 10; $sortkbn = "送信許可"; } elsif ($sortkb_sv == 10) { $sortkb = 9; $sortkbn = "送信許可"; } else { $sortkb = 9; $sortkbn = "送信許可"; } print ''.$sortkbn.''. "\n"; } # ソート区分が11なら降順の12にする、それ以外は昇順の11にする sub th_tymd { if ($sortkb_sv == 11) { $sortkb = 12; $sortkbn = "登録日"; } elsif ($sortkb_sv == 12) { $sortkb = 11; $sortkbn = "登録日"; } else { $sortkb = 11; $sortkbn = "登録日"; } print ''.$sortkbn.''. "\n"; } # th_name ########################## #            # #  1列表示ルーチン  # #            # ########################## sub disp1 { $act="main"; print "\n"; print "\n"; # 名前 &th_name; # アドレス &th_email; # 種類 &th_syurui; # 行数分だけ繰り返す for($i=1; $i<=$gyosu; $i++) { # 項目分解処理 # 1列目はページカウンタ*行数+$i $lno=$gyosu * ($page - 1) + $i; $no=$lno-1; # 項目分解処理 $bundt=$data[$no]; &bunkai; # 分類別色 $iro=$buncol[$bunrui]; # $noは実行 $no=$datano[$lno-1]; print ''; print ''."\n"; print ''."\n"; print ''."\n"; print ''; # 最終データを表示したら抜ける if ($lno >= $cnt) { last } } # end of for print '
'; $act="meisai"; print ''.$lno.''; print '
'."\n"; print '
'.$name.''.$email.''.$syuruimei[$syurui].'
'; print "\n"; } # end of disp1 ########################## #            # #  2列表示ルーチン  # #            # ########################## sub disp2 { $act="main"; print "\n"; print "\n"; # ソート区分が1なら降順の2にする、それ以外は昇順の1にする if ($sortkb_sv == 1) { $sortkba = 2; $sortkbna = "名前"; } elsif ($sortkb_sv == 2) { $sortkba = 1; $sortkbna = "名前"; } else { $sortkba = 1; $sortkbna = "名前"; } print ''. "\n"; # ソート区分が3なら降順の4にする、それ以外は昇順の3にする if ($sortkb_sv == 3) { $sortkb = 4; $sortkbn = "アドレス"; } elsif ($sortkb_sv == 4) { $sortkb = 3; $sortkbn = "アドレス"; } else { $sortkb = 3; $sortkbn = "アドレス"; } print ''. "\n"; # 右側 print "\n"; print ''. "\n"; print ''. "\n"; print "\n"; # 行数分だけ繰り返す for($i=1; $i<=$gyosu; $i++) { # 1列目はページカウンタ*2*行数+$i $lno=2 * $gyosu * ($page - 1) + $i; $no=$lno-1; # 項目分解処理 $bundt=$data[$no]; &bunkai; # $noは実行 $no=$datano[$lno-1]; # 分類別色 $iro=$buncol[$bunrui]; print ''; print ''."\n"; print ''."\n"; # 2列目は1列目+行数 $rno=$lno + $gyosu; if ($rno <= $cnt) { $no=$rno-1; # 項目分解処理 $bundt=$data[$no]; &bunkai; # $noは実行 $no=$datano[$rno-1]; print ''."\n"; print ''."\n"; print ''; } # end of if # 最終データを表示したら抜ける if ($lno >= $cnt) { last } } # end of for print '
'.$sortkbna.''.$sortkbn.''.$sortkbna.''.$sortkbn.'
'; $act="meisai"; # $noは実行 $no=$datano[$lno-1]; print ''.$lno.''; print '
'."\n"; print '
'.$name.''.$email.''; $act="meisai"; print ''.$rno.''; print '
'."\n"; print '
'.$name.''.$email.'
'; print "\n"; } # end of disp2 ####################################### # # # 新規記入処理          # # # ####################################### sub kinyu { print "Content-type: text/html\n\n"; print < アドレス帳の新規登録

アドレス帳の新規登録

EOM print '
' . "\n"; print '' . "\n"; print 'グループ '. "\n"; print '

'; print '名前 
' . "\n"; print '
'; print 'E-mail 
' . "\n"; print '
'; print '種類はなんですか? '. "\n"; print '

'; print 'メール送信するならチェック '; print '

'; print '備考(漢字の場合100文字以内)'; print '
'; print '' . "\n"; print '
'; # パスワードを設定した場合のみ表示する if ($pwd ne "") { print '
'; print '追加登録パスワード ' . "\n"; print '
'; print ''; print '*この内容を登録するのに必要です。'; print ''; print '

'; } # end of if print '
'; print '  ' . "\n"; print '
'; # 共通データ渡し &hidpara; # 登録日時セット &nichiji; print '' . "\n"; print '
'. "\n"; # 戻る print '
'; print '
' . "\n"; print '' . "\n"; &hidpara; print '' . "\n"; print '
'. "\n"; print ''. "\n"; } # end of kinyu ############################ # 登録日時セットルーチン # ############################ sub nichiji { ($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桁処理 $yy = $yy + 1900; # 登録日時 $tymd=$yy.$mm.$dd.$ji.$fun.$byo; } # end of sub ########################################## # # # 入力されたデータのチェックルーチン # # # ########################################## sub check { # 名前の入力がない場合 if ($in{'name'} eq "") { &error(1); } # emailの入力がない場合 if ($in{'email'} eq "") { &error(2); } # パスワードチェック if ($pwd ne "" && $in{'passwd'} ne $pwd) { &error(3); } } # end of check ############################################# # # # 入力データ登録確認画面ルーチン     # # # ############################################# sub kakunin { print "Content-type: text/html\n\n"; print < アドレス帳入力データの確認

アドレス帳入力データの確認


EOM # フォームからの入力データ # 時刻表示用 #$jikan="$yy年$mm月$dd日$ji時$fun分$byo秒"; # フォーム入力データ &form_data; print ''; print ""."\n"; print ""."\n"; print ""."\n"; print ""."\n"; # 送信許可 if ($mailok eq "1") {$a="メール送信OKです" } else { $a="メール送信できません" } print ""."\n"; # 表示用に改行コードを<BR>タグにする $biko2 = $biko; $biko2 =~ s/&k/
/g; print ""."\n"; print ""."\n"; print "
グループ$bunruimei[$bunrui]
名前$name
メールアドレス$email
種類$syuruimei[$syurui]
送信許可$a
備考$biko2
登録日$tymd
"."\n"; # 確認 print '
' . "\n"; print '' . "\n"; # データ追加 $value = "$name\t$email\t$syurui\t$bunrui\t$tymd\t$biko\t$mailok\n"; if ($test eq "on") { print "追加データ=$value\n"; } &update; print '
'; print ''."\n"; print '
'."\n"; # 新規登録後は全件表示 $in{'bunrui'}=9; # 新規登録後は登録時刻順に表示させて1行目に出す $in{'sortkb'}=12; &hidpara; print "
\n"; print "\n"; print "\n"; } # end of kakunin ############################################# # # # フォーム入力データセットルーチン    # # # ############################################# sub form_data { $name=$in{'name'}; $email=$in{'email'}; $syurui=$in{'syurui'}; $bunrui=$in{'bunrui'}; $tymd=$in{'tymd'}; $biko=$in{'biko'}; # mailokは1とそれ以外なので、1でないなら0にする if ($in{'mailok'} ne "1") {$in{'mailok'}=0} $mailok=$in{'mailok'}; # 空行を1行までは許す $biko=~s/\n\n\n*/\n\n/g; # textarea処理 $biko=~ s/\015\012/\n/g; $biko=~ s/\015/\n/g; # 改行をいったん&kに置きかえる $biko =~ s/\n/&k/g; # 文字数チェック if (length($biko) > $mojisu) { $biko = substr($biko,0,$mojisu); } # タグの無効化 $ckdt=$name ; &tagck ; $name=$ckdt; $ckdt=$email ; &tagck ; $email=$ckdt; $ckdt=$hymd ; &tagck ; $hymd=$ckdt; $ckdt=$biko ; &tagck ; $biko=$ckdt; } # end of form_data ############################### # タグの無効化サブルーチン ############################### sub tagck { $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 update { # 登録済みデータを読み配列にセットする &read3; unshift(@data,$value); # ファイル登録 if (!open(WRITE,">$file")) { &error(0); } flock(WRITE,2); print WRITE @data; 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 "1") { $error_msg = '名前を入力してください。'; } elsif ($error eq "2") { $error_msg = 'メールアドレスを入力してください。'; } elsif ($error eq "3") { $error_msg = 'パスワード不一致のため訂正できません'; } print "Content-type: text/html\n\n"; print 'アドレス帳の登録エラー' . "\n"; print '' . "\n"; print '

アドレス帳の登録入力で下記のエラーが発生しました

' . "\n"; print '

'; print "$error_msg\n"; print '

'; # リロードでもどると入力データが消えてしまうので print 'ブラウザ画面の戻るをクリックする'."\n";; print '' . "\n"; # サブルーチンからプログラムを抜けるので exit; } ############################################# # # # 明細データの訂正・削除ルーチン    # # # ############################################# sub meisai { # ソート区分 $sortkb=$in{'sortkb'}; &read2; # キー # 配列番号(次前データ移動用) $tbno=$in{'tbno'}; # 項目分解処理 $bundt=$idxdt{$tbno}; &bunkai; &meisai_display; } # end of meisai ############################################# # # # 明細データの共通表示ルーチン     # # # ############################################# sub meisai_display { # 明細表示データbヘ配列a{1 $mno=$tbno+1; print "Content-type: text/html\n\n"; print < アドレス帳の詳細

アドレス帳の詳細

EOM print "
a@$mno / $cnt
\n"; print '
' . "\n"; if ($bunrui == 2) {$sel2 = "SELECTED";} elsif ($bunrui == 3) {$sel3 = "SELECTED"; } elsif ($bunrui == 4) {$sel4 = "SELECTED"; } else {$sel1 = "SELECTED"; } print 'グループ '. "\n"; print '

'; print '名前 
' . "\n"; print '
'; print 'メールアドレス 
' . "\n"; print '
'; if ($syurui == 2) {$sel2 = "SELECTED";} elsif ($syurui == 3) {$sel3 = "SELECTED"; } else {$sel1 = "SELECTED"; } print '種類 '. "\n"; print '

'; if ($mailok eq "1") {$chked="checked"} else {$chked=""} print 'メール送信するならチェック '; print '

'; print '備考'; print '
'; print '' . "\n"; print '

'; print '
'; # パスワードを設定した場合のみ表示する if ($pwd ne "") { print '訂正削除パスワード ' . "\n"; print '
'; print ''; print '*訂正又は削除する場合に必要です。'; print ''; print '

'; } # end of if # 訂正か削除か選択する print ''; print '
'; print '訂正削除なし' . "\n"; print '   '; print '訂正します' . "\n"; print '   '; print '削除します' . "\n"; print '   '; print ''."\n"; print ''."\n"; &hidpara; # 訂正ではもとの表示順で表示させる $in{'sortkb'}=$sortkb; print '' . "\n"; print '
'."\n"; print '
'. "\n"; # ボタンを並べる print ''; print ''; # 戻る print ''; print '
'; print '
' . "\n"; print '' . "\n"; &hidpara; print '' . "\n"; print '
'. "\n"; print '
'."\n"; print ''. "\n"; } # end of meisai ##################### # データ訂正 ##################### sub teisei { # 訂正削除なしの場合 if (($in{'action'} eq 'teisei') && ($in{'syori'} == 0)) { return } # 入力項目チェックへ ✓ # フォーム入力データ &form_data; &read2; # キー $tbno=$in{'tbno'}; # 削除の場合 if (($in{'action'} eq 'teisei') && ($in{'syori'} == 2)) { &sakujo; return } # ここからは訂正選択時処理 # 登録日時セット &nichiji; # 全項目を上書きする $value = "$name\t$email\t$syurui\t$bunrui\t$tymd\t$biko\t$mailok\n"; $idxdt{$tbno}=$value; &file_write; # 訂正後は登録時刻順に表示させて1行目に出す $in{'sortkb'}=12; # 訂正後は全件表示 $in{'bunrui'}=9; } # end of teisei ##################### # データ削除 ##################### sub sakujo { # データ削除 delete $idxdt{$tbno}; &file_write; # 削除後は全件表示 $in{'bunrui'}=9; } # end of sakujo ########################## # ファイル登録共通処理 # ########################## sub file_write { # 連想配列のキーの配列@keyから、ファイル登録用@newを作る @new=(); @key=keys(%idxdt); foreach (@key){ push(@new,$idxdt{$_}); } # end of foreach # ファイル登録 if (!open(WRITE,">$file")) { &error(0); } flock(WRITE,2); print WRITE @new; flock(WRITE,8); close (WRITE); } # end of write #################################### # # # キーを昇順にソートする     # # # #################################### sub by_date { $a cmp $b } #################################### # # # キーを昇順にソートする     # # # #################################### sub by_shojun { $a cmp $b } #################################### # # # キーを降順にソートする     # # # #################################### sub by_koujun { $b cmp $a } ################ end of script ###################