#! /usr/local/bin/perl # # 注文データ入力(商品マスタを利用した表形式画面) # 1.注文入力 # 2.確認表示 # 3.メール送信 # 4.確認書返信    # # id=order2.cgi # # update=2001.03.25 # バグ修正・・・のしと支払い方法送信 # 日本語コード変換ライブラリ(v2.0)の指定 # &ReadParse命令で、$in{ }の変数にフォーム入力データが格納される require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse; # 設置するURLを設定 $reload = 'http://www0.kumagaya.or.jp/cgi-bin/users/chichibu/order2.cgi'; $file = "/dialup/chichibu/cgi-bin/syohino.dat"; # 画像ファイルディレクトリ $dir="/dialup/chichibu/gazo/"; $sendmail = '/usr/lib/sendmail'; # メールの送り先 $myaddress = 'chichibu@po.kumagaya.or.jp'; # 税率 $zeiritu=0.05; $noshi[0]="なし"; $noshi[1]="御中元"; $noshi[2]="御歳暮"; $noshi[3]="御祝い"; $noshi[4]="内祝い"; $noshi[5]="御見舞い"; $noshi[6]="その他"; $noshinm[1]="ご依頼主のお名前"; $noshinm[2]="ご依頼主の姓のみ"; $noshinm[3]="その他"; $shiharai[1]="郵便振込"; $shiharai[2]="代金着払い"; # テスト変数表示(デバッグ時のみon) $test = ""; #################################### # # # メインルーチン(処理の分岐) # # # #################################### # 全体の流れを決定する if ($in{'action'} eq 'first') { &first; } elsif ($in{'action'} eq 'check') { ✓ } elsif ($in{'action'} eq 'send') { &sendmail; } else { &first; } ############################################# # # # 登録データを読む(訂正削除用配列)  # # # ############################################# sub read { # データを読み各連想配列に加算する # 1    2 3 4 5  6   7   8 9 # 商品番号、表示順、商品名、商品説明、価格、種類、登録日、開始日、終了日 open(DB,"$file"); flock(DB,2); @data=; flock(DB,8); close(DB); # データ数 $cnt=@data; # その順で各項目配列セット @syono=(); @hinmei=(); @biko=(); @kakaku=(); @ymd1=(); @ymd2=(); # 処理日時 ($t1,$t2,$t3,$dd,$mm,$yy,$t7) = localtime; # 月補正 $mm++; # 2桁にする $mm = sprintf("%.2d",$mm); $dd = sprintf("%.2d",$dd); # 西暦4桁処理 if ($yy < 70) { $yy = $yy + 2000;} else { $yy = $yy + 1900;} $ymd=$yy.$mm.$dd; $i=1; # 各レコードをレコード番号を配列にセットする foreach (@data) { ($syono,$seqno,$hinmei,$biko,$kakaku,$syurui,$tymd,$ymd1,$ymd2) = split(/\t/,$_); # 表示期間チェック $syono[$i] = $syono; $hinmei[$i] = $hinmei; # 内容の改行を元に戻す $biko =~ s/&k/\n/g; $biko =~ s/\n/
/g; $biko[$i] = $biko; $kakaku[$i] = $kakaku; $ymd1[$i] = $ymd1; $ymd2[$i] = $ymd2; $i++; } # end of foreach } # end of read ############################################# # # # 最初に表示する画面(注文書画面)    # # # ############################################# sub first { print "Content-type: text/html\n\n"; print < ご注文メール

ご注文メール (2)


ご注文方法

1.ご注文する商品の、ご注文数入力欄に数量を指定して下さい。11本以上のご注文は、半角数字でご入力して下さい。
2.ご依頼主欄を必ず記入してください。(電話番号又はメールアドレスどちらか必ず入力して下さい)
3.のし種類欄は、ご希望の「のし」をクリックして下さい。ご希望の種類が無い場合は、その他をクリックしてご希望の文字を入力して下さい。
4.お支払い方法欄は、ご希望のお支払い方法を選択して下さい。(代金着払いと郵便振込によるご送金があります)
5.備考欄は、ご依頼・ご意見・ご質問等何かありましたらご記入下さい。

6.入力を終えましたら「入力終了」ボタンを押して下さい。(この時点では送信されません)
7.次に、ご注文確認画面が表示されます。
8.ご注文内容に間違えがなければ「ご注文送信」ボタンを押して下さい。(送信されます)
9.画面が変わり、「送信を完了しました。」と表示します。
10.別のご注文がいらっしゃる方は同じ画面内の「最初の画面に戻ります」ボタンを押してご注文をお願いいたします。

ご注文商品
EOM # 商品マスタを読む &read; for ($i=1; $i<=$cnt; $i++) { # 期間内なら表示する if ($ymd >= $ymd1[$i] && $ymd <= $ymd2[$i]) { print ''; print ''."\n"; print ''."\n"; print ''."\n"; print ''."\n"; # 数量入力 print ''."\n"; print ''; } # end of if } # end of for print '▼をクリックし数量一覧から注文数をクリックします。'; print '
'; print '
商品コード 商品名 商品説明 価格(税抜き) ご注文数入力欄
'.$syono[$i].''.$hinmei[$i].''.$biko[$i].''.$kakaku[$i].''."\n"; print '
'."\n"; print '11本以上のご注文の場合は、下に入力して下さい'."\n"; print '
(注)数字は半角数字でお願いします。'."\n"; print '
'."\n"; print '
'."\n"; print <
ご依頼主 (ご依頼主とご請求先、お届け先が同一の場合はこの欄のみの入力です)
お名前(漢字)
お名前(ふりがな)
郵便番号
ご住所
電話番号(市外局番から)
メールアドレス(半角入力)


ご請求先 (未入力時、ご依頼主にご請求させていただきます。)
お名前(漢字)
お名前(ふりがな)
郵便番号
ご住所
電話番号(市外局番から)


お届け先 (未入力時、ご依頼主にお届けさせていただきます。)
お名前(漢字)
お名前(ふりがな)
郵便番号
ご住所
電話番号(市外局番から)


のし種類(複数選択の場合は備考に、その旨ご入力下さい)
なし   御中元  御歳暮  御祝い  内祝い  お見舞い
その他 

のし紙のお名前(複数の場合は備考に、その旨ご入力下さい)
ご依頼主のお名前  ご依頼主の姓のみ  
その他 


お支払い方法



備 考



(注意)20歳未満の方がお酒を購入することは、法律で禁じられています。

ご注文内容を入力終了しましたら次に、入力終了ボタンをクリックして下さい。
クリック後、ご注文確認画面となります。(この時点では未送信です)
 

EOM } ############################################# # # # 入力データ確認表示画面ルーチン     # # # ############################################# sub kakunin { &read; print "Content-type: text/html\n\n"; print < ご注文データの確認

ご注文データの確認

