バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > 管理機能 > [Ver.2.1.2]配送業者登録を更新すると配送時間のIDが変わる

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
mkimura
投稿日時: 2008/6/10 11:20
対応状況: 解決済
新米
登録日: 2008/5/16
居住地:
投稿: 4
[Ver.2.1.2]配送業者登録を更新すると配送時間のIDが変わる
ver.1.3.4 でポストされていた問題ですが、ver.2.1.2 でも同様の問題があります。

--------
[Ver.1.3.4]配送業者登録を更新すると配送時間のIDが変わる
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=thread&topic_id=1107&forum=9&post_id=3542#forumpost3542
--------

更新のたびにPKが変わってしまうというのは、単に設計ミスでしょう。プライオリティは低そうですが、直すべき不具合だとは思います。

『とりあえずの解決策』として手を入れた部分を載せておきます。(実装としては美しくありませんが・・)

■ファイル
data/class/pages/admin/basis/LC_Page_Admin_Basis_Delivery_Input.php
■変更箇所
135〜181行目付近『lfRegistData()』を丸ごと下記と置き換え。


    function lfRegistData() {
        $arrRet = $this->objFormParam->getHashArray();
        $objQuery = new SC_Query();
        $objQuery->begin();

        // 入力データを渡す。
        $sqlval['name'] = $arrRet['name'];
        $sqlval['service_name'] = $arrRet['service_name'];
        $sqlval['confirm_url'] = $arrRet['confirm_url'];
        $sqlval['creator_id'] = $_SESSION['member_id'];
        $sqlval['update_date'] = 'Now()';


        // deliv_id が決まっていた場合
        if($_POST['deliv_id'] != "") {
            $deliv_id = $_POST['deliv_id'];
            $where = "deliv_id = ?";
            $objQuery->update("dtb_deliv", $sqlval, $where, array($deliv_id));

            // 配送時間の登録
            $table = "dtb_delivtime";
            $where = "deliv_id = ? AND time_id = ?";
            for($cnt = 1; $cnt <= DELIVTIME_MAX; $cnt++) {
                $sqlval = array();
                $keyname = "deliv_time".$cnt;
                $arrval = array($deliv_id, ($cnt * $deliv_id));
                // 既存データの有無を確認
                $curData = $objQuery->select("*", $table, $where, $arrval);

                if(strcmp($arrRet[$keyname], "") != 0) {
                    $sqlval['deliv_time'] = $arrRet[$keyname];

                    // 入力が空ではなく、DBに情報があれば更新
                    if(count($curData)) {
                        $objQuery->update($table, $sqlval, $where, $arrval);
                    }
                    // DBに情報がなければ登録
                    else {
                        $sqlval['deliv_id'] = $deliv_id;
                        $sqlval['time_id'] = ($cnt * $deliv_id);
                        $objQuery->insert($table, $sqlval);
                    }
                }
                // 入力が空で、DBに情報がある場合は削除
                else if(count($curData)) {
                    $objQuery->delete($table, $where, $arrval);
                }
            }

            // 配送料の登録
            if(INPUT_DELIV_FEE) {
                for($cnt = 1; $cnt <= DELIVFEE_MAX; $cnt++) {
                    $keyname = "fee".$cnt;
                    if(strcmp($arrRet[$keyname], "") != 0) {
                        $sqlval = array('fee' => $arrRet[$keyname]);
                        $objQuery->update("dtb_delivfee", $sqlval, "deliv_id = ? AND pref = ?", array($deliv_id, $cnt));
                    }
                }
            }
        }
        else {
            // 登録する配送業者IDの取得

            if (DB_TYPE == "pgsql") {
                $deliv_id = $objQuery->nextval('dtb_deliv', 'deliv_id');
                $sqlval['deliv_id'] = $deliv_id;
            }

            $sqlval['rank'] = $objQuery->max("dtb_deliv", "rank") + 1;
            $sqlval['create_date'] = 'Now()';
            // INSERTの実行
            $objQuery->insert("dtb_deliv", $sqlval);

            if (DB_TYPE == "mysql") {
                $deliv_id = $objQuery->nextval('dtb_deliv', 'deliv_id');
            }

            $sqlval = array();
            // 配送時間の設定
            for($cnt = 1; $cnt <= DELIVTIME_MAX; $cnt++) {
                $keyname = "deliv_time$cnt";
                if($arrRet[$keyname] != "") {
                    $sqlval['deliv_id'] = $deliv_id;
                    $sqlval['time_id'] = ($cnt * $deliv_id);
                    $sqlval['deliv_time'] = $arrRet[$keyname];
                    // INSERTの実行
                    $objQuery->insert("dtb_delivtime", $sqlval);
                }
            }

            if(INPUT_DELIV_FEE) {
                $sqlval = array();
                // 配送料金の設定
                for($cnt = 1; $cnt <= DELIVFEE_MAX; $cnt++) {
                    $keyname = "fee$cnt";
                    if($arrRet[$keyname] != "") {
                        $sqlval['deliv_id'] = $deliv_id;
                        $sqlval['fee'] = $arrRet[$keyname];
                        $sqlval['pref'] = $cnt;
                        // INSERTの実行
                        $objQuery->insert("dtb_delivfee", $sqlval);
                    }
                }
            }
        }
        $objQuery->commit();
        return $deliv_id;
    }
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
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.