シェアする

  • このエントリーをはてなブックマークに追加

[EC-CUBE]CSV出力項目設定の高度な設定を修正

注意!

20081106追記

下記の修正方法は「LC_Page_Admin_Contents_CsvSql_Ex」の基底クラス「LC_Page_Admin_Contents_CsvSql」を直接編集してしまう、オススメできない方法です。[1]
最新の記事をHappyQuality ? CSV出力項目設定の高度な設定の修正にアップしたのでこちらを参照してください。

概要

EC-CUBEの管理画面->コンテンツ管理->CSV出力項目設定->高度な設定
画面で、SQL一覧からクエリを選んでも下のテキストエリアにソースを吐かないので、おかしいと思い調査しました。

結果バグを見つけましたのでそいつを修正。

修正方法

対象ファイル
/data/class/pages/admin/contents/LC_Page_Admin_Contents_CsvSql.phpのfunction process

コメントの認証可否判定のすぐ下に以下のソースがあるのでコメントアウトすればOK

if (!isset($_POST['mode'])) $_POST['mode'] = "";
if (!isset($_POST['sql_id'])) $_POST['sql_id'] = "";
if (!isset($_GET['sql_id'])) $_GET['sql_id'] = "";
if (!isset($_POST['selectTable'])) $_POST['selectTable'] = "";

$_POSTがif文やswitchで参照されているので本当は別の変数に代入した上で上記と同等の処理をして、if文やswitchに渡せばいいと思うんだけど(というか普通そうするんじゃないの?)、面倒だからコメントアウトだけやった。

解説

まずはこれを見て欲しい。

// POSTされたデータをセットする
if (count($_POST) > 0) {
$arrSqlData[0]['sql_name'] = isset($_POST['sql_name']) ? $_POST['sql_name'] : "";
$arrSqlData[0]['csv_sql'] = isset($_POST['csv_sql']) ? $_POST['csv_sql'] : "";
}
$this->arrSqlData = $arrSqlData[0];	// 選択されているSQLデータ

これを見る限りPOSTがあったら$arrSqlData[0][なにがし]のそれぞれの配列に$_POST[なにがし]を入れたかったんだろうけど、お前さん最初に$_POSTに空文字代入してるからPOST無くても入っちゃうよと。count($_POST)は3になるから。

if (!isset($_POST['mode'])) $_POST['mode'] = "";
if (!isset($_POST['sql_id'])) $_POST['sql_id'] = "";
if (!isset($_POST['selectTable'])) $_POST['selectTable'] = "";

この分ね。

このことによってPOSTがなくて$sql_idが指定された場合でも
$arrSqlData[0][‘sql_name’]
$arrSqlData[0][‘csv_sql’]
を上書きしちゃうから、

// 編集用SQLデータの取得
if ($sql_id != "") {
$arrSqlData = $this->lfGetSqlList(" WHERE sql_id = ?", array($sql_id));
}

ここでわざわざDBからとってきた$arrSqlDataが意味ねーよってことになっちゃうんだね。
以上、おしまい。

  1. 無知ゆえの過ちでした…^^; []

シェアする

  • このエントリーをはてなブックマークに追加

フォローする