EOM print '
'; # 送信する print '
' . "\n"; # 表作成 print ''."\n"; print ""; print '"; print '"; print '"; print '"; print ""; $suryo=0; # 合計数量 $total=0; # 合計金額 $renban=0; # 注文連番 for ($i=1; $i<=$cnt; $i++) { # タグの無効化 $ckdt=$in{inpsu.$i} ; &tagck ; $inpsu=$ckdt; # SELECT数が0で入力数量がある場合 if ($in{selsu.$i} == 0 && $inpsu > 0) { $in{selsu.$i} = $inpsu ; } if ($in{selsu.$i} > 0) { print ""; #ご注文商品名 print '"; # 単価 print '"; # 数量 print '"; # 金額計算 $kingak=$in{selsu.$i} * $kakaku[$i]; print '"; print ""; # 数量加算 $suryo = $suryo + $in{selsu.$i}; # 金額加算 $total = $total + $kingak; $order='ご注文商品名:'.$hinmei[$i].' 数量:'.$in{selsu.$i}.' 個 金額: '.$kingak.'円'."\n"; # 注文連番は1.2.3・・・ $renban++; print '' . "\n"; if ($test eq "on") { print $order; } } # end of if } # end of for # 注文合計 print ""; print '"; print '"; print '"; print ""; # 消費税 $tax=$total * $zeiritu; # 切り捨て ($tax,$dummy)=split(/\./,$tax); print ""; print '"; print '"; print ""; # 税込み合計 $goukei=$total + $tax; print ""; print '"; print '"; print '"; print ""; print "
'."\n"; print ''."\n"; print 'ご注文商品名'; print ''; print "'."\n"; print ''."\n"; print '価格'; print ''; print "'."\n"; print ''."\n"; print 'ご注文数量'; print ''; print "'."\n"; print ''."\n"; print '金額'; print ''; print "
'."\n"; print ''."\n"; print $hinmei[$i]; print ''; print "'."\n"; print ''."\n"; print $kakaku[$i]; print ''; print "'."\n"; print ''."\n"; print $in{selsu.$i}; print ''; print "'."\n"; print ''."\n"; print $kingak; print ''; print "
'."\n"; print ''."\n"; print '商品計'; print ''; print "'."\n"; print ''."\n"; print $suryo; print ''; print "'."\n"; print ''."\n"; print $total; print ''; print "
'."\n"; print ''."\n"; print '消費税'; print ''; print "'."\n"; print ''."\n"; print $tax; print ''; print "
'."\n"; print ''."\n"; print '合 計'; print ''; print "'."\n"; print ''."\n"; print $suryo; print ''; print "'."\n"; print ''."\n"; print $goukei; print ''; print "
"; $ordertotal="・商品計: $total円"."\n"; $ordertax="・消費税: $tax円"."\n"; $ordergoukei="●合 計: $goukei円"."\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; # 最終注文連番 print '' . "\n"; print '
'; print ''; print "** ご依頼主 **"."\n"; print ''; print '
'; # タグの無効化 $ckdt=$in{'ira-namek'} ; &tagck ; $in{'ira-namek'}=$ckdt; $ckdt=$in{'ira-namef'} ; &tagck ; $in{'ira-namef'}=$ckdt; $ckdt=$in{'ira-yubin'} ; &tagck ; $in{'ira-yubin'}=$ckdt; $ckdt=$in{'ira-addr'} ; &tagck ; $in{'ira-addr'}=$ckdt; $ckdt=$in{'ira-tel'} ; &tagck ; $in{'ira-tel'}=$ckdt; $ckdt=$in{'ira-email'} ; &tagck ; $in{'ira-email'}=$ckdt; $ckdt=$in{'sei-namek'} ; &tagck ; $in{'sei-namek'}=$ckdt; $ckdt=$in{'sei-namef'} ; &tagck ; $in{'sei-namef'}=$ckdt; $ckdt=$in{'sei-yubin'} ; &tagck ; $in{'sei-yubin'}=$ckdt; $ckdt=$in{'sei-addr'} ; &tagck ; $in{'sei-addr'}=$ckdt; $ckdt=$in{'sei-tel'} ; &tagck ; $in{'sei-tel'}=$ckdt; $ckdt=$in{'tod-namek'} ; &tagck ; $in{'tod-namek'}=$ckdt; $ckdt=$in{'tod-namef'} ; &tagck ; $in{'tod-namef'}=$ckdt; $ckdt=$in{'tod-yubin'} ; &tagck ; $in{'tod-yubin'}=$ckdt; $ckdt=$in{'tod-addr'} ; &tagck ; $in{'tod-addr'}=$ckdt; $ckdt=$in{'tod-tel'} ; &tagck ; $in{'tod-tel'}=$ckdt; # のしのその他 $ckdt=$in{'sonota'} ; &tagck ; $in{'sonota'}=$ckdt; # のし紙のその他名 $ckdt=$in{'sonotanm'} ; &tagck ; $in{'sonotanm'}=$ckdt; print ''."\n"; print ''; print ''."\n"; print ''; print ''."\n"; print ''; print ''."\n"; print ''; print ''."\n"; print ''; print ''."\n"; print ''; print ''."\n"; print ''; print '
お名前(漢字)'."\n"; print $in{'ira-namek'}; print ' 様'; print '
お名前(ふりがな)'."\n"; print $in{'ira-namef'}; print '
郵便番号'."\n"; print $in{'ira-yubin'}; print '
ご住所'."\n"; print $in{'ira-addr'}; print '
電話番号(市外局番から)'."\n"; print $in{'ira-tel'}; print '
メールアドレス(半角入力)'."\n"; print $in{'ira-email'}; print '
'; print '
'; print ''; print "** ご請求先 **"."\n"; print ''; print '
'; print ''."\n"; print ''; print ''."\n"; print ''; print ''."\n"; print ''; print ''."\n"; print ''; print ''."\n"; print ''; print ''."\n"; print ''; print '
お名前(漢字)'."\n"; if (length($in{'sei-namek'}) > 1) { print $in{'sei-namek'}; print ' 様';} else { print 'ご依頼主様と同じ'; } print '
お名前(ふりがな)'."\n"; print $in{'sei-namef'}; print '
郵便番号'."\n"; print $in{'sei-yubin'}; print '
ご住所'."\n"; if (length($in{'sei-addr'}) > 1) { print $in{'sei-addr'}; } else { print 'ご依頼主様と同じ'; } print '
電話番号(市外局番から)'."\n"; print $in{'sei-tel'}; print '
'; print '
'; print ''; print "** お届け先 **"."\n"; print ''; print '
'; print ''."\n"; print ''; print ''."\n"; print ''; print ''."\n"; print ''; print ''."\n"; print ''; print ''."\n"; print ''; print ''."\n"; print ''; print '
お名前(漢字)'."\n"; if (length($in{'tod-namek'}) > 1) { print $in{'tod-namek'}; print ' 様';} else { print 'ご依頼主様と同じ'; } print ' 様'; print '
お名前(ふりがな)'."\n"; print $in{'tod-namef'}; print '
郵便番号'."\n"; print $in{'tod-yubin'}; print '
ご住所'."\n"; if (length($in{'tod-addr'}) > 1) { print $in{'tod-addr'}; } else { print 'ご依頼主様と同じ'; } print '
電話番号(市外局番から)'."\n"; print $in{'tod-tel'}; print '
'; print '
'; print '
'; $sno=$in{'noshi'}; if ($sno == 6) { $noshi[$sno] = $in{'sonota'} } print "のし:$noshi[$sno]"."\n"; print '

