MySQL5とphp5.2.2で、PEARのHTML_QuickFormのaddRuleに関する質問です。

例えば以下のようなelementがあったとします。
$form->addElement('text', 'address1', '住所', array('size' => 60));
$form->addElement('text', 'address2', '建物・部屋番号', array('size' => 60));

address2にデータが入っているのにaddress1が空白の場合、エラーメッセージを出したいのですがこのような使い方はaddRuleでできますか?
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/03/16 15:59:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント100pt

条件分岐で「getElementValue()」あるいは「getSubmitValue()」でaddress2のフィールドに値が設定されているか判定し、値が設定されている場合に検証ルールを追加するようにしてはいかがでしょうか?

    if($form->getElementValue('address2')) {
        $form->addRule('address1', '住所の入力が必要です', 'required');
    }



どちらを利用するかは、フィルタ適用の有無で使い分けると良さそうです。
「getElementValue()」はフィルタリングされていない値になりますが、「getSubmitValue()」はフィルタリングされた値になります。

http://pear.php.net/manual/ja/package.html.html-quickform.html-quickform.getelementvalue.php
http://pear.php.net/manual/ja/package.html.html-quickform.html-quickform.getsubmitvalue.php


【追記】

もう一つの方法ですが、「registerRule()」で独自の検証ルールを登録して、address2の方にaddRuleする事でも可能です。(※空欄はチェックされませんので、address2に追加しています。)
最初の方法の方がシンプルな記述で済みますが・・・

    function check_address2($address2, $address1) {
        if($address2 != '') {
            if($address1 != '') {
                return true;
            }
            return false;
        }
    }

    $address1 = $form->getElementValue('address1');
    $form->registerRule('check_address1', 'callback', 'check_address2');
    $form->addRule('address2', '住所の入力が必要です', 'check_address1', $address1);


http://pear.php.net/manual/ja/package.html.html-quickform.intro-validation.php

id:seadwell

ご回答ありがとうございます。
> 「getElementValue()」あるいは「getSubmitValue()」
便利なものを教えていただいてありがとうございます。
最初の方は無事動作を確認しました。

しかし、追記の方がカッコいいと思い例題とは別に、『2つのエレメントの内どちらか入力しないとエラーを出す』という方法を試していましたが・・・。
> ※空欄はチェックされませんので
を見落としていました;;

『2つのエレメントの内どちらか入力しないとエラーを出す』の例に関しては最初の方で、他のチェックはregisterRuleで行こうと思います。
ありがとうございました。

2012/03/16 16:00:49

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません