#!/usr/bin/perl # Copyright (c) CGIROOM. http://cgiroom.nu #======================================================================# # [Ver 1.02] database.cgi用 データエディタ # # このプログラムによって起きた事にCGIROOMは責任を負いません。 # 利用契約に同意できない方のご利用は、遠慮下さい。 #======================================================================# # 設 定 #◇ jcode.plまでのパス require 'jcode.pl'; #◇ データファイル名 $FILE ='../dat/graph_data132443.cgi'; #◇ フォームHTML $FORM = 'form.htm'; #◇ 管理者パスワード $pwd='tn2424'; #◇ member.plまでのパス require 'member.pl'; #◇ 新規データをデータ1行目に挿入するなら 1 。0なら最後尾 $unshift = 0; #======================================================================# # フォームデータ if($ENV{'REQUEST_METHOD'} eq "POST"){ read(STDIN,$QUERY,$ENV{'CONTENT_LENGTH'}); }else{ $QUERY = $ENV{'QUERY_STRING'}; } @QUERY=split(/&/,$QUERY); foreach (@QUERY){ ($n,$v) = split(/=/); $v =~ tr/+/ /; $v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/oeg; $v =~ s/\r\n|\n/\r/g; $v =~ s/\t/    /g; &jcode'convert(*v,'sjis'); $FORM{$n} .= $v; $line[$1] = $2 eq "tag" ? $v : &br(&tag($v),$2) if $n =~ /^data(\d+)(\D*)$/; } #======================================================================# # データ修正書き込み処理 if($FORM{'cmd'} eq "edit" && $FORM{'line'}){ &error('300k以上あるデータは修正できません') if -s $FILE > 01234567; open(IN,$FILE) || &error('データファイルを開けません'); @data = ; close(IN); if($FORM{'write'}){ &error('行指定が不正です') if $FORM{'line'} =~ /\D/; # $data[$FORM{'line'} - 1] = join("\t",@line[1..$#line],"\n"); $data[$FORM{'line'}] = join("\t",@line[1..$#line],"\n"); open(OUT,">".$FILE)|| &error('データファイルを更新できません'); print OUT @data; close(OUT); &msg('更新しました'); } # @data = split(/\t/,"\t".$data[$FORM{'line'} - 1]); @data = split(/\t/,"\t".$data[$FORM{'line'}]); &error('指定されたデータは存在しません') unless @data; open(HTML,$FORM)||&error('フォームファイルを開けません'); read(HTML,$html,-s HTML); close(HTML); $html =~ s/__(cmd|line)__/$FORM{$1}/g; $html =~ s/__data(\d+)([a-zA-Z]*)__/&tag($data[$1],$2)/eg; &html(\$html); }elsif($FORM{'cmd'} eq "new"){ &error('300k以上あるデータは修正できません') if -s $FILE > 01234567; if($FORM{'write'}){ if($unshift){ open(IN,$FILE) || &error('データファイルを開けません'); @data = ; close(IN); open(OUT,">".$FILE)|| &error('データファイルを更新できません'); print OUT join("\t",@line[1..$#line],"\n"),@data; close(OUT); }else{ open(OUT,">>".$FILE)|| &error('データファイルを更新できません'); print OUT join("\t",@line[1..$#line],"\n"); close(OUT); } &msg('データを追加しました'); } open(HTML,$FORM)||&error('フォームファイルを開けません'); read(HTML,$html,-s HTML); close(HTML); $html =~ s/__cmd__/$FORM{'cmd'}/g; $html =~ s/__data\d+[a-zA-Z]*__//g; &html(\$html); }elsif($FORM{'cmd'} eq "delete" && $FORM{'line'}){ &error('300k以上あるデータは修正できません') if -s $FILE > 01234567; &error('行指定が不正です') if $FORM{'line'} =~ /\D/; open(IN,$FILE) || &error('データファイルを開けません'); @data = ; close(IN); # &error('指定されたデータは存在しません') unless $data[$FORM{'line'} - 1]; &error('指定されたデータは存在しません') unless $data[$FORM{'line'}]; # undef $data[$FORM{'line'} - 1]; undef $data[$FORM{'line'}]; open(OUT,">".$FILE)|| &error('データファイルを更新できません'); print OUT @data; close(OUT); &msg('指定されたデータを削除しました'); } &msg(< line. HTML #======================================================================# sub html{ (*head)=@_; print"Expires: Sat, 01 Jan 2000 00:00:00 GMT\nPragma: no-cache\n"; print"Content-type: text/html\n\n" , $head; print"

CGIROOM"; exit; } sub tag{ ($tag,$TAG)=@_; $tag=~ s/
\r/\r/g if $TAG eq "br"; if($tag =~ /"|<|>/){ $tag=~ s/&/&/g; $tag=~ s//>/g; $tag=~ s/"/"/g; } return $tag; } sub br{ $_[0] =~ s/\r/
\r/g if $_[1]; return $_[0]; } #======================================================================# sub msg{ print"Content-type: text/html\n\n"; print"
$_[0]
"; print"CGIROOM EDIT画面へ
"; exit; } sub error{ &msg("

ERROR

" . $_[0]); } #======================================================================# __END__ 2000/08/09 Ver 1.00 2000/08/21 Ver 1.01 2001/01/25 Ver 1.02