![]() |
| カレッヂ |
質問者 キクちゃん
投稿日 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裏技 |