カレッヂ |
質問者 キクちゃん
投稿日 3/30(日) 18:20:15
ショッピングバスケットV6:確認画面で明細が存在するのにが無いとなってしまう。 ショッピングバスケットV6の導入テストと、改造を行っている物です。 未改造で導入出来ましたので、現在ローカルでAn http + active perl を インストールして、改造を行っております。 テスト中に、削除後何度もリロード繰り返したりしてから、メールアドレスを 入力して確認画面に移動すると、明細が存在するにも関われず、 現在、保留中のご注文はありません。 となってしまいます。 sub mado { s/\n//g; if (/^#|^$/) { next; } if (/^\*(\d+)/ && !$DELETED{$1}) { $DELETED{$1} = 1; $del ++; } elsif (/^\*(\d+)/) { ; } else { push(@CARGO,$_); } sub cfm { while (<ORDER>) { s/\n//g; if (/^#|^$/) { next; } if (/^\*(\d+)/) { $DELETED{$1} = 1; $del ++; } else { push(@CARGO,$_); } と、削除されたデータのカウントルーチンに差が有りますが、何か意味があるのですか? sub cfm の判定部分を、sub mado 同じにしたところ、一応動いているようなのです。 CGI(Perl)をはじめて3日ですので、詳しい事がわかりません。VBならば・・・。 この修正は、問題あるのでしょうか? 以下は、そのときの、作業ファイルです。 (商品CD 単価 数量 項目を追加していますので、 標準の形式では有りませんが・・・。) # Shopping Bascket Pro v6 CART File # http://www.rescue.ne.jp/cgi/cargo6/ # This is a generated file! Do not edit. 030330172740 727 商品A 294 1 294 *030330172740 030330172749 727 商品A 294 1 294 030330172957 727 商品A 294 1 294 030330173016 727 商品A 294 1 294 *030330173016 *030330172957 *030330172957 *030330172957 *030330172957 030330173114 788 商品B 316 1 316 030330173120 789 商品C 809 5 4045 030330173222 789 商品C 809 5 4045 030330173306 789 商品C 809 5 4045 *030330173222 *030330173306 030330173605 841 商品D 1790 1 1790 *030330173605 *030330172749 030330173745 727 商品A 294 1 294
プロバイダ参照:http://localhost/ |
回答者 呑兵衛@大阪
[削除]
投稿日 4/1(火) 20:15:23
setup.cgi の $domain $path を外部サーバー用に設定されていませんか? 手元でのテストではサーバーはローカルですから 192.168.***.*** などに しなければなりません。 |
質問者 キクちゃん
[削除]
投稿日 4/2(水) 09:56:40
呑兵衛@大阪 様、回答ありがとうございます。 早速設定してみましたが、別の原因の様で かごの中身は3明細表示されるのに、 メールアドレスを入力し次に進と、 「現在、保留中のご注文はありません。」でした。 自分でもリファレンス片手にがんばって調べています。 sub mado { の方では、先頭が*で始まる行で、かつ $DELETED{} のフラグが立っていない 物のみをカウントしているのに、 sub cfm { の方では、先頭が*で始まる行をすべてカウントしている様で 差が生じているような気がします。 (データ上、同一の商品を削除しているデータが複数存在して、有効なデータ件数と、 削除マークのついたデータ件数が同じになると発生する気がします。) 正規表現とかが難しくて理解しきれていないので、間違っているかもしれません・・・。 |
質問者 キクちゃん
[削除]
投稿日 4/2(水) 10:06:45
たびたびすみません。 設置ミスかと思って公式ページのサンプルで試してみました。 http://www.rescue.ne.jp/cgi/cargo6/sample/ に有るサンプルで、 1 例1)の商品を 1個かごに入れる。 2 例1)の商品を 1個かごに入れる。 3 バスケットの画面で1個削除する 4 バスケットの画面をリロードする 5 次へ で、注文処理を進める をすると、同様の状態になるので、setup.cgiの問題では無いかもしれません。 |
回答者 呑兵衛@大阪
[削除]
投稿日 4/2(水) 18:19:25
これは cookie に関連しています。 $nossl = 'http://path/to/cgi/file'; $ssl = 'http://path/to/cgi/file'; $domain = ""; $path = "/"; 以上4項目がローカル上の設定になっているか確認ください。 |
質問者 キクちゃん
[削除]
投稿日 4/4(金) 09:05:37
毎回無くなる訳ではいので、クッキーは疑っていませんでした。 削除後のリロードを行わない場合は、最後までちゃんと動作します。 setup.cgi の設定は、最初は、 $nossl = 'http://localhost/cgi-bin/cart.cgi'; $ssl = 'http://localhost/cgi-bin/cart.cgi'; $domain = ""; $path = "/"; でした。 前回の回答で $nossl = 'http://localhost/cgi-bin/cart.cgi'; $ssl = 'http://localhost/cgi-bin/cart.cgi'; $domain = "localhost"; $path = "/"; に変えてみましたが、同じ症状が出ます。 |
回答者 呑兵衛@大阪
[削除]
投稿日 4/4(金) 10:16:13
商品.html の子ウィンドを作る JavaScript を変えていませんか? function Cart(){ window.open("","Cart","location=no,status=yes,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,width=550,height=450"); } の toolbar=no を toolbar=yes にして子ウィンド上でリロードボタンを操作していませんか? 作業ファイルは追加書き込みになっているので、削除できる商品がなくなっていれば削除できないはずで、 削除記録ができるはずはありません。 5行続く削除記録までで、4つしか購入していないのに削除は6つ記録されている。 |
質問者 キクちゃん
[削除]
投稿日 4/4(金) 12:36:12
JavaScriptは、変更しておりませんが、リロード操作は行っております。 ブラウザーに タブ形式の opera を使用してみると ふつうにリロードが出来ます。 また、IEなどでも、F5キーなのでリロードはかけられるので、 複数の削除記録を作ることが出来ました。 (未改造のcart.cgi + IE 5.5 sp2)で作業ファイルをのぞいて確認。 (http://www.rescue.ne.jp/cgi/cargo6/sample/ のサンプル + IE5.5 F5のリロードで カート内には明細が有るのに、確認画面では「現在、保留中のご注文はありません。」 となりました。(作業ファイルは覗けないので、実際に複数の削除記録が有るのかは不明) |
回答者 呑兵衛@大阪
[削除]
投稿日 4/4(金) 14:10:07
プログラムはリロード対策していなかったですねぇ。では対応しましょう。 りろーど対策 その1 sub mado 以下を追加 <meta http-equiv="Refresh" content="0"> sub delete 以下に変更 if (!-e $tmp) { &error("設定エラー","作業用ファイルを展開するフォルダが見つかりません。"); } if ($COOKIE{'CART'} eq '') { &mado; } if (open(ORDER,"$tmp$COOKIE{'CART'}\.bk6")) { while (<ORDER>) { s/\n//g; if (/^#|^$/) { next; } if (/^$delete_gcode/) { $i++; } elsif (/^*$delete_gcode/) { $d++; } } close(ORDER); } if ($i > $d) { if (!open(FILE,">> $tmp$COOKIE{'CART'}\.bk6")) { &error("!設定エラー","作業用ファイルを展開するフォルダのパーミッションが正しく設定されていません."); } print FILE "\*$delete_gcode\n"; close(FILE); } &mado; 商品の取消しはこれでいいですが、商品が追加されるリロードはサーバー間のアクセス時間に 影響があるので、もう少し工夫が必要です。が、まぁこのあたりで。 |
質問者 キクちゃん
[削除]
投稿日 4/5(土) 08:49:49
解決出来ました。 ありがとうございました。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |