#!/usr/local/bin/perl #/////////////////////////////////////////////////////////////////////////////// # Multi Shop Great Ver6.05 # ----- 2002(C) WEB INVENTOR(Solve) ----- # solve@wb-i.net # http://wb-i.net/ # # 【Ver4.00】csv形式のデータをメールに添付。注文ログの作成。 # 【Ver4.04】csv形式貴のデータのバグを修正すると共に、データ構成の変更。 # 販売管理(sale.csv) # 注文番号,日付,商品番号,商品名,オプション1,オプション2,商品記号,単価,注文数,合計,送料,代引き料 # 【Ver4.05】注文の取消し、注文確定後にかごの中が完全に空にならないバグを修正。 # 【Ver5.00】外税、内税、税なしを設定できるようにしました。また、支払方法としてe-コレクトを設定できるようにしました。顧客管理(user.csv)及び注文ログに連絡事項を含めました。「次の戻る」の不具合を修正。 # 【Ver5.01】確認画面で「銀行振込」「郵便振替」が表示されないバグを修正。ロック及びCSVファイル書き込みの際にエラーが起きる場合がったバグを修正 # 【Great版】CSVファイルから商品一括登録機能付。画像のURL指定。詳細説明を拡大画像と共に表示。 # 【Ver5.02】CSVファイル及びログファイルに氏名2,郵便番号2,住所2,電話2を追加。 # 【Ver5.03】詳細画面にオプションを追加しました。携帯の詳細画面で説明を表示するようにしました。 # 【Ver5.04】商品画面でページ数を表示、非表示に設定できるようにしました。 # 【Ver5.06】CSVファイルを添付しない設定にしたときに連絡事項が設定されないバグを修正。 # 【Ver6.00】大分類、小分類を設定できるようにしました。 # 【Ver6.01】小分類をメニュー及び一覧表上部に表示または非表示に設定することできる。 # 【Ver6.02】一覧表上部に表示された小分類のバグを修正。 # 【Ver6.03】一覧の説明、詳細説明、携帯用説明を設定可能。配達時間指定が設定可能。 # 【Ver6.04】商品管理Goods Manager(画像ファイルUPロード機能付き)を標準装備。 # 【Ver6.05】sendmailの使用法を検討し、RFC基準に準拠するように努力しました。 #/////////////////////////////////////////////////////////////////////////////// #================================ [注意事項] =================================== # このスクリプトはシェアウエアです。このスクリプトを使用したいかなる損害に対して # も作者は一切の責任を負いません。 #====================================使用法===================================== # 次のようにして呼び出してください。 # 1.商品画面 # http://・・/mu-shop.cgi PC用 # http://・・/k-shop.cgi i-mode、j-sky用(自動的に機種を判別する) # 2.検索窓の設置 #
# # # # # 検索キー #
# 3.キーワード及び分類表からの呼び出しかた # 当店お勧め # 分類A # $class_all # 4.管理者用 # http://・・/mu_shop.cgi?mode=adm1 # #=============================================================================== # ▼設定▼ #=============================================================================== # jcode.plへのパス require './jcode.pl'; # cgi-lib.plへのパス require './cgi-lib.pl'; # MIMEコード変換ライブラリ require './mimew.pl'; # =============================================================================== # ▲設定終了▲ # =============================================================================== &ReadParse; while (($key,$val) = each %in) { &jcode'convert($val, "sjis"); $form{$key} = $val; $val =~ s/<>//g; if($form{'mode'} eq 'adm4' || $form{'mode'} eq 'order_form' || $form{'mode'} eq 'order_mail'){ $val =~ s/"/\"/g; if ($key eq "MESS" || $key eq "setumei") { $val =~ s/<//g; $val =~ s/
/\n/g; $val =~ s/\.\n/\. \n/g; }else{ $val =~ s//>/g; $val =~ s/\r\n//g; $val =~ s/\r//g; $val =~ s/\n//g; $val =~ s/\s//g; } }else{ $val =~ s/\"/"/g; $val =~ s/\0/ /g; if ($key eq "MESS" || $key eq "setumei" || $key eq "setumei2" || $key eq "setumei3") { $val =~ s/\r\n/
/g; $val =~ s/\r/
/g; $val =~ s/\n/
/g; if ($val =~ /
$/) { while ($val =~ /
$/) { $val =~ s/
$//g; } } # $val =~ s/\s//g; } else { $val =~ s//>/g; $val =~ s/\r\n//g; $val =~ s/\r//g; $val =~ s/\n//g; $val =~ s/\s//g; } } $in{$key} = $val; } #=================注文加算============================================ if($in{'order'} eq ""){ # Cookieの値を得る &getCookie(); $in{'order'} = $COOKIE{'ORDER'}; } $order=$in{'order'}; $order_new =$in{'g_no'}.",".$in{'op1'}.",".$in{'op2'}; if($in{'amount'} ne "" and $in{'amount'} ne "0"){ if($order eq ""){ $order =$in{'g_no'}.",".$in{'op1'}.",".$in{'op2'}.":".$in{'amount'}; }else{ @order_1 = split(/!/,$order); foreach (@order_1) { ($i,$j) = split(/:/,$_); if($i eq $order_new){ $j = $j + $in{"amount"}; if($order_2 eq ""){ $order_2 =$order_new.":".$j; }else{ $order_2 .="!".$order_new.":".$j; } $k =1; }else{ if($order_2 eq ""){ $order_2 =$_; }else{ $order_2 .="!".$_; } } } if($k ne 1){ $order .="!".$in{'g_no'}.",".$in{'op1'}.",".$in{'op2'}.":".$in{'amount'}; }else{ $order =$order_2; } } $in{'order'}=$order; } #=================注文減算============================================ if($in{'del_no'} ne ""){ $order =""; @order_1 = split(/!/,$in{'order'}); foreach (@order_1) { ($s,$t) = split(/:/,$_); if($s eq $in{'del_no'}){next;} if($order eq ""){ $order = $s.":".$t; }else{ $order .="!".$s.":".$t; } } $in{'order'}=$order; } #クッキーの設定 print &setCookie_0("ORDER", $order); # 設定ファイル==================================================================== if ( $in{'mode'} eq 'order_mail' ) { $in{'order'} =''; require './mu_set.pl'; $in{'order'}=$order; }else{ require './mu_set.pl'; } #===== 戻り先======================================================== $save_data="$script?&keyword=$in{'keyword'}&FF=$in{'FF'}&class=$in{'class'}"; $modoru_adding = "$save_data&mode=adm2&pass=$adm_pass"; $modoru_dell = "$save_data&mode=adm3&pass=$adm_pass"; $modoru_renew = "$save_data&mode=adm4&pass=$adm_pass"; $modoru_goods ="$script?order=$in{'order'}&class=$in{'class'}&keyword=$in{'keyword'}&FF=$in{'FF'}&price_sort=$in{'price_sort'}"; $modoru_goods_2 ="$script?class=$in{'class'}&keyword=$in{'keyword'}&FF=$in{'FF'}&price_sort=$in{'price_sort'}"; $modoru_goods_end ="$script?class=$in{'class'}&keyword=$in{'keyword'}&FF=$in{'FF'}&price_sort=$in{'price_sort'}"; #==================================================================== if (!open(IN,"$data_file")) { &error('データベース読取エラー','復旧をお待ちください.'); } @BASE = ; close(IN); if($in{'price_sort'} ne 1){ @BASE = reverse @BASE; }else{ @BASE = sort { (split(/\<\>/,$a))[8] <=> (split(/\<\>/,$b))[8] } @BASE; } $hit = 0; $next_num = ''; $over_no = 0; if($in{'mode'} eq 'adm3' or $in{'mode'} eq 'addell'){ $page =$page_dell; } #=========消費税のの扱い==================== if($tax_flag eq '' or $tax_flag == 0){ $tax_set ='(税別)'; $br_tax_set ='
(税別)'; }elsif($tax_flag == 1){ $tax_set ='(税込)'; $br_tax_set ='
(税込)'; $syouhi_tax =0; }else{ $syouhi_tax =0; } #==================================================================== if ( $in{'mode'} eq 'adding' ) { &adding; exit;} if ( $in{'mode'} eq 'renew' ) { &renew; exit;} if ( $in{'mode'} eq 'dell' ) { &dell; exit;} if ( $in{'mode'} eq 'look' ) { &look; exit;} if ( $in{'mode'} eq 'order_form' ) { &order_form; exit;} if ( $in{'mode'} eq 'sure' ) { &sure; exit;} if ( $in{'mode'} eq 'order_mail' ) { &order_mail; exit;} if ( $in{'mode'} eq 'adm5' ) { &csv_adm; exit;} if ( $in{'mode'} eq 'adm6' ) { &csv_adm_ok; exit;} if ( $in{'mode'} eq 'adm7' ) { &csv_new; exit;} #==================================================================== # Cookieの値を得る &getCookie(); $classmei = $COOKIE{'BUNRUIMEI'}; $ff_no = $COOKIE{'FF'}; if($ff_no eq ''){$ff_no =0;} $pas_word = $COOKIE{'WORD'}; if($in{'class'} ne ""){ $classmei = $in{'class'}; print &setCookie("BUNRUIMEI", $classmei); } if($in{'FF'} ne ""){ $ff_no = $in{'FF'}; print &setCookie('FF', $ff_no); } if($in{'keyword'} ne "" or $in{'superkey'} eq "1"){ $pas_word = $in{'keyword'}; print &setCookie('WORD', $pas_word); } $in{'keyword'} = $pas_word; $in{'class'}=$classmei; #=================================================================== $data_su= 0; $data_ff =0; foreach $num (0 .. $#BASE) { $data = $data2 = $BASE[$num]; &jcode'convert(*data,'sjis'); ($goods_no,$name,$kigou,$option,$option2,$class,$setumei,$fcolor,$price,$tani,$zaiko,$limit,$picture,$bikou) = split(/\<\>/,$data); if($pas_word ne "") { # 入力内容を整理 $word = $pas_word; $word =~ s/ / /g; $word =~ s/\t/ /g; @pairs = split(/ /,$word); ($a,$b) =split(/\//,$class); &class_name_get(); # 検索処理 $flag_k = 0; foreach $pair (@pairs){ if (index($kigou,$pair) >= 0) { next; }elsif (index($name,$pair) >= 0) { next; }elsif (index($goods_no,$pair) >= 0) { next; }elsif (index($class_B,$pair) >= 0) { next; }elsif (index($class_S,$pair) >= 0) { next; }elsif (index($option,$pair) >= 0) { next; }elsif (index($setumei,$pair) >= 0) { next; }elsif (index($bikou,$pair) >= 0) { next; }elsif (index($price,$pair) >= 0) { next; }elsif (index($class,$pair) >= 0) { next; } $flag_k = 1; last; } if ($flag_k == 1) { next; } } if ($classmei ne "all" && $classmei ne "") { ($a1,$a2) =split(/\//,$class); ($b1,$b2) =split(/\//,$classmei); if ($a1 ne $b1) { next; } if ($b2 ne ''){ if($a2 ne $b2){ next;} } } if ($in{'id'} ne '' && ($in{'mode'} eq 'adm4' or $in{'mode'} eq 'p_wide')) { if ($goods_no eq $in{'id'}) { push(@NEW,$data2); last; } else { next; } } $data_su++; # 検索終了処理 if ($hit == $page) { $next_num = $data_ff; $over_no ++; $hit++; next; } elsif($hit < $page && $data_ff >= $ff_no){ push(@NEW,$data2); $hit++; }elsif($hit > $page && $data_ff >= $ff_no){ $over_no ++; } $data_ff ++; } if($over_no > $page){ $over_no = $page; } #========================================================================================= if ( $in{'mode'} eq 'adm1' ) { &adm1; exit;} elsif ( $in{'mode'} eq 'adm2' ) { &adm_add; exit;} elsif ( $in{'mode'} eq 'adm3' ) { &adm_dell; exit;} elsif ( $in{'mode'} eq 'adm4' ) { &adm_renew; exit;} elsif ( $in{'mode'} eq 'p_wide' ) { &p_wide; exit;} else { &shop_form; exit;} #=============================画像の拡大(詳細)=========================================== sub p_wide { &html_header(); if($zaiko eq ""){ $zaiko = 100000; } if($limit eq ""){ $limit =100000; } $kosuu_setting = ""; foreach ( @kosuu_set ) { if($_ >$limit or $_ >$zaiko){ last; }else{ $kosuu_setting .= ""; } } if($kosuu_setting eq ""){ $kosuu_setting = "$tani_set"; }else{ $kosuu_setting = "$tani_set"; } $folder="$dir_p/order.gif"; if($zaiko ne 0){ $get_setting = ""; }else{ $get_setting = "在庫切れ"; } ($pic1,$pic2,$pic3,$pici,$picj) =split(/\|/,$picture); if($pic1 eq ""){ $pic1 ="$dir_p/space.gif"; } if($pic2 eq ""){ $pic2 ="$dir_p/space.gif"; } if($pic3 eq ""){ $pic3 ="$dir_p/space.gif"; } ($setumei,$setumei2) =split(/\|\|/,$setumei); @option = split(/\:/,$option); $i = 0; $option_set = ""; while($i < $option_no) { ($op_k[$i],$op_m[$i]) =split(/\,/,$option[$i]); if($op_k[$i] eq ""){ $i++; next;} $option_set = $option_set."\n"; $i++; } if($option_set ne ""){ $option_set = ""; }else{ $option_set ="\ "; } @option2 = split(/\:/,$option2); $i = 0; $option2_set = ""; while($i < $option2_no) { ($op2_k[$i],$op2_m[$i]) =split(/\,/,$option2[$i]); if($op2_k[$i] eq ""){ $i++; next;} $option2_set = $option2_set."\n"; $i++; } if($option2_set ne ""){ $option2_set = ""; }else{ $option2_set ="\ "; } print <<"EOF";
\  検索キー
EOF print <<"EOF";
【$goods_no】$name ▲戻る
EOF #==================================== 1 while $price =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 print <<"EOF";


$setumei2


販売価格 $price円$tax_set

$option_set\ \  $option2_set\ \ 注文数 $kosuu_setting$tani
\ \  $get_setting
EOF print <<"EOF";
▲戻る
EOF print <<"EOF"; EOF print "

$foot\n" ; } #=============================注文メール================================================= sub order_mail { # タイムゾーンを日本時間に合わせる $ENV{'TZ'} = "JST-9"; $times = time; ($sec,$min,$hour,$day,$month,$year,$wday,$Days,$dmy) = localtime($times); $month = $month +1; $year = $year + 1900; $year_m_d = "$year"."年"."$month"."月"."$day"."日"; $year_m_d2 = "$year"."/"."$month"."/"."$day"; if($in{'d_time'}){ $in{'MESS'} = "[配達時間指定:$in{'d_time'}]\n"."$in{'MESS'}"; } $order_log=""; # ロック処理 if ($lockkey ne 0) { &lock_log(); } open (IN,"$data_file") || &error('オープンエラー1','指定された書込みファイルが開けません。'); @BASE = ; close (IN); #データチェック $order=$in{'order'}; &keisan(); foreach $data ( @BASE ) { ($goods_no,$name,$kigou,$option,$option2,$class,$setumei,$fcolor,$price,$tani,$zaiko,$limit,$tail,$bikou) = split(/\<\>/,$data); @order_1 = split(/!/,$in{'order'}); foreach (@order_1) { ($s,$t) = split(/:/,$_); ($a,$b,$c) = split(/\,/,$s); if ( $goods_no == $a ) { if($zaiko ne ''){ $zaiko =$zaiko -$t; #在庫数更新 } $data = "$goods_no<>$name<>$kigou<>$option<>$option2<>$class<>$setumei<>$fcolor<>$price<>$tani<>$zaiko<>$limit<>$tail<>$bikou"; } } push (@NEW,$data); } open (OUT,">$data_file") || &error('オープンエラー2','指定された書込みファイルが開けません。'); print OUT (@NEW); close (OUT); open (IN,"$NO_file") || &error('オープンエラー3','指定された書込みファイルが開けません。'); $order_max = ; close (IN); if($order_max eq ""){$order_max = 0;} $order_no = $order_max + 1; open (OUT,">$NO_file") || &error('オープンエラー4','指定された書込みファイルが開けません。'); print OUT "$order_no"; close (OUT); # ファイルロック解除 if (-e $loglock) { unlink($loglock); } $souryou_csv=$in{'souryou'}; $mailto ="$in{'MAIL'}"; $fromname =$shop_name; $frommail =$shop_mail; $subject =$mail_subject; &mail_make(); &mail_send(); $mailto =$shop_mail; $fromname =$shop_name;; $frommail =$shop_mail; $subject =$mail_subject; $report="次の方にメールを送信しました。"."\n "."$in{'SIMEI'}"."\n "."$in{'MAIL'}"."\n"; $mailbody=$report.$mailbody2; if($csv_tenpu){ &mail_send_tenpu(); &csv_unlock(); }else{ &mail_send(); } #注文完了メッセージ==== #クッキーの設定 print &setCookie_0("ORDER", ""); $in{'order'} =''; &html_header(); print <<"EOF";

▲商品画面へ戻る


注文完了

$in{"SIMEI"}$end_mess




See you again!

EOF print <<"EOF"; EOF print "

$foot\n" ; } #=======ログ及びCSV形式のファイルの作成====== sub csv_make{ #=============ログの作成============= if($order_log){ $order_log .=":"."$k_no[$data_no],$k_name[$data_no],$option_1,$option_2,$kigou,$k_price[$data_no],$k_amount[$data_no],$k_total[$data_no]"; }else{ $order_log .="$k_no[$data_no],$k_name[$data_no],$option_1,$option_2,$kigou,$k_price[$data_no],$k_amount[$data_no],$k_total[$data_no]"; } #=============csvデータ=============== #データ構成 # 顧客管理(user.csv) # 注文番号,氏名,メール,郵便番号,住所,電話,送金方法,機種,連絡事項,氏名2,郵便番号2,住所2,電話2 # 販売管理(sale.csv) # 注文番号,日付,商品番号,商品名,オプション1,オプション2,商品記号,単価,注文数,合計,送料,代引き料 $mess =$in{'MESS'}; $mess =~ s/\r\n/\ /g; $mess =~ s/\r/\ /g; $mess =~ s/\n/\ /g; if($csv_tenpu eq 0){return;} if($option_1 eq ""){$option_1 = "-";} if($option_2 eq ""){$option_2 = "-";} # 顧客管理用csvデータ open (OUT,">$file_user") || &error('オープンエラー5','指定された書込みファイルが開けません。'); print OUT "$order_no,$in{'SIMEI'},$in{'MAIL'},$in{'POST'},$in{'ADDR'},$in{'TEL'},$in{'METHOD'},PC,$mess,$in{'SIMEI2'},$in{'POST2'},$in{'ADDR2'},$in{'TEL2'}"; print OUT "\n"; close (OUT); # 販売管理用csvデータ open (OUT,">$file_sale") || &error('オープンエラー6','指定された書込みファイルが開けません。'); $data = "$order_no,$year_m_d2,$k_no[$data_no],$k_name[$data_no],$option_1,$option_2,$kigou,$k_price[$data_no],$k_amount[$data_no],$k_total[$data_no],$souryou_csv,$daibiki_add_csv\n"; push (@SALE_DATA,$data) ; print OUT @SALE_DATA; close (OUT); $souryou_csv =''; $daibiki_add_csv =''; } #======csvファイル削除========================= sub csv_unlock{ if (-e "$file_user") { unlink("$file_user"); } if (-e "$file_sale") { unlink("$file_sale"); } } #=======注文ログファイルへの追加=============== sub put_log{ open (OUT,">>$log_file") || &error('オープンエラー7','ログファイルが開けません。'); print OUT "$order_no,$year_m_d2,<>$order_log<>$all_total_log,$tax_log,$in{'souryou'},$sougoukei_log,$in{'METHOD'},$daibiki_add<>$in{'SIMEI'},$in{'MAIL'},$in{'POST'},$in{'ADDR'},$in{'TEL'},PC,$mess,$in{'SIMEI2'},$in{'POST2'},$in{'ADDR2'},$in{'TEL2'}\n"; close (OUT); } #=======メールを作成する============= # sub mail_make{ $tax = int($all_total * $syouhi_tax); $tax_total =$tax + $all_total; $sougoukei =$tax_total +$in{"souryou"}; $souryou_set =$in{"souryou"}; $sougoukei_2 =$sougoukei; #====消費税の扱い===== if($tax_flag eq '' or $tax_flag == 0){ $syouhizei_set ="【消費税】$tax円\n"; } #====代引き=========== &daibikikeisann(); &collectkeisann(); if($in{'METHOD'} eq '代引き'){ $sougoukei_2 =$sougoukei +$daibiki_add; 1 while $sougoukei_2 =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 $daibiki_add_set ="\n【代引き手数料】$daibiki_add円\n【代引き手数料を含めたお支払い総額】$sougoukei_2円\n"; $method_set ="$daibiki_mess"."商品到着時に別途代引き手数料$daibiki_add円が必要です。\n"; }elsif($in{'METHOD'} eq 'e-コレクト'){ $sougoukei_2 =$sougoukei +$collect_add; 1 while $sougoukei_2 =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 $daibiki_add_set ="\n【e-コレクト手数料】$collect_add円\n【e-コレクト手数料を含めたお支払い総額】$sougoukei_2円\n"; $method_set ="$collect_mess"."商品到着時に別途e-コレクト手数料$collect_add円が必要です。\n"; }elsif($in{'METHOD'} eq '郵便振替'){ $yuubin ="CHECKED"; $method_set =$hurikae_mess; }else{ $bank ="CHECKED"; $method_set =$hurikomi_mess; } $all_total_log =$all_total; $tax_log=$tax; $sougoukei_log=$sougoukei; if($in{'METHOD'} eq '代引き'){ $daibiki_add_csv =$daibiki_add; }elsif($in{'METHOD'} eq 'e-コレクト'){ $daibiki_add_csv =$collect_add; } 1 while $souryou_set =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $tax =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $all_total =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $sougoukei =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 @order_1 = split(/!/,$order); $data_no =0; foreach (0..$all_no) { ($s,$t) = split(/:/,$order_1[$_]); ($a,$b,$c) = split(/\,/,$s); $kigou = $k_id[$_]; if($b ne ""){ $kigou .="-".$b; } if($c ne ""){ $kigou .="-".$c; } @opt = split(/\:/,$k_option[$_]); $i = 0; $option_set =""; $option_1 =""; while($i < $option_no) { ($op_k[$i],$op_m[$i]) =split(/\,/,$opt[$i]); if($op_k[$i] eq "" or $op_k[$i] ne $b){ $i++; next;} $option_set ="/". $op_m[$i]; $option_1=$op_m[$i]; last; } @opt2 = split(/\:/,$k_option2[$_]); $i = 0; $option2_set =""; $option_2 =""; while($i < $option2_no) { ($op2_k[$i],$op2_m[$i]) =split(/\,/,$opt2[$i]); if($op2_k[$i] eq "" or $op2_k[$i] ne $c){ $i++; next;} $option2_set = "/".$op2_m[$i]; $option_2=$op2_m[$i]; last; } #==logデータ及びcsvデータの作成=== &csv_make(); #================================= 1 while $k_price[$_] =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $k_total[$_] =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 $hikae .="[$k_no[$_]]$k_name[$_]$option_set$option2_set"."[".$kigou."]"."\n"; $hikae .=" "."$k_price[$_]円"."×"."$k_amount[$_]$k_tani[$_]"."="."$k_total[$_]円"."\n\n"; $data_no ++; } #=========ログの作成======== if($log_make){&put_log();} #=========================== $mailbody = <); close(IN); $base64_csvdata = &bodyencode($csvdata); $base64_csvdata .= &benflush; $ufilenm2 = 'sale.csv'; open(IN,"$file_sale"); $csvdata = join('',); close(IN); $base64_csvdata2 = &bodyencode($csvdata); $base64_csvdata2 .= &benflush; $subject_mime = &mimeencode($subject); #-------BEGINBEGIN--------- $header_tenpu =</g; $mess_C =~ s/"/\"/g; $mess_C =~ s/
/\n/g; $mess_C =~ s/\.\n/\. \n/g; $i =0; foreach(@delivery_time){ if($d_time_C eq $_){ $d_time_check[$i] ="CHECKED"; } $i ++; } if($method_C eq '代引き'){ $daibiki ="CHECKED"; }elsif($method_C eq '郵便振替'){ $yuubin ="CHECKED"; }elsif($method_C eq '銀行振込'){ $bank ="CHECKED"; }elsif($method_C eq 'e-コレクト'){ $collect ="CHECKED"; }else{ $checked_no =1; } $order=$in{'order'}; &keisan(); $tax = int($all_total * $syouhi_tax); $tax_total =$tax + $all_total; $sougoukei =$tax_total +$in{"souryou"}; &daibikikeisann(); &collectkeisann(); if($bank_able ne 1 && $hurikae_able ne 1 && $daibiki_able ne 1 && $collect_able ne 1){ &error("送金方法がまだ設定されていません。"); } $soukinn_houhou =""; if($checked_no eq 1){ if($bank_able eq 1){ $soukinn_houhou .="\ 銀行振込"; } if($hurikae_able eq 1){ if($bank_able ne 1){$checked ='checked';} $soukinn_houhou .="\ 郵便振替"; } if($daibiki_able eq 1){ $checked =""; if($bank_able ne 1 && $hurikae_able ne 1){$checked ='checked';} $soukinn_houhou .="
\ 代引き($daibiki_add円)\  $daibiki_mg"; } if($collect_able eq 1){ $checked =""; if($bank_able ne 1 && $hurikae_able ne 1 && $daibiki_able ne 1){$checked ='checked';} $soukinn_houhou .="
\ e-コレクト($collect_add円)\  $collect_mg"; } }else{ if($bank_able eq 1){ $soukinn_houhou .="\ 銀行振込"; } if($hurikae_able eq 1){ $soukinn_houhou .="\ 郵便振替"; } if($daibiki_able eq 1){ $soukinn_houhou .="
\ 代引き($daibiki_add円)\  $daibiki_mg"; } if($collect_able eq 1){ $soukinn_houhou .="
\ e-コレクト($collect_add円)\  $collect_mg"; } } $i =0; foreach(@delivery_time){ $delivery_time_set .="\ $_"; if($i == 0 || $i == 3){$delivery_time_set .='
';} $i ++; } $souryou_set =$in{"souryou"}; 1 while $souryou_set =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $tax =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $all_total =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $sougoukei =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 &html_header(); $ajust =$o_width -150; $ajust2 =$o_width -600; $ajust2=int($ajust2/5); $w1=120+$ajust2; $w2=180+$ajust2; $w3=100+$ajust2; $w4=80+$ajust2; $w5=120+$ajust2; print <<"EOF";

▲商品画面へ戻る

注文フォーム

EOF @order_1 = split(/!/,$order); foreach (0..$all_no) { ($s,$t) = split(/:/,$order_1[$_]); ($a,$b,$c) = split(/\,/,$s); $kigou = $k_id[$_]; if($b ne ""){ $kigou .="-".$b; } if($c ne ""){ $kigou .="-".$c; } @opt = split(/\:/,$k_option[$_]); $i = 0; $option_set =""; while($i < $option_no) { ($op_k[$i],$op_m[$i]) =split(/\,/,$opt[$i]); if($op_k[$i] eq "" or $op_k[$i] ne $b){ $i++; next;} $option_set ="/". $op_m[$i]; last; } @opt2 = split(/\:/,$k_option2[$_]); $i = 0; $option2_set =""; while($i < $option2_no) { ($op2_k[$i],$op2_m[$i]) =split(/\,/,$opt2[$i]); if($op2_k[$i] eq "" or $op2_k[$i] ne $c){ $i++; next;} $option2_set = "/".$op2_m[$i]; last; } 1 while $k_price[$_] =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $k_total[$_] =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 print <<"EOF"; EOF } if($tax_flag eq '' or $tax_flag == 0){ print <<"EOF"; EOF }else{ print <<"EOF"; EOF } print <<"EOF";
商品ID 商品名 単価$tax_set 個数 金額
[$a]$kigou $k_name[$_]$option_set$option2_set $k_price[$_]円 $k_amount[$_]$k_tani[$_] $k_total[$_]円
合計$tax_set $all_total円
消費税 $tax円
送料 $souryou_set円
合計(消費税込、送料込み) $sougoukei円
合計$tax_set $all_total円
送料 $souryou_set円
合計(送料込み) $sougoukei円

お名前 \ 
メールアドレス \ 
メールアドレス確認 \ 
ご住所 \ 
\ 
電話番号 \ 
お支払方法 $soukinn_houhou
配達時間指定 $delivery_time_set
連絡事項 \ 

送付先(上記と異なる場合に記入)
お名前 \ 
ご住所 \ 
\ 
電話番号 \ 


EOF print <<"EOF"; EOF #=======================入力チェック=================================== print <<"EOF"; EOF print "

$foot\n" ; } #====================================確認==================================== sub sure { #クッキーの設定 print &setCookie("SIMEI", $in{'SIMEI'}); print &setCookie("MAIL", $in{'MAIL'}); print &setCookie("MAIL2", $in{'MAIL2'}); print &setCookie("POST", $in{'POST'}); print &setCookie("ADDR", $in{'ADDR'}); print &setCookie("TEL", $in{'TEL'}); print &setCookie("METHOD", $in{'METHOD'}); print &setCookie("D_TIME", $in{'d_time'}); print &setCookie("MESS", $in{'MESS'}); print &setCookie("SIMEI2", $in{'SIMEI2'}); print &setCookie("POST2", $in{'POST2'}); print &setCookie("ADDR2", $in{'ADDR2'}); print &setCookie("TEL2", $in{'TEL2'}); if ($in{'MAIL'} ne "" && $in{'MAIL'} !~ /[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,5}$/) { &error("ブラウザの [戻る] ボタンで戻って、メールアドレスを確認してください。"); } $order=$in{'order'}; &keisan(); $tax = int($all_total * $syouhi_tax); $tax_total =$tax + $all_total; $sougoukei =$tax_total +$in{"souryou"}; $souryou_set =$in{"souryou"}; &daibikikeisann(); &collectkeisann(); $ajust =$o_width -150; $ajust2 =$o_width -600; $ajust2=int($ajust2/5); $w1=120+$ajust2; $w2=180+$ajust2; $w3=100+$ajust2; $w4=80+$ajust2; $w5=120+$ajust2; $method_set="$in{'METHOD'}"; if($in{'METHOD'} eq '代引き'){ $method_set.="\  $daibiki_mg"; $daibiki_add_set =<代引き手数料$daibiki_add円 EOF # $sougoukei =$sougoukei +$daibiki_add; }elsif($in{'METHOD'} eq 'e-コレクト'){ $method_set.="\  $collect_mg"; $daibiki_add_set =<e-コレクト手数料$collect_add円 EOF # $sougoukei =$sougoukei +$daibiki_add; } 1 while $souryou_set =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $tax =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $all_total =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $sougoukei =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 &html_header(); $ajust =$o_width -150; $ajust2 =$o_width -600; $ajust2=int($ajust2/5); $w1=120+$ajust2; $w2=180+$ajust2; $w3=100+$ajust2; $w4=80+$ajust2; $w5=120+$ajust2; print <<"EOF";

▲戻って訂正\ ▲商品画面へ戻る

確認画面

EOF @order_1 = split(/!/,$order); foreach (0..$all_no) { ($s,$t) = split(/:/,$order_1[$_]); ($a,$b,$c) = split(/\,/,$s); $kigou = $k_id[$_]; if($b ne ""){ $kigou .="-".$b; } if($c ne ""){ $kigou .="-".$c; } @opt = split(/\:/,$k_option[$_]); $i = 0; $option_set =""; while($i < $option_no) { ($op_k[$i],$op_m[$i]) =split(/\,/,$opt[$i]); if($op_k[$i] eq "" or $op_k[$i] ne $b){ $i++; next;} $option_set ="/". $op_m[$i]; last; } @opt2 = split(/\:/,$k_option2[$_]); $i = 0; $option2_set =""; while($i < $option2_no) { ($op2_k[$i],$op2_m[$i]) =split(/\,/,$opt2[$i]); if($op2_k[$i] eq "" or $op2_k[$i] ne $c){ $i++; next;} $option2_set = "/".$op2_m[$i]; last; } 1 while $k_price[$_] =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $k_total[$_] =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 print <<"EOF"; EOF } if($tax_flag eq '' or $tax_flag == 0){ print <<"EOF"; EOF }else{ print <<"EOF"; EOF } print <<"EOF"; $daibiki_add_set
商品ID 商品名 単価$tax_set 個数 金額
[$a]$kigou $k_name[$_]$option_set$option2_set $k_price[$_]円 $k_amount[$_]$k_tani[$_] $k_total[$_]円
合計$tax_set $all_total円
消費税 $tax円
送料 $souryou_set円
合計(消費税、送料込み) $sougoukei円
合計$tax_set $all_total円
送料 $souryou_set円
合計(送料込み) $sougoukei円

お名前 $in{"SIMEI"}
メールアドレス $in{"MAIL"}
メールアドレス確認 $in{"MAIL2"}
ご住所 $in{"POST"}
$in{"ADDR"}
電話番号 $in{"TEL"}
お支払方法 $method_set
配達時間指定 $in{'d_time'}
連絡事項 $in{"MESS"}\ 

送付先(上記と異なる場合に記入)
お名前 $in{"SIMEI2"}\ 
ご住所 $in{"POST2"}\ 
$in{"ADDR2"}
電話番号 $in{"TEL2"}\ 


EOF print <<"EOF"; EOF print "

$foot\n" ; } #======================================かごの中を見る====================================== sub look { $order=$in{'order'}; &keisan(); &html_header(); $ajustw =$o_width -50; $ajust =$o_width -370; $ajust=int($ajust/4); $w1 =112+$ajust; $w2 =180+$ajust*3; $w3 =158+$ajust*3; print <<"EOF";

▲商品画面へ戻る

●かごの中●
\  EOF @order_1 = split(/!/,$order); foreach (0..$all_no) { ($s_id,$t) = split(/:/,$order_1[$_]); ($a,$b,$c) = split(/\,/,$s_id); @opt = split(/\:/,$k_option[$_]); $i = 0; $option_set =""; if($b ne ""){ while($i < $option_no) { ($op_k[$i],$op_m[$i]) =split(/\,/,$opt[$i]); if($op_k[$i] ne $b){ $i++; next;} $option_set = $op_m[$i]."(".$op_k[$i].")"; last; } } @opt2 = split(/\:/,$k_option2[$_]); $i = 0; $option2_set =""; if($c ne ""){ while($i < $option2_no) { ($op2_k[$i],$op2_m[$i]) =split(/\,/,$opt2[$i]); if($op2_k[$i] ne $c){ $i++; next;} $option2_set = $op2_m[$i]."(".$op2_k[$i].")"; last; } } ($pic1,$pic2,$pic3,$pici,$picj) =split(/\|/,$k_picture[$_]); if($pici eq ""){ $pici ="$dir_p/space.gif"; } $kigou = $k_id[$_]; if($b ne ""){ $kigou .="-".$b; } if($c ne ""){ $kigou .="-".$c; } if($bikou ne "\n"){ $bikou_set = ""; } 1 while $k_price[$_] =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $k_total[$_] =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 if($order ne ""){ print <<"EOF"; EOF }else{ print <<"EOF"; EOF } } $all_total_set =$all_total; $tax = int($all_total * $syouhi_tax); $tax_total =$tax + $all_total; 1 while $tax =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $tax_total =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 1 while $all_total_set =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 if($tax_flag eq '' or $tax_flag == 0){ print <<"EOF"; EOF }else{ print <<"EOF"; EOF } print <<"EOF";
商品画像 商品名 金額 取消し
※".$k_bikou[$_]."

[$k_no[$_]]$kigou
$bikou_set
$k_name[$_]
$option_set
$option2_set
単価$tax_set: $k_price[$_]円
購入数: $k_amount[$_]$k_tani[$_]
合計$tax_set: $k_total[$_]円


かごの中は空です。

合計 $all_total_set円 確認
消費税 $tax円
合計(消費税込み) $tax_total円
合計$tax_set $all_total_set円 確認
\ 
\ 

EOF if($order ne ""){ if($all_total < $free_price){ if($souryou_cst eq ''){ if(@souryou_tb <= 1){ $souryou_cst_set = $souryou_tb[0]; 1 while $souryou_cst_set =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 $soryo_set ="[送料は$souryou_cst_set円]"; $souryou_hidden =""; }else{ $i = 0; foreach (@souryou_tb) { $soryo_set .= "\n"; $i++; } $soryo_set ="送り先:". ""; } }else{ $souryou_cst_set = $souryou_cst; 1 while $souryou_cst_set =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 $soryo_set ="[送料は$souryou_cst_set円]"; $souryou_hidden =""; } }else{ $soryo_set ="[送料は無料です]"; $souryou_hidden =""; } print <<"EOF";
送料又は送付先を確認して、注文フォームへ

$soryo_set $souryou_hidden \ \ 
EOF } print <<"EOF"; EOF print "

$foot\n" ; } #========================================================================================== sub class_name_get{ ($class_B,$k) = split(/\//,$class_tb[$a]); @class_tb2 =split(/:/,$k); if($b ne ''){ $class_S =$class_tb2[$b]; $class_name ="$class_B/$class_S"; }else{ $class_name ="$class_B"; } } #=======================================Shopping Form====================================== sub shop_form { &keisan(); &html_header(); 1 while $all_total =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 if($pas_word ne ""){ $condition =$pas_word; }else{ if($in{'class'} eq 'all' or $in{'class'} eq ''){ $condition="$class_all"; }else{ ($a,$b) =split(/\//,$in{'class'}); &class_name_get(); $condition =$class_name; } } print <<"EOF";
\ 買い物合計額: $all_total円\ 

EOF print <<"EOF"; EOF ($a,$b) =split(/\//,$in{'class'}); &class_name_get(); $list_data = ''; $i =0; foreach (@class_tb) { if($small_class_g == 0 || $a eq '' || $a eq 'all'){ last;} ($class_b,$k) = split(/\//,$_); if($class_b ne $class_B){$i ++; next;} @class_S =split(/:/,$k); $j =0; foreach (@class_S) { $jump =$script.'?'."class=$i/$j&keyword=&superkey=1&FF=0&order=$in{'order'}"; $list_data .= "| $class_S[$j] "; $j ++; } last; } if($list_data ne ''){ $list_data =""; } print "$list_data"."
\  検索キー
"."$list_data"." |"."
"; if($list_data ne ''){ print "


"; } print <<"EOF";
検索条件[$condition]\ 検索商品数[$data_su\件] ▲価格順\表\示
EOF if (!@NEW) { print <<"EOF";
★該当する商品はありません★
EOF }else{ #======================================================================== $width_name = $t_width - 400; print <<"EOF";
EOF } #==================================== foreach ( @NEW ) { ($goods_no,$name,$kigou,$option,$option2,$class,$setumei,$fcolor,$price,$tani,$zaiko,$limit,$picture,$bikou) = split(/\<\>/,$_); @option = split(/\:/,$option); $i = 0; $option_set = ""; while($i < $option_no) { ($op_k[$i],$op_m[$i]) =split(/\,/,$option[$i]); if($op_k[$i] eq ""){ $i++; next;} $option_set = $option_set."\n"; $i++; } if($option_set ne ""){ $option_set = ""; }else{ $option_set ="\ "; } @option2 = split(/\:/,$option2); $i = 0; $option2_set = ""; while($i < $option2_no) { ($op2_k[$i],$op2_m[$i]) =split(/\,/,$option2[$i]); if($op2_k[$i] eq ""){ $i++; next;} $option2_set = $option2_set."\n"; $i++; } if($option2_set ne ""){ $option2_set = "
"; }else{ $option2_set ="\ "; } $price_set = $price; 1 while $price_set =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 if ($price =~ /[^0-9]/) { # 文字列を含んでいたらか?全角数字も。 $price_set = "$price_set"; } ($setumei,$setumei2) =split(/\|\|/,$setumei); $setumei_set =""; $bikou_form = ""; if($bikou ne "\n"){ $bikou = "
※".$bikou; } $setumei_set .=$setumei. $bikou; if($zaiko ne ""){ $zaiko_set ="
在庫$zaiko$tani"; }else{ $zaiko_set =""; $zaiko = 100000; } if($limit ne ""){ $tani_set ="
$limit$taniまで"; }else{ $tani_set =$tani; $limit =100000; } $kosuu_setting = ""; foreach ( @kosuu_set ) { if($_ >$limit or $_ >$zaiko){ last; }else{ $kosuu_setting .= ""; } } if($kosuu_setting eq ""){ $kosuu_setting = "$tani_set"; }else{ $kosuu_setting = "$tani_set"; } $folder="$dir_p/order.gif"; if($zaiko ne 0){ $get_setting = ""; }else{ $get_setting = "在庫切れ"; } $word='タイムサービス'; $words='タイムサービス'; if (index($setumei,$word) >= 0 || index($bikou,$word) >= 0 || index($setumei,$words) >= 0 || index($bikou,$words) >= 0) { # タイムゾーンを日本時間に合わせる $ENV{'TZ'} = "JST-9"; $times = time; ($sec,$min,$hour,$day,$month,$year,$wday,$Days,$dmy) = localtime($times); $time =$hour.':'.$min; if($time < $service_time[0] || $service_time[1] < $time){ $get_setting ="[サービスタイム]".'
'."$service_time[0]-$service_time[1]"; } } ($pic1,$pic2,$pic3,$pici,$picj) =split(/\|/,$picture); if($pici eq ""){ $pici ="$dir_p/space.gif"; } $link_pw ="$modoru_goods&mode=p_wide&id=$goods_no"; $w_setum =$t_width-290; ($a,$b) =split(/\//,$class); &class_name_get(); print < EOF } if (@NEW) { print <<"EOF";

(クリックで詳細)
$name
[$goods_no]$kigou
[$class_name]
$option_set$option2_set $price_set円$br_tax_set$zaiko_set
$kosuu_setting
$get_setting
$setumei_set $bikou_form

EOF } $buf ="class=".$in{'class'}; $buf2 ="order=".$in{'order'}; $buf3 ="keyword=".$in{'keyword'}; if($data_su > $page){ $i =1; $j =0; while ($j < $data_su){ if($j ne $ff_no ){ $jump_set .="[$i]"; }else{ $jump_set .="[$i]"; } $i ++; $j = $j + $page; } } $nextlink = ""; if ($next_num ne '') { $nextlink = "次の$over_no件"; } $backlink = ""; $back_num = $ff_no -$page; if($back_num >=0) { $backlink = "前の$page件\ \ "; } if($page_view){ print "
$backlink$nextlink\ \  $jump_set
\n"; }else{ print "
$backlink$nextlink
\n"; } print <<"EOF";
★商品画像をクリックすると詳細説明になります。 ▲管理者用
EOF print "

$foot\n" ; } #========================================================================================= sub keisan { $data_no =0; $all_total = 0; @souryou_tb = (); $size_A ='0'; $tiikiNO=@souhusaki; if($tiikiNO < 1){ $tiikiNO =1; } @order_1 = split(/!/,$order); foreach (@order_1) { ($s,$t) = split(/:/,$_); ($a,$b,$c) = split(/\,/,$s); $flag =0; foreach ( @BASE ) { ($goods_no,$name,$kigou,$option,$option2,$class,$setumei,$fcolor,$price,$tani,$zaiko,$limit,$picture,$bikou) = split(/\<\>/,$_); if($a == $goods_no){ $flag=1; last; } } #エラーチェック if($flag == 0){ print &setCookie_0('ORDER', ''); &error("NO.$aの商品情報が削除されています。",'商品画面で確認してください。'); } @opt = split(/\:/,$option); if($b eq ''){ $i = 0; $flag=1; while($i < $option_no) { ($op_k[$i],$op_m[$i]) =split(/\,/,$opt[$i]); if($op_k[$i] ne ''){$flag =0; last;} $i++; } }else{ $i = 0; $flag =0; while($i < $option_no) { ($op_k[$i],$op_m[$i]) =split(/\,/,$opt[$i]); if($op_k[$i] eq $b){$flag=1;last;} $i++; } } if($flag == 0){ print &setCookie_0('ORDER', ''); &error("NO.$aの商品情報が変更されています。",'商品画面で確認してください。'); } @opt = split(/\:/,$option2); if($c eq ''){ $i = 0; $flag=1; while($i < $option_no) { ($op_k[$i],$op_m[$i]) =split(/\,/,$opt[$i]); if($op_k[$i] ne ''){$flag =0; last;} $i++; } }else{ $i = 0; $flag =0; while($i < $option_no) { ($op_k[$i],$op_m[$i]) =split(/\,/,$opt[$i]); if($op_k[$i] eq $c){$flag=1;last;} $i++; } } if($flag == 0){ print &setCookie_0('ORDER', ''); &error("NO.$aの商品情報が変更されています。",'商品画面で確認してください。'); } if($zaiko ne '' && $t > $zaiko){ print &setCookie_0('ORDER', ''); &error("NO.$aの商品の注文数が在庫数を越えています。",'商品画面で確認してください。'); } if($limit ne '' && $t > $limit){ print &setCookie_0('ORDER', ''); &error("NO.$aの商品の注文数が制限を越えています。",'商品画面で確認してください。'); } $sizeno = 1; #サイズAはスキップ $size_flag = '0'; while ($sizeno < @size_tb) { if(index($bikou,$size_tb[$sizeno]) >= 0){ $tiiki =0; @s_tb = split(/:/,$souryou[$sizeno]); while ($tiiki < $tiikiNO) { $souryou_tb[$tiiki] =$souryou_tb[$tiiki] + $s_tb[$tiiki] * $t; $tiiki ++; } $size_flag = '1'; last; } $sizeno ++; } if($size_flag eq '0'){ $size_A = '1'; } $k_no[$data_no] = $a; $k_id[$data_no] = $kigou; $k_name[$data_no] = $name; $k_option[$data_no] = $option; $k_option2[$data_no] = $option2; $k_bikou[$data_no] = $bikou; $k_price[$data_no] = $price; $k_amount[$data_no] = $t; $k_tani[$data_no] = $tani; $k_picture[$data_no] = $picture; $k_total[$data_no] = $t*$price; $all_total = $k_total[$data_no] + $all_total; $all_no = $data_no; $data_no++; } $tiiki =0; if($size_A eq '1'){ @s_tb = split(/:/,$souryou[0]); while ($tiiki < $tiikiNO) { $souryou_tb[$tiiki] =$souryou_tb[$tiiki] + $s_tb[$tiiki]; $tiiki ++; } } } #========================================================================================= sub adm_add { if ( $in{'pass'} ne $adm_pass ) { print "Location: $script?mode=adm1\n\n"; exit; } &html_header(); print <<"EOF";

▲管理を出る\ \ ▲変更/削除
商品データの追加
EOF print <<"EOF"; EOF print <<"EOF";
分類名 \n" ; print <<"EOF";
商品名
商品ID
オプション(1) EOF $i = 0; while($i < $option_no) { $op_k = "OP_K".$i; $op_m = "OP_M".$i; print <<"EOF"; EOF $i++; } print <<"EOF";
記号 意味
オプション(2) EOF $i = 0; while($i < $option2_no) { $op2_k = "OP2_K".$i; $op2_m = "OP2_M".$i; print <<"EOF"; EOF $i++; } open (IN,"$cnt_file") || &error('オープンエラー16','指定された書込みファイルが開けません。'); $goods_max = ; close (IN); if($goods_max eq ""){$goods_max = 0;} $goods_no = $goods_max + 1; $pici_set.="/$goods_no".'.gif'; $picj_set.="/$goods_no".'.png'; $pic1_set.="/$goods_no".'a'."$pic1_tail"; $pic2_set.="/$goods_no".'b'."$pic1_tail"; $pic3_set.="/$goods_no".'c'."$pic1_tail"; print <<"EOF";
記号 意味
商品単価
購入単位
在庫数
購入制限
PC拡大画像A(gif,jpg)
PC拡大画像B(gif,jpg)
PC拡大画像C(gif,jpg)
PC&i-mode画像(gif)
j-sky画像(png)
商品説明 説明の色を選択してください。
EOF $co_font = @fontcolor; foreach (1..$co_font-1) { print "\n"; } $size_set .= "\n"; foreach (@size_tb) { $size_set .= "\n"; } $size_set = ""; print <<"EOF";
商品詳細説明
(PCのみ)
商品説明(携帯)
備考 $size_set
\ 
  • 商品ID及びオプションの記号は半角アルファベットと数字(半角、桁数は自由)と「-」(ハイフン)だけを用いることができます。"="や" "(ブランク)はエラーの原因になります。
  • 商品単価、在庫数、購入制限は数字(半角)のみ。(異なるときは赤く\表\示されます)
  • 購入単位とは個、ダース、ケース、束などのことです。10個を購入単位とするとき、単位をケースと記入して、商品説明で1ケースが10個であることを示してさい。
  • 商品説明に「タイムサービス(全角)」を記入すると指定されている時間にのみ購入できるようになります。
  • PC&i-mode画像(gif)はPCの一覧\表\画\面では$imagesize_w×$imagesize_hピクセルで\表\示され、i-modeでは実寸で\表\示されます。PC拡大画像(gif,jpg)は実寸で\表\示されます。j-sky画像(png)は実寸で\表\示されます。
  • 説明の欄のHTML言語は有効です。したがって、
    <a href='http://・・・'><font color='#0000ff'>リンク</font></a>
    のように記述することによりリンク(この場合は青色\表\示)が可\能\になります。
  • @size_tbを備考の欄に記入することにより送料のサイズを指定できます。未指定は最初のサイズになります。
EOF #=======================入力チェック=================================== print <<"EOF"; EOF #======================================================================== print <<"EOF";

and 検索キー \ 
EOF if (!@NEW) { print "

★該当する商品はありません★

\n"; }else{ #======================================================================== $width_name = $t_width - 390; print <<"EOF";
[検索商品数:$data_su]
EOF } #======================================================================== foreach ( @NEW ) { ($goods_no,$name,$kigou,$option,$option2,$class,$setumei,$fcolor,$price,$tani,$zaiko,$limit,$picture,$bikou) = split(/\<\>/,$_); @option = split(/\:/,$option); $i = 0; $option_set = ""; while($i < $option_no) { ($op_k[$i],$op_m[$i]) =split(/\,/,$option[$i]); if($op_k[$i] eq ""){ $i++; next;} $option_set = $option_set."\n"; $i++; } if($option_set ne ""){ $option_set = ""; }else{ $option_set ="\ "; } @option2 = split(/\:/,$option2); $i = 0; $option2_set = ""; while($i < $option2_no) { ($op2_k[$i],$op2_m[$i]) =split(/\,/,$option2[$i]); if($op2_k[$i] eq ""){ $i++; next;} $option2_set = $option2_set."\n"; $i++; } if($option2_set ne ""){ $option2_set = "
"; }else{ $option2_set ="\ "; } $price_set = $price; 1 while $price_set =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 if ($price =~ /[^0-9]/) { # 全角文字列を含んでいたら $price_set = "$price_set"; } $bikou = "
※".$bikou; if($zaiko ne ""){ $zaiko_set ="
在庫$zaiko$tani"; }else{ $zaiko_set =""; $zaiko = 100000; } if($limit ne ""){ $tani_set ="
$limit$taniまで"; }else{ $tani_set =$tani; $limit =100000; } $kosuu_setting = ""; foreach ( @kosuu_set ) { if($_ >$limit or $_ >$zaiko){ last; }else{ $kosuu_setting .= ""; } } if($kosuu_setting eq ""){ $kosuu_setting = "$tani_set"; }else{ $kosuu_setting = "$tani_set"; } if($zaiko ne 0){ $get_setting = "かごに入れる"; }else{ $get_setting = "在庫切れ"; } ($pic1,$pic2,$pic3,$pici,$picj) =split(/\|/,$picture); ($setumei,$setumei2,$setumei3) =split(/\|\|/,$setumei); ($a,$b) =split(/\//,$class); &class_name_get(); print <<"EOF"; EOF } if (@NEW) { print <<"EOF";
商品画像 商品名 オプション 価格 個数
$name
[$goods_no]$kigou
[$class_name]
$option_set$option2_set $price_set円$zaiko_set
$kosuu_setting
[説明]$setumei
[詳細]$setumei2
[携帯]$setumei3$bikou

EOF } print <<"EOF";
EOF $buf ="class=".$in{'class'}; $buf2 ="order=".$in{'order'}; $nextlink = ""; if ($next_num ne '') { $nextlink = "次の$over_no件"; } $backlink = ""; $back_num = $ff_no -$page; if($back_num >=0) { $backlink = "前の$page件\ \ \ "; } print "
$backlink$nextlink
\n"; print <<"EOF";
▲管理者用
EOF print "

$foot\n" ; } #====================================================================================== sub adm_renew { &html_header(); $header = <<"EOF";
EASY SHOP 管理 -更新
EOF print <<"EOF";

▲管理を出る\ \ ▲管理TOP(追加)\ \ ▲変更/削除
EOF print <<"EOF";
商品データの更新
EOF print <<"EOF"; EOF ($setumei,$setumei2,,$setumei3) =split(/\|\|/,$setumei); $setumei =~ s/<//g; $setumei =~ s/"/\"/g; $setumei =~ s/
/\n/g; $setumei =~ s/\.\n/\. \n/g; $setumei2 =~ s/<//g; $setumei2 =~ s/"/\"/g; $setumei2 =~ s/
/\n/g; $setumei2 =~ s/\.\n/\. \n/g; $setumei3 =~ s/<//g; $setumei3 =~ s/"/\"/g; $setumei3 =~ s/
/\n/g; $setumei3 =~ s/\.\n/\. \n/g; print <<"EOF";
商品NO $in{"id"}
分類名 \n" ; print <<"EOF";
商品名
商品ID
オプション(1) EOF @option = split(/\:/,$option); $i = 0; while($i < $option_no) { ($op_k[$i],$op_m[$su]) =split(/\,/,$option[$i]); $op_k = "OP_K".$i; $op_m = "OP_M".$i; print <<"EOF"; EOF $i++; } print <<"EOF";
記号 意味
オプション(2) EOF @option2 = split(/\:/,$option2); $i = 0; while($i < $option2_no) { ($op2_k[$i],$op2_m[$su]) =split(/\,/,$option2[$i]); $op2_k = "OP2_K".$i; $op2_m = "OP2_M".$i; print <<"EOF"; EOF $i++; } ($pic1,$pic2,$pic3,$pici,$picj) =split(/\|/,$picture); $zaiko ='('.$zaiko.')'; print <<"EOF";
記号 意味
商品単価
購入単位
在庫数
購入制限
PC拡大画像A(gif,jpg)
PC拡大画像B(gif,jpg)
PC拡大画像C(gif,jpg)
PC&i-mode画像(gif)
j-sky画像(png)
商品説明
説明の色を選択してください。
EOF $co_font = @fontcolor; foreach (0..$co_font-1) { if($fontcolor[$_] ne $fcolor){ print "\n"; }else{ print "\n"; } } print <<"EOF";
商品詳細説明
(PCのみ)
商品説明(携帯)
備考
\ 
  • 必要な部分を変更して更新をクリックしてください。
  • 商品ID及びオプションの記号は半角アルファベットと数字(半角、桁数は自由)と「-」(ハイフン)だけを用いることができます。"="や"(ブランク) "はエラーの原因になります。
  • 商品単価、在庫数、購入制限は数字(半角)のみ。(異なるときは赤く\表\示されます)
  • 購入単位とは個、ダース、ケース、束などのことです。10個を購入単位とするとき、単位をケースと記入して、商品説明で1ケースが10個であることを示してさい。
  • 在庫数はリアルタイムに更新されていますので、増減数(追加数のときは50又は+50、減らすときは-50など)を指定できます。半角数字以外では更新は行なわれません。ブランクの時は在庫数無制限となります。在庫数無制限のときに指定された在庫数はそのまま在庫数となります。
  • 商品説明に「タイムサービス(全角)」を記入すると指定されている時間にのみ購入できるようになります。
  • PC&i-mode画像(gif)はPCの一覧\表\画\面では$imagesize_w×$imagesize_hピクセルで\表\示され、i-modeでは実寸で\表\示されます。PC拡大画像(gif,jpg)は実寸で\表\示されます。j-sky画像(png)は実寸で\表\示されます。
  • 説明の欄のHTML言語は有効です。したがって、
    <a href='http://・・・'><font color='#0000ff'>リンク</font></a>
    のように記述することによりリンク(この場合は青色\表\示)が可\能\になります。
  • @size_tbを備考の欄に記入することにより送料のサイズを指定できます。未指定は最初のサイズになります。
EOF #=======================入力チェック=================================== print <<"EOF"; EOF print "

$foot\n" ; } #=============================================================== sub dell { open (IN,"$data_file") || &error('オープンエラー8','指定された書込みファイルが開けません。'); @LINE = ; close (IN); foreach $data ( @LINE ) { ($goods_no,$name,$kigou,$option,$option2,$class,$setumei,$fcolor,$price,$tani,$zaiko,$limit,$picture,$bikou) = split(/\<\>/,$data); if ( $in{"$goods_no"} ne "on" ) { push (@NEW,$data); } else { ($pic1,$pic2,$pic3,$pici,$picj) =split(/\:/,$picture); unlink "$pic1"; unlink "$pic2"; unlink "$pic3"; unlink "$pici"; unlink "$picj"; next; } } open (OUT,">$data_file") || &error('オープンエラー9','指定された書込みファイルが開けません。'); print OUT (@NEW); close (OUT); print "Location: $modoru_dell\n\n"; } #=================================================================================== sub renew { #===============================書き込みする==================================== $i = 0; $option_new = ""; while($i < $option_no) { $op_k = "OP_K".$i; $op_m = "OP_M".$i; $in{$op_k} =~ s/\s//g; $in{$op_k} =~ s/=//g; $option_new .= $in{$op_k}.",".$in{$op_m}.":"; $i++; } $i = 0; $option2_new = ""; while($i < $option2_no) { $op2_k = "OP2_K".$i; $op2_m = "OP2_M".$i; $in{$op2_k} =~ s/\s//g; $in{$op2_k} =~ s/=//g; $option2_new .= $in{$op2_k}.",".$in{$op2_m}.":"; $i++; } # ロック処理 if ($lockkey ne 0) { &lock_log(); } open (IN_r,"$data_file") || &error('オープンエラー10','指定された書込みファイルが開けません。'); @LINE_r = ; close (IN_r); foreach $data_r ( @LINE_r ) { ($goods_no,$name,$kigou,$option,$option2,$class,$setumei,$fcolor,$price,$tani,$zaiko,$limit,$tail,$bikou) = split(/\<\>/,$data_r); if ( $goods_no eq $in{'id'} ) { if($in{'zaiko'} eq ''){ $zaiko = ''; }elsif($in{'zaiko'} =~ /[()]/ ){ }elsif($in{'zaiko'} !~ /[\-\+0-9]+/ ){ }else{ if($zaiko eq ''){$zaiko =0 ;} $zaiko =$zaiko +$in{'zaiko'}; } $picture ="$in{'pic1'}|$in{'pic2'}|$in{'pic3'}|$in{'pici'}|$in{'picj'}"; $data_r = "$goods_no<>$in{'goodsname'}<>$in{'MARK'}<>$option_new<>$option2_new<>$in{'class_new'}<>$in{'setumei'}||$in{'setumei2'}||$in{'setumei3'}<>$in{'fcolor'}<>$in{'PRICE'}<>$in{'TANI'}<>$zaiko<>$in{'limit'}<>$picture<>$in{'bikou'}\n"; } push (@NEW_r,$data_r); } open (OUT,">$data_file") || &error('オープンエラー11','指定された書込みファイルが開けません。'); print OUT (@NEW_r); close (OUT); # ファイルロック解除 if (-e $loglock) { unlink($loglock); } print "Location: $modoru_dell\n\n"; } #=================================================================================== sub adding { if ( $in{'goodsname'} eq '' ) { print "Location: $modoru_adding\n\n";} elsif ( $in{'class'} eq '' ) { print "Location: $modoru_adding\n\n";} elsif ( $in{'PRICE'} eq '' ) { print "Location: $modoru_adding\n\n";} else { open (IN,"$cnt_file") || &error('オープンエラー12','指定された書込みファイルが開けません。'); $goods_max = ; close (IN); if($goods_max eq ""){$goods_max = 0;} $goods_no = $goods_max + 1; #書きこみ================================================================= $i = 0; $option_new = ""; while($i < $option_no) { $op_k = "OP_K".$i; $op_m = "OP_M".$i; $in{$op_k} =~ s/\s//g; $in{$op_k} =~ s/=//g; $option_new .= $in{$op_k}.",".$in{$op_m}.":"; $i++; } $i = 0; $option2_new = ""; while($i < $option2_no) { $op2_k = "OP2_K".$i; $op2_m = "OP2_M".$i; $in{$op2_k} =~ s/\s//g; $in{$op2_k} =~ s/=//g; $option2_new .= $in{$op2_k}.",".$in{$op2_m}.":"; $i++; } $MARK = "$in{'MARK'}"; $picture ="$in{'pic1'}|$in{'pic2'}|$in{'pic3'}|$in{'pici'}|$in{'picj'}"; # ロック処理 if ($lockkey ne 0) { &lock_log(); } open (OUT,">>$data_file") || &error('オープンエラー13','指定された書込みファイルが開けません。'); print OUT "$goods_no<>$in{'goodsname'}<>$in{'MARK'}<>$option_new<>$option2_new<>$in{'class_add'}<>$in{'setumei'}||$in{'setumei2'}||$in{'setumei3'}<>$in{'fcolor'}<>$in{'PRICE'}<>$in{'TANI'}<>$in{'zaiko'}<>$in{'limit'}<>$picture<>$in{'bikou'}\n"; close (OUT); # ファイルロック解除 if (-e $loglock) { unlink($loglock); } open (OUT_C,">$cnt_file") || &error('オープンエラー14','指定された書込みファイルが開けません。'); print OUT_C "$goods_no"; close (OUT_C); print "Location: $modoru_adding\n\n"; } } # ======================================================================================= sub adm1 { if($adm_pass eq "1234"){ $dis_closure = "
[パスワード = 1234]
"; } &html_header(); print <<"EOF";




管理者用パスワードを入力してください。

$dis_closure
更新/削除\ \  商品追加\ \  CSVデータから新規作成

■商品管理 Goods Manager■

■販売管理\  Sale Manager ■



$foot EOF } # ======================================================================================= sub adm_dell { if ( $in{'pass'} ne $adm_pass ) { print "Location: $script?mode=adm1\n\n"; exit; } &html_header(); # EASY SHOPヘッダー $header = <<"EOF";
EASY SHOP 管理 -変更/削除
EOF print <<"EOF";
▲管理を出る\ \ ▲管理TOP(追加)

EOF if (!@NEW) { print "

★該当する商品はありません★

\n"; } print <<"EOF";
商品データの変更/削除
EOF print <<"EOF";
\n" ; print <<"EOF"; and 検索キー \ 
EOF print <<"EOF";
商品画像をクリックすると該当商品のデータを変更できます。
[検索商品数:$data_su]
EOF foreach ( @NEW ) { ($goods_no,$name,$kigou,$option,$option2,$class,$setumei,$fcolor,$price,$tani,$zaiko,$limit,$picture,$bikou) = split(/\<\>/,$_); $price_set = $price; 1 while $price_set =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 if ($price =~ /[^0-9]/) { # 全角文字列を含んでいたら $price_set = "$price_set"; } if ($limit =~ /[^0-9]/) { # 全角文字列を含んでいたら $limit_set = "$limit"; }else{ $limit_set =$limit;} if ($zaiko =~ /[^0-9]/) { # 全角文字列を含んでいたら $zaiko_set = "$zaiko"; }else{$zaiko_set =$zaiko;} if($bikou ne ''){ $bikou_set ="
"."※".$bikou; } @opt = split(/\:/,$option); $i = 0; $option ="[オプション]"; while($i < $option_no) { ($op_k,$op_m) =split(/\,/,$opt[$i]); if($op_k ne ""){ $option .=$op_k."=". $op_m."\ "; } $i++; } @opt = split(/\:/,$option2); $i = 0; $option2 =" "; while($i < $option2_no) { ($op_k,$op_m) =split(/\,/,$opt[$i]); if($op_k ne ""){ $option2 .="\ ".$op_k."=". $op_m; } $i++; } ($setumei,$setumei2,$setumei3) =split(/\|\|/,$setumei); ($pic1,$pic2,$pic3,$pici,$picj) =split(/\|/,$picture); ($a,$b) =split(/\//,$class); &class_name_get(); print <<"EOF"; EOF } print <<"EOF";
削除 商品画像 商品名 単価 在庫数 購入制限
PC拡大用APC拡大用BPC拡大用CPC&i-modej-sky
[$goods_no]$kigou
$name $price_set円 $zaiko_set$tani $limit_set$tani
[分類]$class_name\  $option$option2
[説明]$setumei
[詳細]$setumei2
[携帯]$setumei3$bikou_set
EOF $buf ="class=".$in{'class'}; if($data_su > $page){ $i =1; $j =0; while ($j < $data_su){ if($j ne $ff_no ){ $jump_set .="[$i]"; }else{ $jump_set .="[$i]"; } $i ++; $j = $j + $page_dell; } } $nextlink = ""; if ($next_num ne '') { $nextlink = "次の$over_no件"; } $backlink = ""; $back_num = $ff_no -$page; if($back_num >=0) { $backlink = "前の$page件\ \ "; } print "
$backlink$nextlink\ \  $jump_set
\n"; print <<"EOF";
$foot EOF } #=================CSVデータからの一括新規作成========================== sub csv_adm{ if($adm_pass eq "1234"){ $dis_closure = "
[パスワード = 1234]
"; } &html_header(); print <<"EOF";



CSVファイル名:$csv_file

商品データファイル名:$data_file

CSVファイルから商品データファイルが新規に作成されます。
(以前のデータは失われます)




$foot EOF } #=================CSVデータからの一括新規作成(OK)========================== sub csv_adm_ok{ if($adm_pass eq "1234"){ $dis_closure = "
[パスワード = 1234]
"; } &html_header(); print <<"EOF";



CSVファイル名:$csv_file

商品データファイル名:$data_file

CSVファイルから商品データファイルが新規に作成されます。
(以前のデータは失われます)




$foot EOF } #========================================== sub csv_new{ #1)商品番号 2)商品名 3)商品記号 4)分類 5)オプション1 6)オプション2 7)説明 8)販売価格 9)通常価格 10)単位 11)在庫数 12)在庫制限 13)画像AURL 14)画像BURL 15)画像CURL 16)iモード画像URL 17)jフォン画像URL 18)備考 if ( $in{'pass'} ne $adm_pass ) { print "Location: $script?mode=adm1\n\n"; exit; } open (IN,"$csv_file") || &error('オープンエラー15','指定された書込みファイルが開けません。'); @CSV_DATA = ; close (IN); $i =0; $flag = 0; foreach $data ( @CSV_DATA ) { $i++; ($goods_no,$name,$kigou,$class,$option1,$option2,$setumei,$price,$price0,$tani,$zaiko,$limit,$pic1,$pic2,$pic3,$pic_i,$pic_j,$bikou) = split(/,/,$data); $option1 =~ s/=/,/g; $option2 =~ s/=/,/g; $bikou =~ s/\r\n//g; $bikou =~ s/\r//g; $bikou =~ s/\n//g; $bikou =~ s/comma/,/g; $setumei =~ s/\"//g; $setumei =~ s/comma/,/g; $class =~ s/\/\//\//g; #==========エラーチェック===== if ($goods_no !~ /[0-9]+/){ $error_mess.="商品番号エラー($i行目)"; $flag=1; }elsif ($er_check[$goods_no] eq 'on' ){ $error_mess.="商品番号重複エラー($i行目)"; $flag=1; }else{ $er_check[$goods_no] = 'on'; } if ($name eq ''){$error_mess.="商品名エラー($i行目)";$flag=1;} if ($zaiko !~ /[0-9]+/ and $zaiko ne '' ){$error_mess.="在庫数エラー($i行目)";$flag=1;} if ($limit !~ /[0-9]+/ and $limit ne '' ){$error_mess.="在庫制限エラー($i行目)";$flag=1;} if ($price !~ /[0-9]+/){$error_mess.="販売価格エラー($i行目)";$flag=1;} if ($price0 !~ /[0-9]+/ and $price0 ne '' ){$error_mess.="通常価格エラー($i行目)";$flag=1;} if ($class !~ /[0-9]+/ and $class ne '' ){$error_mess.="分類エラー($i行目)";$flag=1;} $error_mess.="
"; #============================= 1 while $price0 =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理 #$bikou ="通常定価$price0円$tax_setの品。"; if($price0 ne ''){ $bikou ="通常定価$price0円の品。".$bikou; } $data2 = "$goods_no<>$name<>$kigou<>$option1<>$option2<>$class<>$setumei<><>$price<>$tani<>$zaiko<>$limit<>$pic1|$pic2|$pic3|$pic_i|$pic_j<>$bikou\n"; push(@NEW_DATA,$data2); } if($flag == 0){ open (OUT,">$data_file") || &error('オープンエラー16','指定された書込みファイルが開けません。'); print OUT (@NEW_DATA); close (OUT); open (OUT_C,">$cnt_file") || &error('オープンエラー14','指定された書込みファイルが開けません。'); print OUT_C "$goods_no"; close (OUT_C); $error_mess = "

★新規作成に成功しました★

登録数:$i件

"; }else{ $error_mess = '

◆CSVファイルにエラーがありましたので新規作成を中止しました◆


'."$error_mess"; } &html_header(); print <<"EOF";



$error_mess


$foot EOF } #====================================================================== # Cookieに値を書き込むためのSet-Cookie:ヘッダを生成する # sub setCookie{ local($tmp, $val); $val = $_[1]; $val =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; $tmp = "Set-Cookie: "; $tmp .= "$_[0]=$val; "; $tmp .= "expires=Thu, 1-Jan-2030 00:00:00 GMT;\n"; return($tmp); } sub setCookie_0{ local($tmp, $val); $val = $_[1]; $val =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; $tmp = "Set-Cookie: "; $tmp .= "$_[0]=$val; "; $tmp .= ";\n"; return($tmp); } # # Cookieの値を読み出す # sub getCookie { local($xx, $name, $value); for $xx (split(/; */, $ENV{'HTTP_COOKIE'})) { ($name, $value) = split(/=/, $xx); $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; $COOKIE{$name} = $value; } } sub html_header{ print "Content-type: text/html\n\n"; print "$main_title\n"; print "\n"; print "\n"; print "$style"; print "$body$header\n"; } #=================ロック処理=================================== sub lock_log{ local($retry) = 5; while (!symlink(".", $loglock)) { if (--$retry <= 0) { &error("mu_shop is lock."); } sleep(1); } } #=============================================================== sub error { # ファイルロック解除 if (-e $loglock) { unlink($loglock); } &html_header(); print <<"EOF";
▲商品画面
EOF print "
$_[0]
\n"; print "
$_[1]
\n"; print "

$foot\n"; exit; }