バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > 管理機能 > 受注管理画面で商品の変更を行っても、規格情報がうまく反映されない

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
taji
投稿日時: 2011/7/1 23:12
対応状況: −−−
半人前
登録日: 2011/5/30
居住地:
投稿: 20
Re: 受注管理画面で商品の変更を行っても、規格情報がうまく反映されない
引用:
もしかして, PHP5.2.x では 2046行目の foreach に, 上記の配列が入らないんでしょうか?

foreachの直後に下記コードを埋め込み確認しました。
foreach ($val as $in) {
var_dump($val);
var_dump($in);

実行すると
array(1) {
[0]=>
string(0) ""
}
string(0) ""
となり、foreachに配列は入っているみたいです。

ただ、その次の処理
if (!SC_Utils::isBlank($in, $greedy)) {
の条件がtrueにならないので、$valに配列が入ったまま次の処理が実行されます。

どうもバージョンによって処理の結果が異なっているのは、
trimの振る舞いが異なっているのが原因のようです。

サンプルコード
test.php
<?php
$array[0] = "";
$val = trim($array);
var_dump($val);
?>

・結果
PHP 5.2.6で実行
#php test.php
string(5) "Array"

PHP 5.3.3で実行
#php test.php
PHP Warning: trim() expects parameter 1 to be string, array given in /var/www/default8085/data/class/test.php on line 3
NULL
MPV
投稿日時: 2011/7/1 23:38
対応状況: −−−
仙人
登録日: 2011/3/27
居住地:
投稿: 309
Re: 受注管理画面で商品の変更を行っても、規格情報がうまく反映されない
nanasess様

以下の確認を行いました。

PHP 5.2.17

 function isBlank($val, $greedy = true) {
  if (is_array($val)) {
   if ($greedy) {
    if (empty($val)) {
     return true;
    }

    var_dump($val); ← ここに入れました

    foreach ($val as $in) {
     /*
     * SC_Utils_Ex への再帰は無限ループやメモリリークの懸念
     * 自クラスへ再帰する.
     */

実行内容は以下の通りです。
1)アイス バニラ Lを受注した状態の受注データに対して
2)変更ボタンを押してお鍋を追加
3)アイス バニラ Lを削除
4)変更ボタンを押してアイス 抹茶 Mを追加

結果の表示

2)実行時
array(1) { [0]=> string(2) "29" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(2) "29" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(2) "10" } array(1) { [0]=> string(6) "ice-09" } array(1) { [0]=> string(21) "アイスクリーム" } array(1) { [0]=> string(9) "バニラ" } array(1) { [0]=> string(1) "L" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(3) "933" } array(1) { [0]=> array(13) { ["class_combination_id"]=> string(2) "53" ["classcategory_id"]=> string(1) "1" ["parent_class_combination_id"]=> NULL ["level"]=> string(1) "1" ["classcategory_name"]=> string(9) "バニラ" ["rank"]=> string(1) "1" ["class_name"]=> string(3) "味" ["class_id"]=> string(1) "1" ["product_id"]=> string(1) "1" ["class_id1"]=> string(1) "1" ["class_name1"]=> string(3) "味" ["classcategory_name1"]=> string(9) "バニラ" ["classcategory_id1"]=> string(1) "1" } } array(13) { ["class_combination_id"]=> string(2) "53" ["classcategory_id"]=> string(1) "1" ["parent_class_combination_id"]=> NULL ["level"]=> string(1) "1" ["classcategory_name"]=> string(9) "バニラ" ["rank"]=> string(1) "1" ["class_name"]=> string(3) "味" ["class_id"]=> string(1) "1" ["product_id"]=> string(1) "1" ["class_id1"]=> string(1) "1" ["class_name1"]=> string(3) "味" ["classcategory_name1"]=> string(9) "バニラ" ["classcategory_id1"]=> string(1) "1" }

3)実行時
array(2) { [0]=> string(1) "1" [1]=> string(1) "2" } array(2) { [0]=> string(2) "29" [1]=> string(2) "10" } array(2) { [0]=> string(1) "1" [1]=> string(1) "1" } array(2) { [0]=> string(2) "10" [1]=> string(2) "10" } array(2) { [0]=> string(6) "ice-09" [1]=> string(7) "nabe-01" } array(2) { [0]=> string(21) "アイスクリーム" [1]=> string(9) "おなべ" } array(2) { [0]=> string(9) "バニラ" [1]=> string(0) "" } array(2) { [0]=> string(1) "L" [1]=> string(0) "" } array(2) { [0]=> string(1) "1" [1]=> string(1) "1" } array(2) { [0]=> string(3) "933" [1]=> string(4) "1650" }

4)実行時
array(1) { [0]=> string(2) "10" } array(1) { [0]=> array(13) { ["class_combination_id"]=> string(2) "39" ["classcategory_id"]=> string(1) "3" ["parent_class_combination_id"]=> NULL ["level"]=> string(1) "1" ["classcategory_name"]=> string(6) "抹茶" ["rank"]=> string(1) "3" ["class_name"]=> string(3) "味" ["class_id"]=> string(1) "1" ["product_id"]=> string(1) "1" ["class_id1"]=> string(1) "1" ["class_name1"]=> string(3) "味" ["classcategory_name1"]=> string(6) "抹茶" ["classcategory_id1"]=> string(1) "3" } } array(13) { ["class_combination_id"]=> string(2) "39" ["classcategory_id"]=> string(1) "3" ["parent_class_combination_id"]=> NULL ["level"]=> string(1) "1" ["classcategory_name"]=> string(6) "抹茶" ["rank"]=> string(1) "3" ["class_name"]=> string(3) "味" ["class_id"]=> string(1) "1" ["product_id"]=> string(1) "1" ["class_id1"]=> string(1) "1" ["class_name1"]=> string(3) "味" ["classcategory_name1"]=> string(6) "抹茶" ["classcategory_id1"]=> string(1) "3" } array(1) { [0]=> string(1) "2" } array(1) { [0]=> string(2) "10" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(2) "10" } array(1) { [0]=> string(7) "nabe-01" } array(1) { [0]=> string(9) "おなべ" } array(1) { [0]=> string(0) "" } array(1) { [0]=> string(0) "" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(4) "1650" } array(1) { [0]=> array(13) { ["class_combination_id"]=> string(2) "39" ["classcategory_id"]=> string(1) "3" ["parent_class_combination_id"]=> NULL ["level"]=> string(1) "1" ["classcategory_name"]=> string(6) "抹茶" ["rank"]=> string(1) "3" ["class_name"]=> string(3) "味" ["class_id"]=> string(1) "1" ["product_id"]=> string(1) "1" ["class_id1"]=> string(1) "1" ["class_name1"]=> string(3) "味" ["classcategory_name1"]=> string(6) "抹茶" ["classcategory_id1"]=> string(1) "3" } } array(13) { ["class_combination_id"]=> string(2) "39" ["classcategory_id"]=> string(1) "3" ["parent_class_combination_id"]=> NULL ["level"]=> string(1) "1" ["classcategory_name"]=> string(6) "抹茶" ["rank"]=> string(1) "3" ["class_name"]=> string(3) "味" ["class_id"]=> string(1) "1" ["product_id"]=> string(1) "1" ["class_id1"]=> string(1) "1" ["class_name1"]=> string(3) "味" ["classcategory_name1"]=> string(6) "抹茶" ["classcategory_id1"]=> string(1) "3" }

というわけで、PHP 5.2.17では(当方の環境では)入っております。
事象が発生しました環境(PHP 5.3.5)は就業先なので明日確認しようと思います。

失礼いたしました。<(_ _)>
MPV
投稿日時: 2011/7/1 23:43
対応状況: −−−
仙人
登録日: 2011/3/27
居住地:
投稿: 309
Re: 受注管理画面で商品の変更を行っても、規格情報がうまく反映されない
すみません、今見たら、もうtaji様が回答済みでした。
しかも確認場所が違っているみたいで、お恥ずかしい限りです・・・。
nanasess
投稿日時: 2011/7/2 2:01
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: 受注管理画面で商品の変更を行っても、規格情報がうまく反映されない
taji 様, MPV 様

ありがとうございます.
ちょっとすぐ検証できる環境に無いのですが, 2055 行目から以下のようにしてみるといかがでしょうか?


} else {
    return true;
}


配列が is_array() をすりぬけてしまっているのが問題なので...

追記: ごめんなさい, これだとダメですね(汗)
nanasess
投稿日時: 2011/7/2 2:06
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: 受注管理画面で商品の変更を行っても、規格情報がうまく反映されない
配列にも対応した trim の wrapper を書いてやるのが一番良いかも
MPV
投稿日時: 2011/7/4 16:00
対応状況: −−−
仙人
登録日: 2011/3/27
居住地:
投稿: 309
Re: 受注管理画面で商品の変更を行っても、規格情報がうまく反映されない
nanasess様

お世話になります。

引用:
配列にも対応した trim の wrapper を書いてやるのが一番良いかも


というご回答でしたので、的外れかもしれませんが
確認してみました。

trimを行うfunction(trim_val)を追加して、
SC_Utils.phpのisBlank関数内にあります

  $val = trim($val);

のところで、

  array_walk($val, "trim_val");

で配列にも対応できるのではないかと思ったのですが
ダメでした・・・。

あと、$valがArrayの場合、

if (strlen($val) > 0)

は、よろしくないというのを別のHPで見かけたので、

if (!empty($val))

にしてみたりしたのですが、うまくいきませんでした・・・。

お忙しいところ大変恐縮ですが、再度ご教授頂ければ幸いです。
どうぞよろしくお願いいたします。
nanasess
投稿日時: 2011/7/4 19:12
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: 受注管理画面で商品の変更を行っても、規格情報がうまく反映されない
MPV 様

混乱させてしまって申し訳ないです^^;

再帰させないとダメなのと, やっぱり is_array から配列を出さないようにしなければならないので再考してみました.


    function isBlank($val, $greedy = true) {
        if (is_array($val)) {
            if ($greedy) {
                if (empty($val)) {
                    return true;
                }
                $array_result = true;
                foreach ($val as $in) {
                    /*
                     * SC_Utils_Ex への再帰は無限ループやメモリリークの懸念
                     * 自クラスへ再帰する.
                     */
                    $array_result = SC_Utils::isBlank($in, $greedy);
                    if (!$array_result) {
                        return false;
                    }
                }
                return $array_result;
            } else {
                return empty($val);
            }
        }

        if ($greedy) {
            $val = preg_replace("/ /", "", $val);
        }

        $val = trim($val);
        if (strlen($val) > 0) {
            return false;
        }
        return true;
    }


これと置きかえてみていただけますでしょうか?
nanasess
投稿日時: 2011/7/4 19:18
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: 受注管理画面で商品の変更を行っても、規格情報がうまく反映されない
チケットも登録しておきました

http://svn.ec-cube.net/open_trac/ticket/1398
taji
投稿日時: 2011/7/4 19:43
対応状況: −−−
半人前
登録日: 2011/5/30
居住地:
投稿: 20
Re: 受注管理画面で商品の変更を行っても、規格情報がうまく反映されない
nanasess様
MPV 様
早速置き換えてみました。

引用:

sample.php
<?php
include("util/SC_Utils.php");
$array[0] = "";
$ret = SC_Utils::isBlank($array);
var_dump($ret);
$array[0] = "";
$array[1] = "";
$ret = SC_Utils::isBlank($array);
var_dump($ret);
$array[1] = "";
$array[2] = array("", "");
$array[3] = "";
$ret = SC_Utils::isBlank($array);
var_dump($ret);
?>


# php -v
PHP 5.3.3-7+squeeze1 with Suhosin-Patch (cli) (built: Mar 18 2011 17:22:52)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

# php sample.php
bool(true)
bool(true)
bool(true)

# php -v
PHP 5.2.6-1+lenny9 with Suhosin-Patch 0.9.6.2 (cli) (built: Aug 4 2010 03:25:57)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies

# php sample.php
bool(true)
bool(true)
bool(true)

結果、全てblankだと判定されました。
また、PHP5.3.x で発生していた Warningは発生しませんでした。

「SC_Utils::isBlank() で, 空白文字列をのみの配列を処理できない」事は恐らく修正されたと思われるのですが、
「受注管理画面で商品の変更を行っても、規格情報がうまく反映されない」現象に関しては
相変わらずです。
nanasess
投稿日時: 2011/7/4 19:53
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: 受注管理画面で商品の変更を行っても、規格情報がうまく反映されない
引用:

tajiさんは書きました:
nanasess様
MPV 様
早速置き換えてみました。



ありがとうございます. とり急ぎ, コミットしておきました

http://svn.ec-cube.net/open_trac/changeset/21014

引用:

「SC_Utils::isBlank() で, 空白文字列をのみの配列を処理できない」事は恐らく修正されたと思われるのですが、
「受注管理画面で商品の変更を行っても、規格情報がうまく反映されない」現象に関しては
相変わらずです。


別の原因なのですね...
こちらでも隙をみて引き続き調べてみます.
« 1 (2) 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,933名です
総投稿数は110,013件です

投稿数ランキング

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