バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 携帯メールアドレスをカンマ区切りで複数検索したい

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hihi
投稿日時: 2012/10/14 19:58
対応状況: −−−
一人前
登録日: 2012/8/14
居住地:
投稿: 72
携帯メールアドレスをカンマ区切りで複数検索したい
[EC-CUBE]2.12.1
[PHP]5.3.1
[データベース]MySQL 5.1.43
________________

例えば、ドコモとAUの人だけにメルマガを配信するとして、現状ではドコモの会員を検索して配信し、それから、AUの会員を検索して配信しなければならず、配信するメルマガは1種類なのに時間が二倍かかってしまいます。

検索条件がさらに増えると時間もさらに掛かってしまうので、一度に複数のアドレスが検索出来るようにしたいです。

どのように実現したら良いのかを教えて頂ければと思います。

よろしくお願いします。
ゲスト
投稿日時: 2012/10/16 21:06
対応状況: −−−
Re: 携帯メールアドレスをカンマ区切りで複数検索したい
「,」で、分割後に、バリデーションを通して、where 句に引き渡せば良い様に思います。

あと、定型操作ならば、where句の設定を、ハードコーディングしてしまうというのも、有りだと思います。
hihi
投稿日時: 2012/10/17 10:13
対応状況: −−−
一人前
登録日: 2012/8/14
居住地:
投稿: 72
Re: 携帯メールアドレスをカンマ区切りで複数検索したい
いつも有難う御座います。
まだ、PHP初心者のもので、ソースコードなど詳しく教えて頂けたら有難いのですが、駄目でしょうか?

ご検討お願いします。
ゲスト
投稿日時: 2012/10/17 12:28
対応状況: −−−
Re: 携帯メールアドレスをカンマ区切りで複数検索したい
ちょっと調べてみました。
以下の様な感じでしょうか。。。

data/class/SC_CustomerList.php

        // E-MAIL
        if (!isset($this->arrSql['search_email'])) $this->arrSql['search_email'] = '';
        if (strlen($this->arrSql['search_email']) > 0) {
            //カンマ区切りで複数の条件指定可能に
            $this->arrSql['search_email'] = explode(',', $this->arrSql['search_email']);
            $sql_where = '';
            foreach ($this->arrSql['search_email'] as $val) {
                $val = trim($val);
                //検索条件を含まない
                if ($this->arrSql['not_emailinc'] == '1') {
                    if ($sql_where == '') {
                        $sql_where .= 'dtb_customer.email NOT ILIKE ? ';
                    } else {
                        $sql_where .= 'AND dtb_customer.email NOT ILIKE ? ';
                    }
                } else {
                    if ($sql_where == '') {
                        $sql_where .= 'dtb_customer.email ILIKE ? ';
                    } else {
                        $sql_where .= 'OR dtb_customer.email ILIKE ? ';
                    }
                }
                $searchEmail = $this->addSearchStr($val);
                $this->arrVal[] = $searchEmail;
            }
            $this->setWhere($sql_where);
        }

        // E-MAIL(mobile)
        if (!isset($this->arrSql['search_email_mobile'])) $this->arrSql['search_email_mobile'] = '';

        if (strlen($this->arrSql['search_email_mobile']) > 0) {
            //カンマ区切りで複数の条件指定可能に
            $this->arrSql['search_email_mobile'] = explode(',', $this->arrSql['search_email_mobile']);
            $sql_where = '';
            foreach ($this->arrSql['search_email_mobile'] as $val) {
                $val = trim($val);
                //検索条件を含まない
                if ($this->arrSql['not_email_mobileinc'] == '1') {
                    if ($sql_where == '') {
                        $sql_where .= 'dtb_customer.email_mobile NOT ILIKE ? ';
                    } else {
                        $sql_where .= 'AND dtb_customer.email_mobile NOT ILIKE ? ';
                    }
                } else {
                    if ($sql_where == '') {
                        $sql_where .= 'dtb_customer.email_mobile ILIKE ? ';
                    } else {
                        $sql_where .= 'OR dtb_customer.email_mobile ILIKE ? ';
                    }
                }
                $searchemail_mobile = $this->addSearchStr($val);
                $this->arrVal[] = $searchemail_mobile;
            }
            $this->setWhere($sql_where);
        }

で「//カンマ区切りで複数の条件指定可能に」とあるので、

data/class/SC_CheckError.php

    function EMAIL_CHAR_CHECK($value) {
        if (isset($this->arrErr[$value[1]])) {
            return;
        }
        $this->createParam($value);
        
        // hideki-s
        if (strlen($this->arrParam[$value[1]]) > 0 && !preg_match("/^[a-zA-Z0-9_,\.@\+\?-]+$/i",$this->arrParam[$value[1]])) {
&#160; &#160; &#160; &#160; &#160; &#160; $this->arrErr[$value[1]] = '※ ' . $value[0] . 'に使用する文字を正しく入力してください。<br />';
&#160; &#160; &#160; &#160; }
&#160; &#160; }

上記に、試しに「,」を追加したら、検索出来た様な、、、感じ。。。
(検索結果表示が「PCメールアドレス」なので、「携帯メールアドレス」が正しく検索されたのか、分かりにくいので、ちゃんと検索されたのか、良く分からない。)

で、、、単なる function 間の意思の不整合なのか、「,」の副作用が有るのか、、、までは、追えていません。。。
seasoft
投稿日時: 2012/10/17 12:45
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: 携帯メールアドレスをカンマ区切りで複数検索したい
EMAIL_CHAR_CHECK は影響範囲も広いので、別にカンマ区切り対応チェックを追加して、SC_Helper_Customer#sfSetSearchParam の指定を書き換えるのが良いかも。

(なんとんく)


しかし、連携した処理が SC_Helper_Customer と SC_CustomerList に分散して定義されているようで、分かりにくいですね・・・


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

hihi
投稿日時: 2012/10/19 14:54
対応状況: −−−
一人前
登録日: 2012/8/14
居住地:
投稿: 72
Re: 携帯メールアドレスをカンマ区切りで複数検索したい
いつも有難う御座います。
助かります。これでちょっとやってみます。
hihi
投稿日時: 2012/10/19 17:52
対応状況: −−−
一人前
登録日: 2012/8/14
居住地:
投稿: 72
Re: 携帯メールアドレスをカンマ区切りで複数検索したい
携帯メールアドレス以外に購入商品名もカンマ区切りで複数検索したいのですが、携帯メールアドレス同様にソースコードを書けば、複数検索が実現できるのでしょうか?

ご教授願います。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
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.