#! /usr/local/bin/perl # # 商品マスタの保守(一番簡単な表形式) # # id=syohin22.cgi # # update=98.8.2 # 日本語コード変換ライブラリ(v2.0)の指定 # &ReadParse命令で、$in{ }の変数にフォーム入力データが格納される require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse; # 設置するURLを設定 $reload = 'http://www0.kumagaya.or.jp/cgi-bin/users/chichibu/syohin22.cgi'; $bkhmpg = "http://www.kumagaya.or.jp/~chichibu/cgi1.html"; $file = "/dialup/chichibu/cgi-bin/syohin2.dat"; # 最大登録件数 $max = 25; # パスワード(設定するとチェックする) $passwd=""; # 分類名配列 $bunruimei[0]=""; $bunruimei[1]="シングルCD"; $bunruimei[2]="アルバム"; $bunruimei[3]="ビデオ"; $bunruimei[4]="カセット"; #################################### # # # メインルーチン(処理の分岐) # # # #################################### # 全体の流れを決定する(actionやpwdはフォーム入力されたデータを格納する名前) # action=check --> フォーム入力データのチェック処理へ # その他 --> フォーム入力画面へ if ($in{'action'} eq 'first') { &first; } elsif ($in{'action'} eq 'check') { ✓ &first; } else { &first; } exit; ###################################### # # # ファイルから登録データを読む # # # ###################################### sub fileread { if (!open(READ,"$file")) { &error(2); } @line = ; close(READ); # 登録データ数 $kensu=@line-1; } # end of fileread ###################################### # # # 各項目に分解する       # # # ###################################### sub bunkai { # 項目分解 ($hymd,$titol,$namae,$kakaku,$biko,$syurui)=split(/\t/,$data); # 種類が登録されていなかったら初期値を与える if ($syurui eq "") {$syurui = 0; } # 改行を戻す $biko =~ s/\k/\n/g; } # end of bunkai ############################################# # # # 最初に表示する画面          # # # ############################################# sub first { &display ; } ############################################# # # # 登録データを表示する処理       # # # ############################################# sub display { # ファイルから登録データを読む &fileread; print "Content-type: text/html\n\n"; print < 商品マスタの保守(2) EOM print '
'; print '
' . "\n"; print '' . "\n"; print '
' . "\n"; print '
 '; # ここからデータ入力まで1つのFORM print '
' . "\n"; print '' . "\n"; print '' . "\n"; print '  '; print '' . "\n"; print '
'; # リスト形式のデータメンテ画面 print ""; print ""; print '"; print '"; print '"; print '"; print '"; print '"; print '"; print '"; print ""; # データ for ($i=1; $i<=$max; $i++) { # データの配列は0から始まる $data=$line[$i-1]; &bunkai; print ""; # 行 print '"; # 発売日 print '"; # タイトル print '"; # アーティスト print '"; # 価格 print '"; # 種類 print '"; # 備考 print '"; # 削除 print '"; print ""; } # end of for print "
'."\n"; print ''."\n"; print ''; print ''; print "'."\n"; print ''."\n"; print '発売日'; print ''; print "'."\n"; print ''."\n"; print 'タイトル'; print ''; print "'."\n"; print ''."\n"; print 'アーティスト'; print ''; print "'."\n"; print ''."\n"; print '価格'; print ''; print "'."\n"; print ''."\n"; print '種類'; print ''; print "'."\n"; print ''."\n"; print '備考'; print ''; print "'."\n"; print ''."\n"; print '削除'; print ''; print "
'."\n"; print ''."\n"; print $i; print ''; print "'."\n"; print ''."\n"; print ''."\n"; print ''; print "'."\n"; print ''."\n"; print ''."\n"; print ''; print "'."\n"; print ''."\n"; print ''."\n"; print ''; print "'."\n"; print ''."\n"; print ''."\n"; print ''; print "'."\n"; print ''."\n"; $sels0="";$sels1="";$sels2="";$sels3="";$sels4=""; if ($syurui eq "1") {$sels1 = "SELECTED"; } elsif ($syurui eq "2") {$sels2 = "SELECTED"; } elsif ($syurui eq "3") {$sels3 = "SELECTED"; } elsif ($syurui eq "4") {$sels4 = "SELECTED"; } else {$sels0 = "SELECTED"; } print ''. "\n"; print ''; print "'."\n"; print ''; print "'."\n"; print ''; print "

"; # パスワードが設定された場合のみ表示する if ($passwd ne "") { print 'パスワード:'."\n"; } # end of if print ''. "\n"; print ''. "\n"; } # end of &display ############################################# # # # エラーデータを表示する処理      # # # ############################################# sub display2 { print '

'; print ""; print ""; print '"; print '"; print '"; print '"; print '"; print '"; print '"; print ""; print ""; # 行 print '"; # 発売日 print '"; # タイトル print '"; # アーティスト print '"; # 価格 print '"; # 種類 print '"; # 備考 print '"; print ""; print "
'."\n"; print ''."\n"; print ''; print ''; print "'."\n"; print ''."\n"; print '発売日'; print ''; print "'."\n"; print ''."\n"; print 'タイトル'; print ''; print "'."\n"; print ''."\n"; print 'アーティスト'; print ''; print "'."\n"; print ''."\n"; print '価格'; print ''; print "'."\n"; print ''."\n"; print '種類'; print ''; print "'."\n"; print ''."\n"; print '備考'; print ''; print "
'."\n"; print ''."\n"; print $i; print ''; print "'."\n"; print ''."\n"; print $hymd; print ''; print "'."\n"; print ''."\n"; print $titol; print ''; print "'."\n"; print ''."\n"; print $namae; print ''; print "'."\n"; print ''."\n"; print $kakaku; print ''; print "'."\n"; print ''."\n"; print $bunruimei[$syurui]; print ''; print "'."\n"; print $biko; print "
"; } # end of display2 ############################## # # # チェックルーチン   # # # ############################## sub check { # 1から最大件数まで for ($i=1; $i <= $max; $i++) { # checkbox オン なら削除 if ($in{'del'.$i} != 1) { # タグを除去する if (length($in{'hymd'.$i}) > 0) { $ckdt=$in{'hymd'.$i}; &tagck; $in{'hymd'.$i}=$ckdt; } if (length($in{'titol'.$i}) > 0) { $ckdt=$in{'titol'.$i}; &tagck; $in{'titol'.$i}=$ckdt; } if (length($in{'namae'.$i}) > 0) { $ckdt=$in{'namae'.$i}; &tagck; $in{'namae'.$i}=$ckdt; } if (length($in{'kakaku'.$i}) > 0) { $ckdt=$in{'kakaku'.$i}; &tagck; $in{'kakaku'.$i}=$ckdt; } if (length($in{'biko'.$i}) > 0) { $ckdt=$in{'biko'.$i}; &tagck; $in{'biko'.$i}=$ckdt; } # 発売日とアーティストは必須 $hymd=$in{'hymd'.$i}; $namae=$in{'namae'.$i}; $kakaku=$in{'kakaku'.$i}; $syurui=$in{'syurui'.$i}; # 備考 # TEXTAREAから入力されたデータについては改行コード\n以外のコードが付くので # 改行コードを\nに統一する $biko=$in{'biko'.$i}; $biko=~ s/\015\012/\n/g; # Windowsから $biko=~ s/\015/\n/g; # Macから # 発売日未登録エラー if (length($namae) > 1) { if (length($hymd) == 0) { &error(3); } } # アーティスト未登録エラー if (length($hymd) > 1) { if (length($namae) == 0) { &error(4); } } } # end of if } # end of for # パスワードチェック(設定された場合のみチェックする) if ($passwd ne "") { if ($in{'pwd'} ne $passwd) { &error(1); } } # 更新へ &update; } # end of check # # タグの無効化サブルーチン # sub tagck { $ckdt =~ s//>/ig; $ckdt =~ s///ig; } #############################################   # # # チェックエラー表示画面ルーチン     #  # #  ############################################# sub error { # &error(xx); で呼び出されたルーチンは、()内の数字が $error に代入される。 $error = $_[0]; if ($error eq "1") { $error_msg = 'パスワードが違いますので処理はできません。'; } if ($error eq "2") { $error_msg = 'ファイル書き込み時にエラーが発生しました。'; } if ($error eq "3") { $error_msg = '発売日は必ず入力してください'; } if ($error eq "4") { $error_msg = 'アーティストは必ず入力してください'; } print "Content-type: text/html\n\n"; print '商品マスタの保守' . "\n"; print '

'; print '' . "\n"; print '

商品マスタの保守で下記のエラーが発生しました

' . "\n"; print '

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

'; ################################### 98.2.18 if ($error eq "2") { # 存在チェック if (-e $file) { print '・ファイルの存在チェック OK' . "\n";} else { print '・ファイルが存在しません、ファイル名やディレクトリの確認' . "\n";} print '
'; # 読み込み許可チェック if (-r $file) { print '・ファイルは読み出し可能になっています' . "\n";} else { print '・ファイルが読み出し可能になっていません、パーミッション確認' . "\n";} print '
'; # 書き込み許可チェック if (-w $file) { print '・ファイルは書き込み可能になっています' . "\n";} else { print '・ファイルが書き込み可能になっていません、パーミッション確認' . "\n";} print '
'; } # end of if ################################### # リロードでもどると入力データが消えてしまうので print 'ブラウザ画面の戻るをクリックする'."\n";; # エラー内容表示 if ($error == 3 || $error == 4 || $error == 5) { &display2; } print '' . "\n"; # エラー処理で抜けるので必要 exit; } ########################################## # # # ファイル更新処理           # # # ########################################## sub update { %new=(); # 1から最大件数まで for ($i=1; $i <= $max; $i++) { # checkbox オン なら削除 if ($in{'del'.$i} != 1) { # アーティストは必須 $namae=$in{'namae'.$i}; # データがあるものだけ if (length($namae) > 1) { # 発売日 $hymd=$in{'hymd'.$i}; # タイトル $titol=$in{'titol'.$i}; # 価格 $kakaku=$in{'kakaku'.$i}; # 種類 $syurui=$in{'syurui'.$i}; ##&jcode'convert(*syurui,'sjis'); # 備考 # TEXTAREAから入力されたデータについては改行コード\n以外のコードが付くので # 改行コードを\nに統一する $biko=$in{'biko'.$i}; $biko=~ s/\015\012/\n/g; # Windowsから $biko=~ s/\015/\n/g; # Macから # 改行コード\nを\kに置き換える $biko =~ s/\n/\k/g; # 1レコードにまとめる $value="$hymd\t$titol\t$namae\t$kakaku\t$biko\t$syurui\n"; push(@new,$value); } # end of if } # end of if } # end of for # ファイル登録 if (!open(WRITE,">$file")) { &error(2); } print WRITE @new; close (WRITE); } # end of update ########################## end_of_script #################################