バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 商品データーの編集(サブ画像の変更)を行うとエラーログにエラーが出る。

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ZETA1
投稿日時: 2013/9/24 17:22
対応状況: −−−
半人前
登録日: 2013/2/1
居住地:
投稿: 15
商品データーの編集(サブ画像の変更)を行うとエラーログにエラーが出る。
------------------------------------------------------
[EC-CUBE] 2.12.6
[OS] CentOS Linux 5.9
[PHP] PHP 5.3.3
[データベース] PostgreSQL 9.2.4
[WEBサーバ] Apache バージョン 2.2.3
[ブラウザ] Internet Explorer 8
[現象] 商品データーの編集(サブ画像の変更)を行うとエラーログにエラーが出る。
------------------------------------------------------

商品データーの編集(サブ画像の変更)を行うとエラーログにエラーが出ます。
LC_Page_Admin_Products_Product.php(803)は同名画像ファイル登録の有無を確認する辺りなのですが・・・

判られる方、お手数ですが、ご教示頂けませんでしょうか?

エラーログ

/admin/products/product.php

Warning(E_WARNING): Invalid argument supplied for foreach() on [/var/www/******/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php(803)] from ***.*.**.***
login_id = *********(0)[*******************]
/var/www/******/public_html/admin/products/product.php(34): LC_Page_Admin_Products_Product_Ex->process
/var/www/******/data/class_extends/page_extends/admin/products/LC_Page_Admin_Products_Product_Ex.php(56): LC_Page_Admin_Products_Product->process
/var/www/******/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php(68): LC_Page_Admin_Products_Product->action
/var/www/******/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php(162): LC_Page_Admin_Products_Product->lfRegistProduct
/var/www/******/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php(1073): LC_Page_Admin_Products_Product->lfHasSameProductImage
/var/www/******/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php(803): SC_Helper_HandleError::handle_warning
namahage
投稿日時: 2013/9/25 11:49
対応状況: −−−
長老
登録日: 2013/2/28
居住地: 大阪
投稿: 198
Re: 商品データーの編集(サブ画像の変更)を行うとエラーログにエラーが出る。
ども

エラーが発生している箇所のソースをみてみないと何もわかりませんが、
Invalid argument supplied for foreach()
というエラーメッセージから、
803行目に、foreach構文があると思います。

foreach( $array as $value){ //803行目ね
    hogehoge
}

見たいになってるんだと思いますが、この時
$arrayが配列のデータではない場合に発生するエラーです。
$arrayに何もはいってない場合(null)でも発生すると思います。

foreachの前に、配列データであるか?という判定をいれて、
配列の場合のみにforeach構文を実行させれば解決します。

//配列ですか?
if (is_array($array)) {
  //配列です。
    //配列の時だけ実行する
    foreach( $array as $value){
        hogehoge
    }
}



すべて憶測ですw
的外れだよって場合は、差し支えなければそこのソース貼ってください〜!
ZETA1
投稿日時: 2013/9/27 8:00
対応状況: −−−
半人前
登録日: 2013/2/1
居住地:
投稿: 15
Re: 商品データーの編集(サブ画像の変更)を行うとエラーログにエラーが出る。
namahage 様

いつもお世話になります。ご返答有難う御座います。

該当部分のソースは

/**
* 同名画像ファイル登録の有無を確認する.
*
* 画像ファイルの削除可否判定用。
* 同名ファイルの登録がある場合には画像ファイルの削除を行わない。
* 戻り値: 同名ファイル有り(true) 同名ファイル無し(false)
*
* @param string $product_id 商品ID
* @param string $arrImageKey 対象としない画像カラム名
* @param string $image_file_name 画像ファイル名
* @return boolean
*/

function lfHasSameProductImage($product_id, $arrImageKey, $image_file_name) {
if (!SC_Utils_Ex::sfIsInt($product_id)) return false;
if (!$arrImageKey) return false;
if (!$image_file_name) return false;

$arrWhere = array();
$sqlval = array('0', $product_id);
foreach ($arrImageKey as $image_key) {
$arrWhere[] = "{$image_key} = ?";
$sqlval[] = $image_file_name;
}
$where = implode(' OR ', $arrWhere);
$where = "del_flg = ? AND ((product_id <> ? AND ({$where}))";

$arrKeyName = $this->objUpFile->keyname;

foreach ($arrKeyName as $key => $keyname) {
if (in_array($keyname, $arrImageKey)) continue;
$where .= " OR {$keyname} = ?";
$sqlval[] = $image_file_name;
}

$where .= ')';

$objQuery =& SC_Query_Ex::getSingletonInstance();
$exists = $objQuery->exists('dtb_products', $where, $sqlval);
return $exists;
}

です。

$arrKeyNameが配列で無い場合が有る為、エラーが起こって
いるのだとご指導のおかげで判ったのですが、ここの場合

if (is_array($arrKeyName)) {//$arrKeyName が配列だった場合

foreach ($arrKeyName as $key => $keyname) {
if (in_array($keyname, $arrImageKey)) continue;
$where .= " OR {$keyname} = ?";
$sqlval[] = $image_file_name;
}

}

で良いのでしょうか?配列で無かった場合の処理も
必要なのでしょうか?
if(is_array($arrKeyName)){
処理
}else{
処理
}





namahage
投稿日時: 2013/9/27 10:35
対応状況: −−−
長老
登録日: 2013/2/28
居住地: 大阪
投稿: 198
Re: 商品データーの編集(サブ画像の変更)を行うとエラーログにエラーが出る。
時と場合によりますが、この場合elseでの処理は必要ないと思いますよ〜!

といいますより、この場合、is_arrayとかするより
foreach ((array)$arrKeyName as $key => $keyname) {
と明示的に$arrKeyNameをarrayにキャストしてやる事でエラーがでなくなると思います。
ZETA1
投稿日時: 2013/9/27 19:14
対応状況: 解決済
半人前
登録日: 2013/2/1
居住地:
投稿: 15
Re: 商品データーの編集(サブ画像の変更)を行うとエラーログにエラーが出る。
namahage様

お蔭様でエラーが出なくなりました。

本当に有難う御座いました。


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


 



ログイン


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

統計情報

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

投稿数ランキング

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
1294
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.