バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > 管理機能 > ADMIN_MODE =1で顧客情報を一括削除するとエラー&商品情報が削除される

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
illfrog300
投稿日時: 2009/10/11 21:49
対応状況: −−−
一人前
登録日: 2009/5/4
居住地:
投稿: 106
ADMIN_MODE =1で顧客情報を一括削除するとエラー&商品情報が削除される
ADMIN_MODE =1に設定し、顧客管理>顧客マスタから全検索をかけ
一括削除しようとしたところ、何も削除されず、かわりに
当方の環境では、登録商品がすべて削除される不具合を発見しました。当方の環境のみの症状なのかがわからず書き込みさせて頂きましたが皆様の環境では正常に処理されますでしょうか?

EC-CUBE 2.4.0
DBサーバ PostgreSQL 7.4.19
PHP 5.2.9
ramrun
投稿日時: 2009/10/12 0:28
対応状況: −−−
仙人
登録日: 2006/11/3
居住地:
投稿: 789
Re: ADMIN_MODE =1で顧客情報を一括削除するとエラー&商品情報が削除される
詳細まではみていませんが、こちらの環境でも同じ結果になりました。
テストで入れてたので顧客は無しの状態で、検索して「検索結果をすべて削除」をクリックでdtb_productsのdel_flgが立つようです。
エラー?は特に無かったような...
一応update文で戻せるところまで確認しました。

2.4.0-comu-r18187
PHP 5.2.9
MySQL 5.0.77-log
illfrog300
投稿日時: 2009/10/12 2:51
対応状況: −−−
一人前
登録日: 2009/5/4
居住地:
投稿: 106
Re: ADMIN_MODE =1で顧客情報を一括削除するとエラー&商品情報が削除される
ご確認感謝致します。
書き方が誤認しやすい文章でした。。

当方の環境でもエラー表示自体は発生していません。

症状としては

顧客マスタで検索>削除>何も起こらず

商品情報にdtb_productsのdel_flgが立つ

という同様の状態を確認しております。

自分の技術では修正できない範疇なのでご報告どまりで
申し訳ございません;

ramrun
投稿日時: 2009/10/12 11:02
対応状況: −−−
仙人
登録日: 2006/11/3
居住地:
投稿: 789
Re: ADMIN_MODE =1で顧客情報を一括削除するとエラー&商品情報が削除される
個人的にそろそろ、こちらに顔を出すのを止めようかと思っているので、追いかけ方を書いておこうと思います。
illfrog300さんの参考になれば幸いです。



まず、顧客管理で検索して「検索結果をすべて削除」をクリックするとどうなるのかを追いかけます。

「検索結果をすべて削除」が表示されているときのURLが
 http://yourdomain/eccube/html/admin/customer/index.php

だとして、ブラウザからHTMLのソースをみるとボタンの部分が
<input type="button" name="subm" value="検索結果をすべて削除" onclick="fnModeSubmit('delete_all','','');" />

となっているのが確認できます。

JavaScriptのfnModeSubmit()が呼ばれているのですが、これは同じHTMLソースの上の方で読み込まれているsite.jsにあります。
<script type="text/javascript" src="/eccube/html/user_data/packages/default/js/site.js"></script>

いくつかあるJavaScriptファイルの中身は、どんな関数があるのか確認する必要がありますね(汗)。

で、
 /eccube/html/user_data/packages/default/js/site.js
を覗いてみると、   ※一部省略してます
// モードとキーを指定してSUBMITを行う。
function fnModeSubmit(mode, keyname, keyid) {
	switch(mode) {

	case 'delete_all':
		if(!window.confirm('検索結果をすべて削除しても宜しいですか')){
			return;
		}
		break;

	}

	document.form1['mode'].value = mode;

	document.form1.submit();
}

form1のmodeを上書きしている部分があります。
具体的にはmodeをdelete_allしており、その後submit()すると。

form1はHTMLソースの↓の部分で、
<form name="form_search" id="form_search" method="post" action="/eccube/html/admin/customer/index.php">
<input type="hidden" name="mode" value="search">

mode searchをmode delete_allにして
 /eccube/html/admin/customer/index.php
に送信(submit)しています。

送信先の
 /eccube/html/admin/customer/index.php
は、LC_Page_Admin_Customer_Ex.phpを呼んで実行するところです。
require_once(CLASS_EX_PATH . "page_extends/admin/customer/LC_Page_Admin_Customer_Ex.php");
$objPage = new LC_Page_Admin_Customer_Ex();
$objPage->init();
$objPage->process();

呼ばれた
 /eccube/data/class_extends/page_extends/admin/customer/LC_Page_Admin_Customer_Ex.php
は拡張しやすいように用意されたファイルなので、何もいじっていなければそのままLC_Page_Admin_Customerを呼んでいます。
require_once(CLASS_PATH . "pages/admin/customer/LC_Page_Admin_Customer.php");
class LC_Page_Admin_Customer_Ex extends LC_Page_Admin_Customer {

で、更に呼ばれた
 /eccube/data/class/pages/admin/customer/LC_Page_Admin_Customer.php
が本命なのですが、慣れてくれば直接こちらのファイルを参照できる(見当がつく)ようになると思います。

その中でmode delete_allを検索すると↓の部分がでてきます。
switch($_POST['mode']) {

    case 'delete_all':
        // 検索結果をすべて削除
        $where = "product_id IN (SELECT product_id FROM vw_products_nonclass AS noncls WHERE $where)";
        $sqlval['del_flg'] = 1;
        $objQuery->update("dtb_products", $sqlval, $where, $arrval);

        $sql = "SELECT status,email FROM dtb_customer WHERE customer_id = ? AND del_flg = 0";
        $result_customer = $objQuery->conn->getAll($sql, array($_POST["del_customer_id"]));

        if ($result_customer[0]["status"] == 2) {           //本会員削除
            $arrDel = array("del_flg" => 1, "update_date" => "NOW()");
            $objQuery->conn->autoExecute("dtb_customer", $arrDel, "customer_id = " . SC_Utils_Ex::sfQuoteSmart($_POST["del_customer_id"]) );
        } elseif ($result_customer[0]["status"] == 1) {     //仮会員削除
            $sql = "DELETE FROM dtb_customer WHERE customer_id = ?";
            $objQuery->conn->query($sql, array($_POST["del_customer_id"]));
        }

        break;

dtb_productsをupdateしている部分が1つ目。
顧客を全削除しようとしているのにdel_customer_idを必要としている部分が2つ目ですね。

このあたりを直せれば... ということで、
自分で直せるようになりたいという人の足しになればと思います。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は68,835名です
総投稿数は99,701件です

投稿数ランキング

1
seasoft
7333
2
468
2828
3
AMUAMU
2712
4
nanasess
2123
5
umebius
1859
6
yuh
1612
7
red
1430
8
h_tanaka
1065
9
fukap
907
10
tsuji
867
11
shutta
835
12
tao_s
793
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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