'; $sno=$in{'noshinm'}; if ($sno == 3) { $noshinm[$sno] = $in{'sonotanm'}; } print "のし紙のお名前:$noshinm[$sno]"."\n"; # 送信用 $noshimei=$noshinm[$sno]; print '

'; $sno=$in{'shiharai'}; print "お支払い方法:$shiharai[$sno]"."\n"; # 送信用 $shiharaimei=$shiharai[$sno]; print '
'; print '
'; print "備考:$in{'bikou'}"."\n"; print '
'; # 入力データの受け渡し print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; # 漢字化けをおこすので、データと一緒に変数渡しする print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; # 処理日時 ($t1,$t2,$t3,$sysdd,$sysmm,$sysyy,$t7) = localtime; # 年4桁化 $sysyy = $sysyy + 1900; # 月補正 $sysmm++; # 2桁にする $t1 = sprintf("%.2d",$t1); $t2 = sprintf("%.2d",$t2); $t3 = sprintf("%.2d",$t3); $nichiji = '送信日時:'.$sysyy.'年'.$sysmm.'月'.$sysdd.'日 '.$t3.'時'.$t2.'分'; print '' . "\n"; print '' . "\n"; print ''."\n"; print "
\n"; # 取消する print '
' . "\n"; print '' . "\n"; print ''."\n"; print "
\n"; print "\n"; print "\n"; } # end of first # # タグの無効化サブルーチン # sub tagck { $ckdt =~ s//>/ig; $ckdt =~ s///ig; } ########################################## # # # 入力されたデータのチェックルーチン # # # ########################################## sub check { # 名前チェック if ($in{'ira-namek'} eq "" ) { &error(1); } # 住所チェック if ($in{'ira-addr'} eq "") { &error(2); } # 電話またはemailどちらか必須 if ($in{'ira-tel'} eq "" && $in{'ira-email'}) { &error(3); } # 電話番号チェック if (length($in{'ira-tel'}) < 10) { &error(5); } # 英数字と@と.と_と-(大文字と小文字の違いを無視するiフラグ) if ($in{'ira-email'} =~ /[^a-z0-9@._-]/i) { &error(4); } # メールアドレスが入力されたとき1つの@とその後ろに.が含まれているばOKでそうでないならエラー if ($in{'ira-email'} ne "") { if (!($in{'ira-email'} =~ /.*\@.*\..*/)) { &error(4); }} # メールアドレスが短すぎる場合 if ($in{'ira-email'} ne "") {if (length($in{'ira-email'}) < 6) { &error(4); }} # チェック通過 &kakunin; } ############################################# # # # チェックエラー表示画面ルーチン      # # # ############################################# sub error { # &error(xx); で呼び出されたルーチンは、()内の数字が $error に代入される。 $error = $_[0]; if ($error eq "1") { $error_msg = 'ご依頼主のお名前が正しく入力されていません。'; } elsif ($error eq "2") { $error_msg = 'ご依頼主のご住所が正しく入力されていません。'; } elsif ($error eq "3") { $error_msg = 'ご依頼主の電話番号又はメールアドレスどちらかはご入力下さい。'; } elsif ($error eq "4") { $error_msg = 'ご依頼主のメールアドレスが正しく入力されていません。'; } elsif ($error eq "5") { $error_msg = 'ご依頼主の電話番号が正しく入力されていません。'; } print "Content-type: text/html\n\n"; print 'メールの練習入力エラー' . "\n"; print '' . "\n"; print '

メールの練習入力で下記のエラーが発生しました

' . "\n"; print "$error_msg\n"; print '
'; # リロードでもどると入力データが消えてしまうので print 'ブラウザ画面の戻るをクリックする'."\n";; # テストのみ if ($test eq "on") { print '
'; print '入力の確認表示

' . "\n"; print '
'; print 'action: '.$in{'action'}.''."\n"; print '
'; print 'name: '.$in{'name'}.''."\n"; print '
'; print 'email: '.$in{'email'}.''."\n"; print '
'; print 'biko: '.$in{'comment'}.''."\n"; print '
'; } # end of test print '

' . "\n"; exit; } ############################################# # # # メール送信ルーチン           # # # ############################################# sub sendmail { # 注文商品数 $renban=$in{'renban'}; open(MAIL,"|$sendmail $myaddress"); $message = <\n"; print "\n"; print "order2.cgi \n"; print "\n"; print ''."\n"; print '送信を完了しました。ありがとうございました'."\n"; print '

' . "\n"; print '' . "\n"; print ''."\n"; print "
\n"; print "\n"; print "\n"; } # end of sendmail ###################### # sendmailルーチン # ###################### sub sendmsg { # メール送信はJISと決められている $msg=$msg."\n"; # 改行させる &jcode'convert(*msg,'jis'); print MAIL $msg; } # end of sendmsg