• ベストアンサー

PEAR::HTML_QuickFormで、POSTされたラジオボタン配列の値がprintできないのですが・・・

下記サンプルで、 ソース http://www.okushin.co.jp/information/tanuki03/index.php 画面 http://www.okushin.co.jp/information/tanuki03/tanuki03_frmTanuki/index.php POSTされたラジオボタンの配列の値をprint(またはecho)するには どのように記述したらよいでしょうか。 // 「好きな動物」ラジオボタンのグループ // 第二引数の「名称」が同じボタンの中から一つだけが選択できる。 $animalRdoArr[] = &HTML_QuickForm::createElement('radio','rdoAnimal',null,'犬',0); $animalRdoArr[] = &HTML_QuickForm::createElement('radio','rdoAnimal',null,'猫',1); $animalRdoArr[] = &HTML_QuickForm::createElement('radio','rdoAnimal',null,'こうもり',2); 例えば、「犬」を選択したら0(ゼロ)がPOSTされますが、 (1) print $animalRdoArr[]; →エラーになります (2) print $animalRdoArr; →NULLを返してきます (3) print $rdoAnimal; →NULLを返してきます たぶん、些細な問題でしょうが・・よろしくお願い致します。

  • PHP
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • f_motion
  • ベストアンサー率53% (7/13)
回答No.3

まずは、もう少しシンプルな物で、試してみては いかがでしょうか? 自分は、smartyで出力していますので参考になるかどうか分かりませんが、 流れは、確認->よければ->送信 送信後に、exportValuesで、値を配列に格納して、 いますので、ここでその値をDBなどに登録などしております。 <?php //ボタン処理 require_once "Smarty.class.php"; require_once "MySmarty.class.php"; require_once "HTML/QuickForm.php"; require_once "HTML/QuickForm/Renderer/ArraySmarty.php"; $smarty = new MySmarty(); $form = new HTML_QuickForm("Form"); $form->addElement ("text","name","お名前:",array("size"=>30,"maxlength"=>40)); $form->addElement ("text","email","メールアドレス:",array("size"=>30,"maxlength"=>100)); //入力チェック $form->setJsWarnings("必須項目を入力してください。",""); $form->addRule ("name","お名前が入力されていません。","required",NULL,"client"); $form->addRule ("email","メールアドレスが入力されていません。","required",NULL,"client"); if (isset($_POST["BTNG"]["SUBMIT_INDEX"])) { // 確認画面 (入力画面で「送信」クリック時)入力チェック実行 if ($form->validate()) { // 入力が正しい時は「戻る」ボタンと「送信」ボタンを表示 $buttons[] = &HTML_QuickForm::createElement ("submit","RETURN_CONF", "戻る"); $buttons[] = &HTML_QuickForm::createElement ("submit","SUBMIT_CONF", "送信"); $form->addGroup($buttons, "BTNG", null, "&nbsp;"); } else { // 入力が不正な時は「戻る」ボタンのみを表示 $buttons[] = &HTML_QuickForm::createElement ("submit","RETURN_CONF", "戻る"); $form->addGroup($buttons, "BTNG", null, "&nbsp;"); } // 入力内容を凍結 $form->freeze(); } elseif (isset($_POST["BTNG"]["SUBMIT_CONF"])) { if ($form->validate()) { // 入力結果を$valsに格納 $val = $form->exportValues(); echo "{$val['name']}\n"; echo "{$val['email']}"; } } else { // 入力画面表示 (最初と確認画面で「戻る」クリック時) $buttons[] = &HTML_QuickForm::createElement ("submit","SUBMIT_INDEX", "確認"); $form->addGroup ($buttons, "BTNG", null, "&nbsp;"); } $renderer = new HTML_QuickForm_Renderer_ArraySmarty($smarty); $form->accept ($renderer); $smarty->assign ("form", $renderer->toArray()); $smarty->display(basename($_SERVER["SCRIPT_NAME"],".php").".tpl"); ?>

litton101
質問者

お礼

f_motionさん、詳細なサンプルをご提示いただき、 ありがとうございました。smartyも将来的には お世話になりたいとは思っていますが、 これを参考に目的を達成できそうです。 ありがとうございました。

その他の回答 (2)

  • f_motion
  • ベストアンサー率53% (7/13)
