2013年11月6日カテゴリー:未分類

EC-CUBE:商品を多数購入すると送料が0円になってしまう不具合

(1)データベース
MySQLにインストールした場合に起こります。

(2)EC-CUBEのバージョン
2013年11月現在、2.13.0までのすべてのバージョンで起こります。

(3)現象
カゴの中に商品を入れていきます。
1つ入れたら、「ご入力内容のご確認」画面まで進んで送料を確認します。
正常に表示されていれば、一覧ページ等に戻って、カゴの中に別の商品を追加します。
そして、また、「ご入力内容のご確認」画面まで進んで送料を確認します。
面倒ですが、この作業を繰り返します。
商品データ量によりますが、10個、20個ぐらいになると、
「お支払方法・お届け時間等の指定」で「お届け時間の指定」のプルダウンメニューが突然表示されなくなり、その後、「ご入力内容のご確認」画面に進むと送料が0になっています。

この不具合が発生する注文データは、管理画面の受注管理>受注管理にも影響しています。
「編集」をクリックして表示される登録画面の、「お届け先情報」が表示されません。
新規追加ボタンも動作しません。
下記対象法で修正することにより改善されます。

(4)原因
カートに商品を入れると、データベースのdtb_sessionテーブルにその情報が入ります。
商品を次々にカートに入れていくと、dtb_sessionテーブルのsess_dataフィールドに情報が追加されフィールド内のテキストはどんどん増えていきます。
sess_dataの文字データ型は、「text」でインストールされます。「text」には文字数制限があります。情報がその制限数を超えると、上記の現象が起こるのではないかと考えられます。
PostgreSQLでは、文字データ型「text」に制限がないので、不具合が発生しないということになります。

(5)対処法
sess_dataの文字データ型を、「text」から「longtext」に変更します。
「longtext」に変更すると、文字制限数が大幅に増加します。
下図は、phpMyAdminを利用して変更する例です。

SQL命令文でデータ型を変更する場合は、データベース上で下記クエリを実行します。
***************
ALTER TABLE  dtb_session CHANGE  sess_data  sess_data LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
***************

(6)インストールの段階で、データ型を変更するには
■html/install/sql/create_table_mysql.sql を下記のように変更しておきます。

(7)修正後
「longtext」に変更しても、それまでのデータ内容は変わりません。
変更後からの登録データで不具合が解消されます。

この不具合は、本サイト(http://www.kaiplus.com/download/)のカスタマイズによるものではありません。EC-CUBEのデフォルト設定によります。