#!/usr/bin/perl # # #●項目名 @table = ('no', '登録日','分類','title','sub-title','著者','イラスト等','規格','頁数','本体価格','他価格','ISBN','コメント','URL','画像',); #●1画面に表示する行数 $page = 30; #●編集対象となるファイル $file = 'csvdata/ger.csv'; #●表示順 (0:正順/古い順 1:逆順/新着順) .. 新規記録はこれに関係なくデータの後ろに追加される $rev = 0; #$url = "http://www.treasures-jp.com/e-surugadai"; $url = ""; #---------------------------------------------------------------------------- ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); @wday_array = ('日','月','火','水','木','金','土'); $date_now = sprintf("%04d年%01d月%01d日(%s)%02d時%02d分%02d秒",$year +1900,$mon +1,$mday,$wday_array[$wday],$hour,$min,$sec); if ($file eq '') { &error("File Not Found","編集するファイルが指定されていません."); } if (!-e "$file") { &error("File Not Found","$fileが見つかりません."); } if (!open(IN,"$file")) { &error("File Not Open","$fileを開くことができません."); } @BASE = ; close(IN); #データをNo降順にソート @BASE = sort { (split(/\,/,$b))[0] <=> (split(/\,/,$a))[0] } @BASE; #@check = grep(/[<>"]/,@BASE); #if (@check) { &error("Don't edit","<>"が含まれているデータがあるので編集できません."); } if ($rev) { @BASE = reverse @BASE; } #■フォームから送られた内容をデコード if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # &jcode'convert(*value,'sjis'); $value =~ s///g; $value =~ s/"//g; $value =~ s/\n//g; $value =~ s/\r//g; $value =~ s/\,//g; if ($value =~ /^(-EDIT-|-NEW-)$/) { $edit_num = $name; $EDIT = 1; } if ($value =~ /^(-DEL-)$/) { $delete = $name; $DELETE = 1; } if ($name eq 'key') { push(@EDIT,$value); } else { $FORM{$name} = $value; } } if ($EDIT) { &edit($edit_num); } elsif ($DELETE) { &delete($delete); } elsif ($FORM{'action'} ne '') { ®ist(@EDIT); } $start = $FORM{'start'}; if ($start eq '') { $start = 0; } $to = $start + $page - 1; if ($to > $#BASE) { $to = $#BASE; } &html($start,$to); exit; sub html { local ($start,$to) = @_; $next = $to + 1; if ($next > $#BASE) { $next = ''; } print "Content-type: text/html\n\n"; print <<"EOF"; $file 駿河台出版社 ドイツ語・スペイン語  登録事項編集・削除画面
[更新]
※注意
  • ボタンは1回だけ押して処理が完了するまで待たないとデータが破損する恐れがあります.
  • 画面を戻してボタンを押すと誤動作しますので絶対に避けてください.
  • 画面を戻したら必ず更新してから操作してください.
  • ブラウザの再読込ボタンや画面移動ボタン等は使わないでださい.

    EOF foreach (@table) { if ($_ eq '') { $_ = '(未定義)'; } print "\n"; } print <<"EOF"; EOF foreach $num ($start .. $to) { $BASE[$num] =~ s/\n//g; (@item) = split(/\,/,$BASE[$num],$#table +1); $num2 = $num + 1; $border++; if ($border % 2 != 0) { $bgcolor = "bgcolor=#ffffff"; } else { $bgcolor = ""; } print <<"EOF"; EOF foreach (@item) { print "\n"; } print <<"EOF"; EOF } print <<"EOF";
    編集$_削除
    $_

  • [登録編集メニューへ戻る] EOF if ($next ne '') { print <<"EOF";
    EOF } exit; } ######## 編集 ####### sub edit { #--- @_ --サブルーチンに渡すデータ local ($target) = @_; if ($target eq '-NEW-' || $target > $#BASE) { $FORM{'restart'} = 0; } if ($target ne '-NEW-') { $line = $BASE[$target]; $line =~ s/\n//g; @items = split(/\,/,$line); } else { $target = 'ADD'; } print "Content-type: text/html\n\n"; print <<"EOF"; $file 駿河台出版社 ドイツ語・スペイン語 登録事項編集・削除画面
    [編集をやめる] (もとの画面に戻る)
    ※注意
  • ボタンは1回だけ押して処理が完了するまで待たないとデータが破損する恐れがあります.
  • 画面を戻してボタンを押すと誤動作しますので絶対に避けてください.
  • ブラウザの再実行(リロード)ボタンや画面移動ボタン等は使わないでください.

    EOF #------start of edit data print <<"EOL"; EOL #-------end of edit data print <<"EOF";
    項目名 編集前の状態 編集フォーム
    $table[0]
    $items[0]
    $table[1]
    $items[1]
    $table[2]
    $items[2] (1:英語、2:ラテン語)
    $table[3]
    $items[3]
    $table[4]
    $items[4]
    $table[5]
    $items[5]
    $table[6]
    $items[6]
    $table[7]
    $items[7]
    $table[8]
    $items[8]
    $table[9]
    $items[9]
    $table[10]
    $items[10]
    $table[11]
    $items[11]
    $table[12]
    $items[12]
    $table[13]
    $items[13]
    $table[14]
    $items[14]

  • EOF exit; } sub regist { local (@EDIT) = @_; if ($FORM{'action'} eq 'ADD') { @NEW = @BASE; $write = join ',', @EDIT; if ($rev) { unshift(@NEW,"$write\n"); } else { push(@NEW,"$write\n"); } } else { foreach $num (0 .. $#BASE) { if ($num == $FORM{'action'} && $FORM{'action'} ne 'ADD') { $write = join ',', @EDIT; $BASE[$num] = "$write\n"; } push(@NEW,$BASE[$num]); } } if ($rev) { @NEW = reverse @NEW; } if (!open(OUT,"> $file")) { &error("File Not Open","$fileを開くことができません."); } if ($rev) { print OUT @NEW; } if ($FORM{'action'} eq '-NEW-') { $write = join ',', @EDIT; print OUT "$write\n"; } if (!$rev) { print OUT @NEW; } close(OUT); if (!open(IN,"$file")) { &error("File Not Open","$fileを開くことができません."); } @BASE = ; close(IN); if (open(OUT,">> $backup")) { print OUT "-- $date_now ----------\n"; print OUT @BASE; print OUT "\n"; close(OUT); } if ($rev) { @BASE = reverse @BASE; } } ###########データ削除############ sub delete { local ($delete) = @_; foreach $num (0 .. $#BASE) { if ($num == $delete) { next; } push(@NEW,$BASE[$num]); } if ($rev) { @NEW = reverse @NEW; } if (!open(OUT,"> $file")) { &error("File Not Open","$fileを開くことができません."); } print OUT @NEW; close(OUT); if (!open(IN,"$file")) { &error("File Not Open","$fileを開くことができません."); } @BASE = ; close(IN); if (open(OUT,">> $backup")) { print OUT "-- $date_now ----------\n"; print OUT @BASE; print OUT "\n"; close(OUT); } if ($rev) { @BASE = reverse @BASE; } $FORM{'start'} = $FORM{'restart'}; } sub error { local (@msg) = @_; local ($i); print "Content-type: text/html\n\n"; print <<"EOF"; ERROR

    $_[0]

    EOF foreach $i (1 .. $#msg) { print "$msg[$i]
    \n"; } print <<"EOF";

    [前の画面]

    EOF exit; }