回答No.2

こんにちは、上記サイトは自分も参考にしましたが、 ちょっと分かりづらいのが難点。。。 $form = new HTML_QuickForm("Form");だったら $val = $form->exportValues(); で連想配列で、値が格納されますので、 ラジオボタンの場合は、$val['rdoAnimal']['rdoAnimal'] のような感じで、格納されます、 textのなどの場合は、$val['text'] のように、格納されますので、後はprint_r($val)で 確認してみて下さい。

litton101
質問者

補足

f_motionさん、詳細な解説ありがとうございました。 > 上記サイトは自分も参考にしましたが 大変心強いです。 わたしが実際に使ってみたのは、HTML_QuickForm_Controllerの方 みたいですが、 >ラジオボタンの場合は、$val['rdoAnimal']['rdoAnimal'] に準拠して組み込んでみましたが、やっぱり出ないみたいです・・うう。 何が間違っているでしょうか・・ 下記、いろんなサンプルから切り貼りしたソースですみませんが <?php require_once("HTML/QuickForm/Action.php"); require_once("HTML/QuickForm/Controller.php"); require_once("HTML/QuickForm/Action/Back.php"); require_once("HTML/QuickForm/Action/Next.php"); require_once("HTML/QuickForm/Action/Display.php"); require_once("HTML/QuickForm/Action/Submit.php"); session_start(); class PageFirst extends HTML_QuickForm_Page {   function buildForm() {     $this->_formBuilt = true;     $this->addElement('header', null, '1 / 3');     $q1Arr[] = &$this->createElement('radio', 'rdoQ1', null, 'はい', 'Y');     $q1Arr[] = &$this->createElement('radio', 'rdoQ1', null, 'ふつう', 'F');     $q1Arr[] = &$this->createElement('radio', 'rdoQ1', null, 'いいえ', 'N');     $this->addGroup($q1Arr, 'q1', 'Q1 嫌いですか?');     $this->addElement('submit', $this->getButtonName('next'), '次へ >>');     $this->setDefaultAction('next');   } } class PageSecond extends HTML_QuickForm_Page {   function buildForm() {     $this->_formBuilt = true;     $this->addElement('header', null, '2 / 3');     $this->addElement('textarea', 'itxaTest', 'メッセージ:', array('rows' => 10, 'cols' => 10));     $prevnext[] =& $this->createElement('submit', $this->getButtonName('back'), '<< 前へ');     $prevnext[] =& $this->createElement('submit', $this->getButtonName('next'), '次へ >>');     $this->addGroup($prevnext, null, '', '&nbsp;', false);     $this->setDefaultAction('next');   } } class PageThird extends HTML_QuickForm_Page {   function buildForm() {     $this->_formBuilt = true;     $this->addElement("header", null, '3 / 3');     $this->addElement("text","name","名前:", array("size"=>20,"maxlength"=>30));     $this->addElement("submit",$this->getButtonName("back"),"<< 前へ");     $this->addElement("submit",$this->getButtonName("submit"),"完了");     $this->applyFilter("name","trim");     $this->setDefaultAction("next");   } } class MyDisplay extends HTML_QuickForm_Action_Display {   function _renderForm($page){     $renderer=$page->defaultRenderer();     $renderer->setHeaderTemplate("\n<tr>\n<td colspan=\"2\">{header}</td>\n</tr>");     $page->accept($renderer);     print($renderer->toHtml());   } } class ControllerAction extends HTML_QuickForm_Action {   function perform($page, $actionName){     $values=$page->controller->exportValues();     print("Q1:" . $values['rdoQ1']['rdoQ1'] . "<br />");     print("メッセージ:" . $values['itxaTest']."<br />");     print("名前:" . $values['name']."<br />");     $page->controller->container(TRUE);   } } $ctrl=new HTML_QuickForm_Controller("myForm"); $ctrl->addPage(new PageFirst("first")); $ctrl->addPage(new PageSecond("second")); $ctrl->addPage(new PageThird("third")); $ctrl->setDefaults(array("name"=>ななし)); $ctrl->addAction("display",new myDisplay()); $ctrl->addAction("back",new HTML_QuickForm_Action_Back()); $ctrl->addAction("next",new HTML_QuickForm_Action_Next()); $ctrl->addAction("process",new ControllerAction()); $ctrl->run(); ?>

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1
litton101
質問者

