PEAR HTML_QuickFormで、配列でPOSTされた値の指定方法


例:HTML
---
<input type="text" name="user[1][name]" />
<input type="text" name="user[1][age]" />
<input type="text" name="user[1][tall]" />

上記のような、フォームの値をHTML_QuickForm内で検証するときはどのように指定すればよいでしょうか。

例:PHP
---
$form->addElement("text", "user[1][name]");
$form->addRule("user[1][name]", "名前を入力してください。", 'required');

※上記のPHPの例では「user[1][name]」としていますが、これではできませんでした。

解決につながる回答をくれた方1名にポイントを差し上げます。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/05/24 16:47:14
  • 終了:2012/05/31 16:50:03

回答(2件)

id:papa-tomo No.1

パパトモ回答回数362ベストアンサー獲得回数1072012/05/24 20:42:10

ポイント300pt

誰も回答しないようなので・・・

HTML_QuickFormのインストールはできているのでしょうか。

http://www.goodpic.com/mt/archives2/2004/11/html_quickformp.html

例えば、次のように書いても何も表示されないというようなことはありませんか?

<?php
    require_once "HTML/QuickForm.php";
    $form = new HTML_QuickForm('frmTest', 'get');
    $form->addElement('header', 'MyHeader', 'QuickFormのテスト');
    $form->display();
?>
他1件のコメントを見る
id:papa-tomo

それから、もしインストールされているのに、特定のコードだけ表示されないなら、サーバのエラーログファイルに、手がかりが記録されているはずです。

2012/05/24 20:50:17
id:papa-tomo

うちの環境にはQuickFormをインストールしていないので、apacheのエラーログには、次のような記録が残されていました。

PHP Fatal error: require_once(): Failed opening required 'HTML/QuickForm.php' (include_path='.:')・・・・・・

2012/05/24 20:52:56
id:pretaroe No.2

pretaroe回答回数531ベストアンサー獲得回数752012/05/27 19:54:21

name="user[1][name]"

こういう指定の仕方はまずできないんですよ。

この部分は、純粋にHTMLとPOSTの仕様なので
その仕様にない方法を使うことはできません。



配列で受け取るなどもできますが以下のような感じでないとできません
http://kawama.jp/archives/2007/06/html_quickforms_1.html

id:jayz

正直この回答はひどい。

2012/05/30 02:50:47
  • id:rouge_2008
    質問のコードで動作するはずですが、どのようにうまくいかなかったのでしょう?
    フォームにアクセスした状態で赤色のアスタリスク「*」がrequired指定した項目の前に表示されますが、表示されないのでしょうか?
    そのまま入力しないで送信すると、指定したメッセージが表示されます。
    どこまで正常に動作していますか?
  • id:jayz
    私が試したところでは、Quick formでの入力チェック時に、フォームからの値が渡っていないようでした。
    フォームのname値に、配列を使うことなど、よくあることなので、てっきり多次元配列も扱えるものと思っていましたが、
    どうやら通常の配列はグループ化することで扱えるようですが、多次元配列には対応していないようです。
    もし、認識に間違いがあれば、ご指摘お願いします。

  • id:jayz
    あ、それと、私はフォームの生成に、Quick formは使用しておらず、入力チェックのみに使用しています。
  • id:rouge_2008
    HTML_QuickFormは、フォームの生成、検証、処理を一括して行うライブラリではないかと思います。
    検証(入力チェック)のみというように、一部の機能だけを利用する事はできないと思いますが、フォームはどのように表示しているのでしょう?
    配列ではない項目の入力チェックは出来ているのでしょうか?
    入力チェックのみ利用したいのはなぜでしょうか?
    コードとテンプレートを分けたい場合、レンダラにSmartyを利用するといいみたいですが・・・
  • id:jayz
    フォームはHTMLで作成し、入力チェックを行なうファイルにAJAXでPOSTしています。
    また、多次元配列ではない項目については、HTML_QuickFormで入力チェックが行なえています。
    入力チェックでのみ使いたいのは、入力チェック目的でのみQuickFormを使っているからです。
  • id:rouge_2008
    こちらではAjaxでPOSTした場合にも、多次元配列の(「user[0][first]」のような)項目の入力チェックも可能でした。
    AjaxとPHPのどちらかは分かりませんが、コードに問題があるのだと思います。
    現在利用しているコードを提示した方が、解決に繋がる回答がつくのではないかと思います。
    ※HTML_QuickFormへの要素の追加と検証ルールの追加は、質問にあるコードで大丈夫でした。
  • id:rouge_2008
    次のページで紹介されている方法で利用しているのでしょうか?
    http://kawama.jp/archives/2011/01/jquery_pear_html_quickform.html

    AjaxによるHTML_QuickFormでの入力チェック(多次元配列の項目)ができれば、方法にはこだわらなくても大丈夫なのですか?
    その辺りが分からないと、回答しにくいと思います。
  • id:jayz
    rougeさんからの回答を見て、新たにテスト用のフォームを作成し、多次元配列での入力チェックを試したところ
    何の問題もなく、チェックすることができました。

    実際に試していただいたようでありがとうございます。
    コメントではなく、解答欄に何か適当でかまいませんので、投稿してもらえますか?
  • id:rouge_2008
    具体的な解決方法を提示したわけではありませんし、解決したのでしたら回答は控えておきます。
  • id:rouge_2008
    間違った回答を付けられてしまったようですので、ご存知かもしれませんが訂正の情報をコメントします。
    HTMLの仕様として、name値に使用できる文字列に[と]は含まれていませんが、PHPでは配列として受け取る場合、キーを指定するかどうかは自由としていますので「arr[]」だけでなく、「arr[任意のkey]」も利用できます。
    実際にどちらでも動作する事は経験済みだと思います。

    http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/types.html#type-cdata
    http://undine.sakura.ne.jp/uglabo/htmlref/xhtml1-strict/data-type.html

    http://php.net/manual/ja/faq.html.php
    ---------------------------------------------------------------
    上記の HTML の場合、MyArray と MyOtherArray という 2 つの配列が生成され、 PHP スクリプトに送信されます。また、配列に特定のキーを設定する こともできます。

    <input name="AnotherArray[]" />
    <input name="AnotherArray[]" />
    <input name="AnotherArray[email]" />
    <input name="AnotherArray[phone]" />

    この場合、配列 AnotherArray のキーは 0、1、email そして phone となります。

    注意:

    HTML に配列のキーを指定するかどうかは自由です。キーを指定しなかった 場合はフォームに現れる順番に番号がつけられます。最初の例だと、 キーは 0、1、2、3 となります。
    ---------------------------------------------------------------
  • id:jayz
    わざわざありがとうございます。
    一応その辺はわかっているので大丈夫ですが、この回答は
    pretaroeさんに読んでもらいたいなーと思いました。

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません