#!/usr/bin/perl #/////////////////////////////////////////////////////////////////////////////// # Super Multi Shop Ver5.04 # ----- 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ファイル書き込みの際にエラーが起きる場合がったバグを修正。cgi-bin下でのみCGIが動くサーバで、画像フォルダを指定しやすいように配慮。 # 【Ver5.02】CSVファイル及びログファイルに氏名2,郵便番号2,住所2,電話2を追加。 # 【Ver5.04】CSVファイルを添付しない設定にしたときに連絡事項が設定されないバグを修正。 #/////////////////////////////////////////////////////////////////////////////// #================================ [注意事項] =================================== # このスクリプトはシェアウエアです。このスクリプトを使用したいかなる損害に対して # も作者は一切の責任を負いません。 #====================================使用法===================================== # 次のようにして呼び出してください。 # 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", "", "z"); $form{$key} = $val; } while (($key,$val) = each %in) { # &jcode'convert(*val, "sjis", "", "z"); $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") { $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 './m_set.pl'; $in{'order'}=$order; }else{ require './m_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('データベース読取エラー1','復旧をお待ちください.'); } @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 'p_wide' ) { &p_wide; exit;} #==================================================================== # Cookieの値を得る &getCookie(); $classmei = $COOKIE{'BUNRUIMEI'}; $ff_no = $COOKIE{'FF'}; $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,$tail,$bikou) = split(/\<\>/,$data); if($pas_word ne "") { # 入力内容を整理 $word = $pas_word; $word =~ s/ / /g; $word =~ s/\t/ /g; @pairs = split(/ /,$word); $class_mei =$class_tb[$class]; # 検索処理 $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_mei,$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 "") { if ($class eq $classmei) { ; } else { next; } } if ($in{'id'} ne '' && $in{'mode'} eq 'adm4') { 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;} else { &shop_form; exit;} #=============================画像の拡大================================================= sub p_wide { &html_header(); print <<"EOF";
▲戻る

NO.$in{'G_NO'}





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"; $order_log=""; # ロック処理 if ($lockkey ne 0) { &lock_log(); } open (IN,"$data_file") || &error('オープンエラー2','指定された書込みファイルが開けません。'); @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('オープンエラー3','指定された書込みファイルが開けません。'); print OUT (@NEW); close (OUT); open (IN,"$NO_file") || &error('オープンエラー4','指定された書込みファイルが開けません。'); $order_max = ; close (IN); if($order_max eq ""){$order_max = 0;} $order_no = $order_max + 1; open (OUT,">$NO_file") || &error('オープンエラー5','指定された書込みファイルが開けません。'); 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('オープンエラー6','指定された書込みファイルが開けません。'); 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('オープンエラー7','指定された書込みファイルが開けません。'); $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('オープンエラー8','ログファイルが開けません。'); 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; #-------BEGINBEGIN--------- $header_tenpu =</g; $mess_C =~ s/"/\"/g; $mess_C =~ s/
/\n/g; $mess_C =~ s/\.\n/\. \n/g; 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"; } } $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
連絡事項 \ 

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


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("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{"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; } } $gazou ="$dir_m/".$k_no[$_].".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" ; } #=======================================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{ $condition =$class_tb[$in{'class'}]; } } $i=0; $link_set =""; foreach (@link_htm) { $link_set .="$link_tb[$i] | "; $i++; } if($link_set ne ""){ $link_set ="| ".$link_set; $link_set = "$link_set"; } $jump =$script.'?'."class=all&keyword=&superkey=1&FF=0&order=$in{'order'}"; $category .="| $class_all | "; $ctgry_su =1; $k =0; $j =$orikaesi[$k]; foreach (@ctgry_tb) { $jump =$script.'?'."class=all&keyword=$_&superkey=1&FF=0&order=$in{'order'}"; $category .=" $_ |"; $ctgry_su ++; if($ctgry_su eq $j){ $category .="
|"; $k ++; $j = $j + $orikaesi[$k]; } } $i =0; foreach (@class_tb) { $jump =$script.'?'."class=$i&keyword=&superkey=1&FF=0&order=$in{'order'}"; $category .=" $_ |"; $i ++; $ctgry_su ++; if($ctgry_su eq $j){ $category .="
|"; $k ++; $j = $j + $orikaesi[$k]; } } print < $link_set


$category
EOF print <<"EOF";
\ 買い物合計額: $all_total円\ 
EOF print <<"EOF";
検索条件[$condition]\ 検索商品数[$data_su\件] ▲価格順\表\示
EOF if (!@NEW) { print <<"EOF";
★該当する商品はありません★
EOF }else{ #======================================================================== $width_name = $t_width - 430; print <<"EOF";
EOF } #==================================== foreach ( @NEW ) { ($goods_no,$name,$kigou,$option,$option2,$class,$setumei,$fcolor,$price,$tani,$zaiko,$limit,$tail,$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_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]"; } } $gazou ="$dir_m/$goods_no".'.gif'; if($tail ne ""){ $gazou2 ="$modoru_goods&mode=p_wide&G_NO=$goods_no&IMG=$dir_p/$goods_no"."$tail"; }else{ $gazou2 ="$modoru_goods&mode=p_wide&G_NO=$goods_no&IMG=$dir_p/space.gif"; } $w_setum =$t_width-290; print < EOF } if (@NEW) { print <<"EOF";
[$goods_no]$kigou
$name
[$class_tb[$class]]
$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件\ \ "; } print "
$backlink$nextlink\ \  $jump_set
\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,$tail,$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_tail[$data_no] = $tail; $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++; } print <<"EOF";
記号 意味
商品単価
購入単位
在庫数
購入制限
PC&i-mode画像(gif)
PC拡大画像(gif,jpg)
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";
備考 $size_set
\ 
  • 商品ID及びオプションの記号は半角アルファベットと数字(半角、桁数は自由)と「-」(ハイフン)だけを用いることができます。"="や" "(ブランク)はエラーの原因になります。
  • 商品単価、在庫数、購入制限は数字(半角)のみ。(異なるときは赤く\表\示されます)
  • 購入単位とは個、ダース、ケース、束などのことです。10個を購入単位とするとき、単位をケースと記入して、商品説明で1ケースが10個であることを示してさい。
  • 商品説明に「タイムサービス(全角)」を記入すると指定されている時間にのみ購入できるようになります。
  • PC&i-mode画像(gif)はPCの一覧\表\画\面では90×90ピクセルで\表\示され、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,$tail,$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_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"; } if($zaiko ne 0){ $get_setting = "かごに入れる"; }else{ $get_setting = "在庫切れ"; } $gazou ="$dir_m/$goods_no".'.gif'; print <<"EOF"; EOF } if (@NEW) { print <<"EOF";
商品画像 商品名 オプション 価格 個数
[$goods_no]$kigou
$name
[$class_tb[$class]]
$option_set$option2_set $price_set円$zaiko_set
$kosuu_setting
$setumei_set $bikou_form
$get_setting

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 =~ s/<//g; $setumei =~ s/"/\"/g; $setumei =~ s/
/\n/g; $setumei =~ 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++; } $zaiko ='('.$zaiko.')'; print <<"EOF";
記号 意味
商品単価
購入単位
在庫数
購入制限
PC&i-mode画像(gif) 画像変更\ \ \ \ 
PC拡大画像(gif,jpg) 画像変更\ \ \ \ 
j-sky画像(png) 画像変更\ \ \ \ 
商品説明
説明の色を選択してください。
EOF $co_font = @fontcolor; foreach (0..$co_font-1) { if($fontcolor[$_] ne $fcolor){ print "\n"; }else{ print "\n"; } } print <<"EOF";
備考
\ 
  • 必要な部分を変更して更新をクリックしてください。
  • 商品ID及びオプションの記号は半角アルファベットと数字(半角、桁数は自由)と「-」(ハイフン)だけを用いることができます。"="や"(ブランク) "はエラーの原因になります。
  • 商品単価、在庫数、購入制限は数字(半角)のみ。(異なるときは赤く\表\示されます)
  • 購入単位とは個、ダース、ケース、束などのことです。10個を購入単位とするとき、単位をケースと記入して、商品説明で1ケースが10個であることを示してさい。
  • 在庫数はリアルタイムに更新されていますので、増減数(追加数のときは50又は+50、減らすときは-50など)を指定できます。半角数字以外では更新は行なわれません。ブランクの時は在庫数無制限となります。在庫数無制限のときに指定された在庫数はそのまま在庫数となります。
  • 商品説明に「タイムサービス(全角)」を記入すると指定されている時間にのみ購入できるようになります。
  • PC&i-mode画像(gif)はPCの一覧\表\画\面では90×90ピクセルで\表\示され、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('オープンエラー9','指定された書込みファイルが開けません。'); @LINE = ; close (IN); foreach $data ( @LINE ) { ($goods_no,$name,$kigou,$option,$option2,$class,$setumei,$fcolor,$price,$tani,$zaiko,$limit,$tail,$bikou) = split(/\<\>/,$data); if ( $in{"$goods_no"} ne "on" ) { push (@NEW,$data); } else { unlink "$dir_m_w/$goods_no.gif"; unlink "$dir_p_w/$goods_no$tail"; unlink "$dir_m_w/$goods_no.png"; next; } } open (OUT,">$data_file") || &error('オープンエラー10','指定された書込みファイルが開けません。'); print OUT (@NEW); close (OUT); print "Location: $modoru_dell\n\n"; } #=================================================================================== sub renew { $macbin=0; foreach (@in) { if ($_ =~ /(.*)gazoum(.*)/i) { $fnamem=$2; } if ($_ =~ /(.*)gazoup(.*)/i) { $fnamep=$2; } if ($_ =~ /(.*)gazouj(.*)/i) { $fnamej=$2; } if ($_ =~ /application\/x-macbinary/i) { $macbin=1; } } if ($form{'gazouj'} ne '' && $in{'gazou_j_adm4'} eq 'on') { $flag=0; if ($fnamej =~ /png/i) { $flag=1; } if (!$flag) { &error("j-sky用の画像はpng画像です。"); } $upfile = $form{'gazouj'}; # マックバイナリ対策 if ($macbin) { $length = substr($upfile,83,4); $length = unpack("%N",$length); $upfile = substr($upfile,128,$length); } # 添付データを書き込み $image_dir = "$dir_m_w/$in{'id'}".'.png'; open(OUT,"> $image_dir") || &error("画像のアップロードに失敗しました","$image_dir"); binmode(OUT); binmode(STDOUT); print OUT $upfile; close(OUT); chmod (0666,$image_dir); # ファイルサイズ制限ルーチン================================================= $FileName = $image_dir; ( $dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks ) = stat ( $FileName ); if ( $size > 500000 ) { unlink $image_dir ; &error ("ファイルサイズ超過。","ファイル容量が500キロバイトを超えています。"); } if ( $size == 0 ) { unlink $image_dir; } } if ($form{'gazoum'} ne '' && $in{'gazou_m_adm4'} eq 'on') { $flag=0; if ($fnamem =~ /gif/i ) { $flag=1; } if (!$flag) { &error("アップロードできないファイル形式です。"); } $upfile = $form{'gazoum'}; # マックバイナリ対策 if ($macbin) { $length = substr($upfile,83,4); $length = unpack("%N",$length); $upfile = substr($upfile,128,$length); } # 添付データを書き込み $image_dir = "$dir_m_w/$in{'id'}".'.gif'; open(OUT,"> $image_dir") || &error("画像のアップロードに失敗しました","$image_dir"); binmode(OUT); binmode(STDOUT); print OUT $upfile; close(OUT); chmod (0666,$image_dir); # ファイルサイズ制限ルーチン================================================= $FileName = $image_dir; ( $dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks ) = stat ( $FileName ); if ( $size > 500000 ) { unlink $image_dir ; &error ("ファイルサイズ超過。","ファイル容量が500キロバイトを超えています。"); } if ( $size == 0 ) { unlink $image_dir; } } if ( $form{'gazoup'} ne '' && $in{'gazou_p_adm4'} eq 'on') { $flag=0; if ($fnamep =~ /gif/i ) { $tail=".gif";$flag=1;} if (($fnamep =~ /.jpg/i) || ($fnamep =~ /.jpeg/i)) { $tail=".jpg"; $flag=1; } if (!$flag) { &error("アップロードできないファイル形式です。"); } $upfile = $form{'gazoup'}; # マックバイナリ対策 if ($macbin) { $length = substr($upfile,83,4); $length = unpack("%N",$length); $upfile = substr($upfile,128,$length); } # 添付データを書き込み $image_dir = "$dir_p_w/$in{'id'}$tail"; open(OUT,"> $image_dir") || &error("画像のアップロードに失敗しました","$image_dir"); binmode(OUT); binmode(STDOUT); print OUT $upfile; close(OUT); chmod (0666,$image_dir); # ファイルサイズ制限ルーチン================================================= $FileName = $image_dir; ( $dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks ) = stat ( $FileName ); if ( $size > 500000 ) { unlink $image_dir ; &error ("ファイルサイズ超過。","ファイル容量が500キロバイトを超えています。"); } if ( $size == 0 ) { unlink $image_dir; } $tail_new =$tail; } #===============================書き込みする==================================== $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('オープンエラー11','指定された書込みファイルが開けません。'); @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'}; } if ($form{'gazoup'} eq '' && $in{'gazou_p_adm4'} eq 'on') { $tail_new =""; unlink $image_dir; }elsif($form{'gazou_p_adm4'} eq 'on'){ $image_dir_old = "$dir_p_w/$in{'id'}$tail"; if($image_dir ne $image_dir_old){unlink $image_dir_old;} }elsif($in{'gazou_p_adm4'} ne 'on'){ $tail_new =$tail; } $data_r = "$goods_no<>$in{'goodsname'}<>$in{'MARK'}<>$option_new<>$option2_new<>$in{'class_new'}<>$in{'setumei'}<>$in{'fcolor'}<>$in{'PRICE'}<>$in{'TANI'}<>$zaiko<>$in{'limit'}<>$tail_new<>$in{'bikou'}\n"; } push (@NEW_r,$data_r); } open (OUT,">$data_file") || &error('オープンエラー12','指定された書込みファイルが開けません。'); 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{'MARK'} eq '' ) { print "Location: $modoru_adding\n\n";} elsif ( $in{'PRICE'} eq '' ) { print "Location: $modoru_adding\n\n";} else { open (IN,"$cnt_file") || &error('オープンエラー13','指定された書込みファイルが開けません。'); $goods_max = ; close (IN); if($goods_max eq ""){$goods_max = 0;} $goods_no = $goods_max + 1; $macbin=0; foreach (@in) { if ($_ =~ /(.*)gazoum(.*)/i) { $fnamem=$2; } if ($_ =~ /(.*)gazoup(.*)/i) { $fnamep=$2; } if ($_ =~ /(.*)gazouj(.*)/i) { $fnamej=$2; } if ($_ =~ /application\/x-macbinary/i) { $macbin=1; } } if ( $form{'gazouj'}) { $flag=0; if ($fnamej =~ /png/i) { $flag=1; } if (!$flag) { &error("j-sky用の画像はpng画像です。$test"); } $upfile = $form{'gazouj'}; # マックバイナリ対策 if ($macbin) { $length = substr($upfile,83,4); $length = unpack("%N",$length); $upfile = substr($upfile,128,$length); } # 添付データを書き込み $image_dir = "$dir_m_w/$goods_no".'.png'; open(OUT,"> $image_dir") || &error("画像のアップロードに失敗しました","$image_dir"); binmode(OUT); binmode(STDOUT); print OUT $upfile; close(OUT); chmod (0666,$image_dir); # ファイルサイズ制限ルーチン================================================= $FileName = $image_dir; ( $dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks ) = stat ( $FileName ); if ( $size > 500000 ) { unlink $image_dir ; &error ("ファイルサイズ超過。","ファイル容量が500キロバイトを超えています。"); } if ( $size == 0 ) { unlink $image_dir; } } if ( $form{'gazoum'}) { $flag=0; if ($fnamem =~ /gif/i ) { $flag=1; } if (!$flag) { &error("アップロードできないファイル形式です。"); } $upfile = $form{'gazoum'}; # マックバイナリ対策 if ($macbin) { $length = substr($upfile,83,4); $length = unpack("%N",$length); $upfile = substr($upfile,128,$length); } # 添付データを書き込み $image_dir = "$dir_m_w/$goods_no".'.gif'; open(OUT,"> $image_dir") || &error("画像のアップロードに失敗しました","$image_dir"); binmode(OUT); binmode(STDOUT); print OUT $upfile; close(OUT); chmod (0666,$image_dir); # ファイルサイズ制限ルーチン================================================= $FileName = $image_dir; ( $dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks ) = stat ( $FileName ); if ( $size > 500000 ) { unlink $image_dir ; &error ("ファイルサイズ超過。","ファイル容量が500キロバイトを超えています。"); } if ( $size == 0 ) { unlink $image_dir; } } if ( $form{'gazoup'}) { $flag=0; if ($fnamep =~ /gif/i ) { $tail=".gif";$flag=1;} if (($fnamep =~ /.jpg/i) || ($fnamep =~ /.jpeg/i)) { $tail=".jpg"; $flag=1; } if (!$flag) { &error("アップロードできないファイル形式です。"); } $upfile = $form{'gazoup'}; # マックバイナリ対策 if ($macbin) { $length = substr($upfile,83,4); $length = unpack("%N",$length); $upfile = substr($upfile,128,$length); } # 添付データを書き込み $image_dir = "$dir_p_w/$goods_no$tail"; open(OUT,"> $image_dir") || &error("画像のアップロードに失敗しました","$image_dir"); binmode(OUT); binmode(STDOUT); print OUT $upfile; close(OUT); chmod (0666,$image_dir); # ファイルサイズ制限ルーチン================================================= $FileName = $image_dir; ( $dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks ) = stat ( $FileName ); if ( $size > 500000 ) { unlink $image_dir ; &error ("ファイルサイズ超過。","ファイル容量が500キロバイトを超えています。"); } if ( $size == 0 ) { unlink $image_dir; } } #書きこみ================================================================= $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'}"; # ロック処理 if ($lockkey ne 0) { &lock_log(); } open (OUT,">>$data_file") || &error('オープンエラー14','指定された書込みファイルが開けません。'); print OUT "$goods_no<>$in{'goodsname'}<>$in{'MARK'}<>$option_new<>$option2_new<>$in{'class_add'}<>$in{'setumei'}<>$in{'fcolor'}<>$in{'PRICE'}<>$in{'TANI'}<>$in{'zaiko'}<>$in{'limit'}<>$tail<>$in{'bikou'}\n"; close (OUT); # ファイルロック解除 if (-e $loglock) { unlink($loglock); } open (OUT_C,">$cnt_file") || &error('オープンエラー15','指定された書込みファイルが開けません。'); 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


$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,$tail,$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++; } $gazou ="$dir_m/$goods_no.gif"; $gazou2 ="$dir_p/$goods_no$tail"; $gazou3 ="$dir_m/$goods_no.png"; print <<"EOF"; EOF } print <<"EOF";
削除 商品画像 商品名 単価 在庫数 購入制限
PC&i-modePC拡大用j-sky
[$goods_no]$kigou
$name $price_set円 $zaiko_set$tani $limit_set$tani
[分類]$class_tb[$class]\  $option$option2
[説明]$setumei$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 } # 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("m_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; }