お礼

inu2さん、ありがとうございました。 確かにサンプルではprint_rで出力されていました。 array(3) {  ["iradYesNo"]=>  string(1) "Y"  ["name"]=>   :   : みたいなやつって、print_rの結果だったのですね。 ありがとうございました。

関連するQ&A

  • QuickFormのradioボタンでエラーが出る

    require_once("HTML/QuickForm.php"); $form = new HTML_QuickForm(); $ques[] = &HTML_QuickForm::createElement('radio', null, 'Yes', 'Yes', '1');←”ここでエラーがでる” $ques[] = &HTML_QuickForm::createElement('radio', null, 'No', 'No', '2'); $form->addGroup($ques, 'ques'); $form->addRule('ques', '入力してください。', 'required', null, 'client'); if ($form->validate()){ $form->freeze();} $form->addElement('submit','submit', '送信'); require_once("HTML/QuickForm/Renderer/ArraySmarty.php"); $renderer= new HTML_QuickForm_Renderer_ArraySmarty($smarty); $form->accept($renderer); $smarty->assign('form', $renderer->toArray()); $file = 'test.tpl'; $smarty->display($file) ----------------------------------------------------------- HTML_QuickFormでラジオボタンをチェックしたいのですが、「←”ここでエラーがでる”」の部分で、Fatal error: [] operator not supported for strings in /virtual/パス/test.php on line 19←ここの数字はエラー行 のエラーがでます。 どうやったら、エラーを回避できるか分かりません。 よろしくお願いします。

    • 締切済み
    • PHP
  • HTML_QuickForm ラジオボタンにデフォルト値を設定するには

    HTML_QuickForm::createElementにて作成したラジオボタンのグループの1つにデフォルトでチェックを入れるにはどうしたら良いでしょうか。 addElementではなくcreateElementです。 具体的にはこのようなソースです。 for($i=0;$i<=$m;$i++) { $tmp[$i] = array( $form->createElement("text","t", ), $form->createElement("radio","r",NULL,"r0",0), $form->createElement("radio","r",NULL,"r1",1), $form->createElement("radio","r",NULL,"r2",2) ); $form->addGroup($tmp[$i],"gp".$i,"rgp".$i.":"); } r0をチェックした期待するhtmlは下記の通りです。 <input type="radio" name="gp1[r]" value="0" checked>r0 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • HTML_QuickFormのチェックボックスについて

    smartyと連携させて作っています。 チェックボックスで取得した値を任意の場所に指定させたいのですが どのようにすればできるのでしょうか? 現状は、チェックボックスの値は正常に表示されるのですがメール本文 の最下部に表示されてしまい任煮の場所に表示させたいのですが方法がわかりません。 「現状のメール本文」 =============================================================== 【氏名】 nameに入力した値 【選択】 Array //←Arrayではなくここに選択肢の値を入れたい =============================================================== cb3の値 //←ここに選択肢の値は表示させたくない 中身は以下のようになっています。(抜粋) <?php $form->addElement('text', 'name', '氏名'); $checks = array(); $checks[] =& HTML_QuickForm::createElement('checkbox', 'cb3_1', null, 'cb3_1_label'); $checks[] =& HTML_QuickForm::createElement('checkbox', 'cb3_2', null, 'cb3_2_label'); $checks[] =& HTML_QuickForm::createElement('checkbox', 'cb3_3', null, 'cb3_3_label'); $form->addGroup($checks, 'cb3', '選択', "<br />\n"); $form->addGroupRule('cb3', '選択は必須項目です', 'required', null, 1); $message = <<<EOD =============================================================== 【氏名】 {$value['name']} 【選択】 {$value['cb3']} =============================================================== EOD; foreach ($value['cb3'] as $k => $v) { switch ($k) { case 'cb3_1' : $message .= "選択肢1が選択されました。\n"; break; case 'cb3_2' : $message .= "選択肢2が選択されました。\n"; break; case 'cb3_3' : $message .= "選択肢3が選択されました。\n"; break; } } mb_send_mail($to, $subject, $message, "From: {$value['email']}"); $form->freeze(); } else if ($form->validate() && isset($value['confirm'])) { } else { } ?>

    • 締切済み
    • PHP
  • PEAR::HTML_QuickForm 確認から完了について

    PEAR::HTML_QuickFormの使い方として、入力→内容確認→完了のように画面が遷移させるのが一般的だと思っています。 確証(validate)後はどのようにコーディングすれば良いでしょうか。 例えば、よくあるサンプルでこのような書き方があります。 if($form->validate()) { $form->process("hoge"); } しかし、processメソッドは戻り値がないく使いづらいので、ユーザー定義関数に置き換えています。 また if($form->validate()) { $form->freeze(); echo $form->toHtml(); } のようなものも良く見ますが、HTML_QuickForm_Elementのメソッドを利用してもheader要素はいじれないようなのでこれまた使いづらい気がします。 subimitボタンなんかもDefaultRenddererのまんまだとテーブルの要素になってしまうようで、書き直したりして・・・。 結局、不細工なソースになってしまってなんだか釈然としません。 抽象的な質問でスミマセンが、入力後の確認から完了までの標準的な雛形があれば参考にしたいと考えています。

    • ベストアンサー
    • PHP
  • QuickForm createElement での select の使いかたについて

    有識者の皆様 PHP QuickForm にて、以下のようなコードを書いています。 最終的な表示を 訪問履歴 [ ] 年 [ ] 月 [ ] 回 というようにしたいのですが、年・月・日ともに表示できません。 以下に、実際のコードを転記致します。 <?php $monthA = array('選択してください', '01','02','03','04','05','06','07','08','09','10','11','12' ); $yearA = array('選択してください', date('Y'),date('Y', time() - 60*60*24*365*1) ); $countA = array('選択してください', '1','2','3','4','5','6','7','8','9','10' ); $v[] = &HTML_QuickForm::createElement('select', 'year', '年', $yearA); $v[] = &HTML_QuickForm::createElement('select', 'month', '月', $monthA); $v[] = &HTML_QuickForm::createElement('select', 'count', '回', $countA); $form->addGroup($v, null, '訪問履歴', '&nbsp;'); ?> ご回答お願い致します。

    • 締切済み
    • PHP
  • 配列をPOSTで受けとる

    タイトルのまんまですが 配列をformで送って それをPOSTで受け取りたいのですが うまくいきません 具体的に言うと <?php print"<form method=POST action=action.php>"; for($i=0; $i<$n; $i++){    print"<input type=text name=foo[$i]>"; } print"<input type=hidden name=n value=$n>"; print"<input type=submit value=go>"; print"<form>"; ?> ///////////以下action.php////////////////// <?php $n = $_POST["n"]; for($j=0; $j<$n; $j++){    $foo[$j] = $_POST["foo[$j]"];    print"$foo[$j]"; } ?> こんな感じのことがしたいのですが うまくいきません どうもPOSTされてないみたいでfoo[$j]はnullです 凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓ 教えてください よろしくお願いします

    • ベストアンサー
    • PHP
  • ラジオボタンのチェックの付け方。

    sizen.csvというファイルがあります。 中身は ----- umi,海 yama,山 mizuumi,湖 ike,池 mura,村 ----- です。 このcsvファイルをsizen.phpに読込んで ラジオボタン使用の設問を作りたいと思っております。 プログラムは・・・ <form action="area.php" method="POST"> <?php $file=file("sizen.csv"); for($i=0;$file[$i];$i++){ $data=explode(",",$file[$i]); echo"<input type='radio' name='sizen' value='".$data[0]."'>"; echo"$data[1]<br>"; } ?> <input type="submit" value="次へ"> とできたのですが、チェックがついていません。 先頭にチェックボタン(今回の場合は海の選択肢に最初からチェックを付けたい)を付けたいのですが、どういう方法があるのでしょうか? if文を使って <form action="area.php" method="POST"> <?php $file=file("sizen.csv"); for($i=0;$file[$i];$i++){ $data=explode(",",$file[$i]); if($data[0]==umi){ echo"<input type='radio' checked name='sizen' value='".$data[0]."' >"; echo"$data[1]<br>"; }else{ echo"<input type='radio' name='sizen' value='".$data[0]."'>"; echo"$data[1]<br>"; } } ?> <input type="submit" value="次へ"> とすればできるのですが、 sizen.csvファイルの中身をよく変える為、 if($data[0]==umi){・・・・ という風に、$data[0]==umiのように固定はできません。 この方法を使わずに、ラジオボタンのチェックを いつも選択肢の先頭に付けるにはどのような方法があるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 選択されたラジオボタンの値が取り出せない

    フォームを使って普通のHTMLで記述すれば選択された値が 送られてくると思うのですが、エレメントを作って次のような やり方だと、「2」を選択したとしてもvalueが「1」しか返ってきません。 どうすれば適切に値を取り出すことができるのでしょうか? var element1 = document.createElement("span"); element1.innerHTML = "<input type='radio' name='a' value=1>"; document.body.appendChild(element1); var element2 = document.createElement("span"); element2.innerHTML = "<input type='radio' name='a' value=2>"; document.body.appendChild(element2); ~何かクリックした先でidが「a」のオブジェクトを取得し、選択されてた値を取り出したい~ var ele = document.getElementById("a"); alert(ele.value);←1しか表示されない

  • ラジオボタンをループすることができない。。。

    こんにちは。 PHPとMySQLを使って四択クイズのプログラムを作成しているのですが、どうもうまくいきません。 助言よろしくお願いします。 四択クイズのイメージとしては以下のとおりです。 問題1:パンはパンでも食べられないパンは? ○クリームパン ○食パン ○フライパン ○チーズパン [送信ボタン] ※選択肢の前の○はラジオボタンです。 一つのページに複数の問題を載せたいので、 上記の[送信ボタン]をのぞいた部分をループ処理したいと思っています。 問題文と選択肢は実行するファイルとは別のファイル、「mondai.sql」に記述してデータベースに読み込んでいます。↓ drop table form2; create table form2(id mediumint not null auto_increment, mondai varchar(500), sentaku1 varchar(100),sentaku2 varchar(100),sentaku3 varchar(100), sentaku4 varchar(100),primary key(id)); insert into form2 values('1', 'パンはパンでも食べられないパンは?', 'クリームパン', '食パン', 'フライパン', 'チーズパン'); そして実行するファイルの「form2.php」を下のように記述してみたのですが・・・ ・ ・ ・ //----------------------------------------- //サーバに接続 //----------------------------------------- $my_Con = mysql_connect("localhost","root","vertrigo"); if($my_Con == false){ die("MYSQLの接続に失敗しました。"); } //----------------------------------------- //データベースに接続 //----------------------------------------- if(!mysql_select_db("kihon",$my_Con)){ die("データベースの選択に失敗しました。"); } //----------------------------------------- //テーブルからデータを読む //----------------------------------------- $my_Row = mysql_query("select * from form2",$my_Con); if(!$my_Con){ die(mysql_error()); } while($row = mysql_fetch_array($my_Row)){ echo $row["id"]; echo "<br>"; echo $row["mondai"]; echo "<br>"; ?> <input type="radio" name=mondai1 value=1> <?php echo $row["sentaku1"]; echo "<br>"; ?> <input type="radio" name=mondai1 value=2> <?php echo $row["sentaku2"]; echo "<br>"; ?> <input type="radio" name=mondai1 value=3> <?php echo $row["sentaku3"]; echo "<br>"; ?> <input type="radio" name=mondai1 value=4> <?php echo $row["sentaku4"]; echo "<br>"; } このままだとラジオボタンのnameが同じになってしまって全ての問題の選択肢から一つしか選べなくなってしまいました。 かといってnameをfor文でループさせることもできませんでした。 このプログラムにどのようにしてループを組み込めばいいかまったくわかりません。 長い質問で申し訳ないのですが、どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • HTMLのpost送信について

    HTMLのpost送信について 送り側で入力した文字がphpのプログラムへ送られ、 ブラウザが開いて送られた文字列が表示されるはず なのですが、HTMLファイルの送信ボタンを押しても 無反応です。どこがまちがっているいのでしょうか? 送り側プログラム ファイル名:okuri1.html <html> <head> <hitle>送り側プログラム</title><br> </head> <body> <from method="post" action="uke1.php"> <input type="text" name="a"size="20"> <br> <input type="submit" value="送信" size="20"> </form> </body> </html> 受け側プログラム ファイル名:uke1.php <?php print POST["a"]; ?>

    • ベストアンサー
    • PHP

専門家に質問してみよう