バージョン選択

フォーラム

メニュー

オンライン状況

71 人のユーザが現在オンラインです。 (61 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 71
もっと...

サイト内検索

質問 > フロント機能 > 商品を購入後にカート内の商品情報が削除されないです。

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
nouzo
投稿日時: 2022/2/19 6:40
対応状況: −−−
新米
登録日: 2016/7/17
居住地:
投稿: 5
商品を購入後にカート内の商品情報が削除されないです。
商品を購入後、ログインしたまま再度商品のカートに移動した際に、以下の一連のファイル、及びそのファンクションにより前回の操作により発生したカート内にある複数の商品情報が削除されると考えていたのですが、全く削除されません。どうかアドバイス等を頂けませんでしょうか?

LC_Page_Shopping_Confirm.php //completeOrder
SC_Helper_Purchase.php //completeOrder->cleanupSession->delAllProducts
SC_CartSession.php //delAllProducts

eccube 2.17
php7.4.3
mysql8.0


補足:
以下のファイルにその下にある記述を追加して初めてログアウト、再度ログイン後にカート内の複数の商品情報が削除される様になりましたが、上記の問題は未解決です。

LC_Page_FrontParts_LoginCheck.php


追加記述箇所

case 'logout':

//追加
$objCartSess = new SC_CartSession();
//$cartkey = $objCartSess->getKey();
$cartkey = 1;
$objCartSess->delAllProducts($cartkey);

$objSiteSess = new SC_SiteSession();
$objSiteSess->unsetUniqId();
//追加

$objCustomer->EndSession();
468
投稿日時: 2022/2/20 11:14
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 商品を購入後にカート内の商品情報が削除されないです。
SC_CartSession.php function delAllProducts()の中でデバッグしてみるのが良いのではないでしょうか?
まずは処理が正常に通過しているかどうかを判断する必要がある気がします。

念の為の確認ですが、カートの中のページの商品削除は正常に動作しますか?
同じようなロジックでセッション内のデータをunsetしていると思いますので
そちらが正常に動作しないようであればセッションの挙動がおかしくなっているのではないかと思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

nouzo
投稿日時: 2022/2/21 14:26
対応状況: −−−
新米
登録日: 2016/7/17
居住地:
投稿: 5
Re: 商品を購入後にカート内の商品情報が削除されないです。
468様、

お時間頂き、かつ的確なご助言大変感謝致します。

まず、カートページ(xxx/cart/)での手動による商品削除は正常に動作しております。

また、以下の様な設定によりにLC_Page_Cart.phpからSC_CartSession.phpのdelAllProductsを指定し、カートページ内から削除リンクをクリックすることにより全商品が削除されます。

case 'delete'://カートから削除
//$objCartSess->delProduct($cart_no, $cartKey);
$cartkey = 1;
$objCartSess->delAllProducts($cartkey);


そして、SC_CartSession.php/delAllProducts_xと変更して商品購入を試すと以下の様なエラーが発生しますので(変更なしではエラーはでないですし、SC_Helper_Purchase.phpとSC_CartSession.phpの両方をdelAllProducts_xとするとエラーはでません。)、商品購入の際、SC_CartSession.phpのdelAllProductsまで処理が通過していると思われます。

Fatal error(E_ERROR): Uncaught Error: Call to undefined method SC_CartSession::delAllProducts() in /var/www/html/data/class/helper/SC_Helper_Purchase.php:2259

そのSC_CartSession.php/delAllProducts、およびgetMax関数は当然デフォルトの状態であり、かつ上述の様にログアウト、およびSC_CartSession.phpのcase 'delete'からdelAllProductsへの処理ではカート内商品を削除します。

よって、LC_Page_Shopping_Confirm.php/SC_Helper_Purchase.phpからSC_CartSession.php/delAllProductsへ処理が通過される際に、LC_Page_Cart.phpからSC_CartSession.php/delAllProductsへの処理、あるいはログアウト経由の処理とは異なる何かがSC_CartSession.php内で発生している様に思われます。前者の場合、SC_CartSession.php内でdelAllProductsを動作させようとする同時に、それを動作させない何かが発生している様に思われますが(セッションの動作不全?)、どうしても分かりません。

$cartkey = 1;に問題があるのか、phpのバージョンが何か影響しているのか、あるいはunsetを動作させない何かがあるのか等分かりません。

現在、あれこれと試しておりますが、何かお気づきの点はございますでしょうか?


とりあえず、phpのバージョンと以下の設定を記載しておきます。

PHP Version 7.4.3

public function delAllProducts($productTypeId)
{
$max = $this->getMax($productTypeId);
for ($i = 0; $i <= $max; $i++) {
unset($this->cartSession[$productTypeId][$i]);
}
}

public function getMax($productTypeId)
{
$max = 0;
if (is_array($this->cartSession[$productTypeId])
&& count($this->cartSession[$productTypeId]) > 0) {
foreach ($this->cartSession[$productTypeId] as $key => $value) {
if (is_numeric($key)) {
if ($max < $key) {
$max = $key;
}
}
}
}

return $max;
}
nanasess
投稿日時: 2022/2/22 17:26
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: 商品を購入後にカート内の商品情報が削除されないです。
ちょっとはずしているかもしれませんが、以下のような処理でカートがロールバックしてしまっているということはありませんでしょうか?


https://github.com/EC-CUBE/ec-cube2/blob/4b761076a6caee948b2bf384e6466db4e0bf69af/data/class/pages/cart/LC_Page_Cart.php#L83-L85
nouzo
投稿日時: 2022/2/22 23:29
対応状況: −−−
新米
登録日: 2016/7/17
居住地:
投稿: 5
Re: 商品を購入後にカート内の商品情報が削除されないです。
nanasess様、

ご教授頂きまして感謝いたします。

ご指摘の通り、ロールバックに関連した問題の様でございます。

>以下のような処理でカートがロールバックしてしまっているということはありませんでしょうか?

上記は本来であればロールバックは終了すべきものであるが、それが何らかの問題により終了していないが為に、商品購入後にカート内の商品情報が削除されないということでしょうか?

ロールバックはデフォルトでtrueですので、当方システム側の設定に問題があるがため、終了すべきロールバックが終了しないための問題ということでしょうか?

試しにロールバックをfalseにすると、商品購入後カート内商品は削除されておりますが、実際はどうあるべきなのでしょうか?
nanasess
投稿日時: 2022/2/23 2:41
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: 商品を購入後にカート内の商品情報が削除されないです。
このロールバックの仕組みは、クレジットカードなどの決済する際、決済が完了せずに離脱した場合にカートを復元するものです。

詳しくデータベースのデータを見てみないと何ともいえませんが、注文が完了していないと判断されてしまっていると思われます。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,856名です
総投稿数は109,989件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1291
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.