• 締切済み

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
  • 回答数2
  • ありがとう数3

みんなの回答

回答No.2

少し調べてみましたが、セパレータとして複数の値を付加方法はなさそうです。 addGroupはradioやcheckboxをまとめるためにあるようで、ラベル付きのselect要素に使用するものではないようです。 ある程度自由なフォーム羅列を望むのであれば、 何か別のライブラリをご利用されたほうが良いかも知れません。(フレームワークとか)

rdilts
質問者

お礼

hogehoge78さん 色々と調査して頂いてありがとうございました。 ひとまず、今回は、別の手法をとってみます。

回答No.1

このソースコードの最後に、 $form->display(); をされておりますか? もし挿入されているのでしたら何かエラーが出てくるとかといったことはありませんでしょうか。 転載されたそのソースにdisplay()を追加したところ正常に動くようでした。

rdilts
質問者

補足

hogehoge78 さま 早速ご回答ありがとうございます。 ソースに不足がありました。失礼しました。<(_ _)> 以下に、display() メソッドを付与した版を転記致します。 元々のソースは display() は付与してあり、以下のような表示になってしまうのですね。 訪問履歴 [] [] [] ちなみに、再度記載しますが、期待している値は、 訪問履歴 [] 年 [] 月 [] 日 です。 <?php require_once 'HTML/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' ); $form = new HTML_QuickForm("myForm"); $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, '訪問履歴', ' '); $form->display(); ?> ちなみに、エラーは一切表示されておりません。 では、宜しくお願い致します。

関連する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のチェックボックスについて

    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で、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
  • 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
  • DB抽出結果を配列のままフォームのSELECTに使いたい

    環境はWINDOWS XP Apache2.2 PHP 5.2.3 MYSQL5 です PDOにてDB接続してます quickformを使ってフォームを作成したいと思っています include 'connect.php'; $rs=$db->query("select id,name from master"); にてIDと名前の配列を抽出し、 require_once'HTML/Quickform.php'; $form=new HTML_quickform('myform','POST','test.php'); $form->addelement('select',name,'氏名',$rs); として、氏名のドロップダウンリストを表示させたいのですが、 $rs->fetch()などで一行ずつ取り出さずに配列のままリストに入れる方法がうまくいきません。 ご教授下さい

    • 締切済み
    • PHP
  • <select> の<option value>が指定していできません。

    はじめましてチャーシューと申します。 <HTML> <HEAD><TITLE>LOGIN PAGE</TITLE> <?php $db=mysql_connect("localhost","shisan","yu0414") or die("データベースへの接続に失敗しました。"); mysql_select_db("shisan",$db); $rs=mysql_query("SELECT userID,name FROM user order by userID",$db); ?> </HEAD> <BODY> <?php print("<SELECT>"); while($row=mysql_fetch_array($rs)){ print("<option>"); print($row['name']); print("</option>"); } print("</SELECT>"); mysql_free_result($rs); mysql_close($db); ?> </BODY> </HTML> を <HTML> <HEAD><TITLE>LOGIN PAGE</TITLE> <?php $db=mysql_connect("localhost","shisan","yu0414") or die("データベースへの接続に失敗しました。"); mysql_select_db("shisan",$db); $rs=mysql_query("SELECT userID,name FROM user order by userID",$db); ?> </HEAD> <BODY> <?php print("<SELECT>"); while($row=mysql_fetch_array($rs)){ print("<option value="$row['userID']">");←ここを追加しました。 print($row['name']); print("</option>"); } print("</SELECT>"); mysql_free_result($rs); mysql_close($db); ?> </BODY> </HTML> のように変更すると Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\htdocs\shisan\login.php on line 14というエラーが起きてしまいます。 環境はWindowsXP professional apache,mysql,php5はxamppを使用しています。 ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • 連動させたいセレクトボックスについて。

    こんにちは。DB+PHPが初心者のものです。 前にもここで質問させていただきましたが、 自分なりにコードを書いてみたので コードの訂正、ご教授をよろしくお願いいたします。 セレクトボックス1には、[table 1]の、種類が入り れレクトボックス2には、[table 1]の種類に連動して、[table 2]の名前が選択できるようにする。 下記のようにソースを書いてみましたが、 table1の値は、セレクトボックスでちゃんと表示されますが、table2はセレクトボックスは表示されるものの、何も値がありません(T_T) 動きとしては、table1のセレクトボックスで選択したら、その項目をDBへ問い合わせ、その項目に対応した、DBに登録されているtable2の値を二つ目のセレクトボックスに表示させたいです。 <html> <body> <select name="mkoumoku"> <option selected>-------------</option> <?php //DB接続 $dbcon=mysql_connect("localhost","abcd","defg"); //DB選択 mysql_select_db("zozozo"); //table1を取得 $res=mysql_query("select distinct * from table1"); while ($rows=mysql_fetch_array($res)) { echo "<option value=\"".$rows['id']."\">".$rows['kind']."\n"; } echo "</select>"; ?> <select name="skoumoku"> <option selected>-------------</option> <? //table1に連動して項目を変えたいところのコード $res1=mysql_query("select * from table2 where key =$_POST[mkoumoku] order by id"); while ($rows=mysql_fetch_array($res1)) { echo "<option value=\"".$rows['id']."\">".$rows['name']."\n"; } //Dbクローズ mysql_close($dbcon); ?> </body> </html>

    • ベストアンサー
    • PHP
  • セレクトボックスの連動処理

    お世話になります。 JavaScript勉強中のもので、サンプルソースを見つけることができなかったので、質問させてください。 http://javascriptmarket.com/script/jsm07.html http://www.alink.co.jp/tech/blog/sample_code/js/team_json_20090404.html やりたいイメージとしては、上記のページのようなことです。 具体的には、日付の入るセレクトボックスを2つ用意し、 片方のセレクトボックスの日付を選択すると、もう片方のセレクトボックスに●日後の日付選択肢が表示される。 ということをしたいと思っています。 元々の日付の選択肢が静的であれば上記URLを参考にすれば作れる自信があるのですが、動的なものであまり自信がありません。。。 以下実際に作ったコードです。 (PHPで2つ目のセレクトボックスには3日後の日付が表示されるようにしています。) ---------------------------------------------------------- //日付 for($a = 0; $a < 14; $a++) { $timestamp[] = strtotime("+$a day"); } $day_set = array( "0"=>"▲日付を選んで下さい", "1"=>date( 'Y/m/d', $timestamp[0] ) , "2"=>date( 'Y/m/d', $timestamp[1] ) , "3"=>date( 'Y/m/d', $timestamp[2] ) , "4"=>date( 'Y/m/d', $timestamp[3] ) , "5"=>date( 'Y/m/d', $timestamp[4] ) , "6"=>date( 'Y/m/d', $timestamp[5] ) , "7"=>date( 'Y/m/d', $timestamp[6] ) , "8"=>date( 'Y/m/d', $timestamp[7] ) , "9"=>date( 'Y/m/d', $timestamp[8] ) , "10"=>date( 'Y/m/d', $timestamp[9] ) , "11"=>date( 'Y/m/d', $timestamp[10] ) , "12"=>date( 'Y/m/d', $timestamp[11] ) , "13"=>date( 'Y/m/d', $timestamp[12] ) , "14"=>date( 'Y/m/d', $timestamp[13] ) ); //お渡し日付セット for($a = 3; $a < 17; $a++) { $timestamp2[] = strtotime("+$a day"); } $day2_set = array( "0"=>"▲日付を選んで下さい", "1"=>date( 'Y/m/d', $timestamp2[0] ) , "2"=>date( 'Y/m/d', $timestamp2[1] ) , "3"=>date( 'Y/m/d', $timestamp2[2] ) , "4"=>date( 'Y/m/d', $timestamp2[3] ) , "5"=>date( 'Y/m/d', $timestamp2[4] ) , "6"=>date( 'Y/m/d', $timestamp2[5] ) , "7"=>date( 'Y/m/d', $timestamp2[6] ) , "8"=>date( 'Y/m/d', $timestamp2[7] ) , "9"=>date( 'Y/m/d', $timestamp2[8] ) , "10"=>date( 'Y/m/d', $timestamp2[9] ) , "11"=>date( 'Y/m/d', $timestamp2[10] ) , "12"=>date( 'Y/m/d', $timestamp2[11] ) , "13"=>date( 'Y/m/d', $timestamp2[12] ) , "14"=>date( 'Y/m/d', $timestamp2[13] ) ); <select name="day" style="margin-right: 50px"> <?php foreach ($day_set as $key => $value): ?> <option value="<?php echo $value; ?>"><?php echo $value; ?></option> <?php endforeach; ?> </select> <select name="day2" style="margin-right: 50px"> <?php foreach ($day2_set as $key => $value): ?> <option value="<?php echo $value; ?>"><?php echo $value; ?></option> <?php endforeach; ?> </select>

  • プルダウン 値保持 onchange

    失礼します、現在年月のプルダウンを作成しており プルダウン自体は年月の作成ができなのですが再読み込みした際に プルダウンに選択した値を保持して欲しいです。 現在リダイレクト先を自身にしております。また、onChangeでプルダウンをした際に読み込むようにしています。 ご教授頂きたいです。宜しくお願い致します。 htmlに埋め込んでいるので読みにくいかと思いますがご了承ください <form action="<?php $self ?>" method="POST"> <select name = "year" onChange="javascript:submit()"> <?php for ($y = 2000; $y < date(Y)+1; $y++) :?> <?php if($s == 0) : ?> <option value="<?php echo $y ?>">選択してください</option>; <?php ++$s ?> <?php endif; ?> <option value="<?php echo $y ?>"><?php echo $y ?></option> <?php endfor; ?> </select> <?php $a = array('1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'); ?> <select name = "month" onChange="javascript:submit()"> <?php foreach ($a as $key => $value) :?> <?php $b = $key + 1 ?> <?php if($h == 0) : ?> <option value="<?php echo $y ?>">選択してください</option> <?php ++$h ?> <?php endif; ?> <option value="<?php echo $b ?>"><?php echo $value ?></option> <?php endforeach; ?> </select> </form>

    • ベストアンサー
    • PHP
  • コンストラクタで参照渡しをする理由

    すでに質問済みの内容でしたら申し訳ありません。 php4を使用していまして、 HTML_QuickFormとSmartyを最近使い始めました。 ネットや書籍のサンプルコードを見ながら使用しているのですが、 $renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty); 上記のような場合や フォームのコンストラクタ呼び出しの場合に =&を使用している意味が理解できません。 ・=&はオブジェクトの参照渡しという認識で合っていますでしょうか? ・参照渡しであった場合、実態を渡すのでなく参照で渡すべき理由とは何でしょうか? ご教授願えれば幸いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう