人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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でできますか?
よろしくお願いします。

●質問者: seadwell
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● rouge_2008
●100ポイント ベストアンサー

条件分岐で「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


seadwellさんのコメント
ご回答ありがとうございます。 > 「getElementValue()」あるいは「getSubmitValue()」 便利なものを教えていただいてありがとうございます。 最初の方は無事動作を確認しました。 しかし、追記の方がカッコいいと思い例題とは別に、『2つのエレメントの内どちらか入力しないとエラーを出す』という方法を試していましたが・・・。 > ※空欄はチェックされませんので を見落としていました;; 『2つのエレメントの内どちらか入力しないとエラーを出す』の例に関しては最初の方で、他のチェックはregisterRuleで行こうと思います。 ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