• 締切済み

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 { } ?>

noname#65793
noname#65793
  • PHP
  • 回答数3
  • ありがとう数1

みんなの回答

  • TAI_0824
  • ベストアンサー率54% (6/11)
回答No.3

おそらくなのですが、PHPの技術というよりは、HTML_QuickFormの使い方、という問題のような気がします。実は補足していただいたにもかかわらず、内容が汲み取れない状況です。。 すみません、HTML_QuickFormの経験が無いので、明確な回答をすることができません。。。HTML_QuickForm経験者の書き込みを待つしかないようです。 お役に立てず、すみません。

  • TAI_0824
  • ベストアンサー率54% (6/11)
回答No.2

すみません、追加質問について、ちょっとお困りの内容がうまく把握できません。 もう少し実現したい動作などを追記してもらえれば、と。。。

noname#65793
質問者

補足

情報不足で申し訳ございませんでした^^; HTML_QuickFormでフォームを生成します。(ファイル名をcontact.phpとします。) contact.phpに直接アクセスするわけではないので別ページの表示したい箇所にcontact.phpを incluedして読み込むのですがフォームを表示するhtmlは以下のような形で出力されます。 <form action="contact.php" method="post" name="form" id="form"> ~省略~ </form> 一言で言えば<form>~</form>までということです。 smartyと連携しているので表示させる30ページのそれぞれに <input hidden="取得したい値を記述"...> としてもhiddenで値を取得するためにはform間に埋め込まなければ取得できません。 HTML_QuickFormでhiddenの値を設定し埋め込むことはできるのですが30ページとも全てのページで 常に同じ値を取得してしまうので意味がありません。 hiddenで値を取得したいページは30ページなので単純に考えれば contact.phpのhiddenの値だけ変更したファイルを名前を変えて30こ作り取得したい値のphpを読み込めば 済むことなのですがかなりの手間なのでcontact.phpは1つでそれぞれ違う値を読み込むにはなにかいい方法が ないものかと思っております。 自分でも説明が難しくわかりづらくなってしまいましたが宜しくお願いします。

  • TAI_0824
  • ベストアンサー率54% (6/11)
回答No.1

こんばんは。教えてGoo!はまだまだ初心者です。 ソースを拝見しますと、$message のヒヤ文字列のお尻に、チェックボックスの選択肢値をくっつけてますので、お困りの通りに表示されますね。 $value['cb3']は配列になっているので、$value['name']のように値は表示されません。このままでは当然「array」と表示されるので、{$value['cb3']}部分の配列を展開してあげる必要があります。 $message = <<<EOD =============================================================== 【氏名】 {$value['name']} 【選択】 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; } } $message .= <<<EOD =============================================================== EOD; のようにしてあげれば大丈夫と思います。 HTML_QuickFormって初めて聞きましたが、{}とか使うのだと、Smartyと混乱しそうですね。

noname#65793
質問者

お礼

お返事ありがとうございます。 教えていただいた通りで思うように表示できました^^ 私も深くはわからないのですがHTML_QuickFormはpearの一種で間単にフォームを作れるとの程度しか わからないながらもかなり試行錯誤しましたがおかげさまで助かりました! smartyも始めたばかりで勉強中なのですが奥が深いですね~ smarty独自の変数を使いこなせるようになればもっと素晴らしさがわかると思うのですが それまではまだまだ時間が掛かりそうです^^;

noname#65793
質問者

補足

追記でもう1つわからないことがあります。 どこのページから送信されたかを知るためにHTML_QuickFormで生成するフォームのプログラム(contact.php)に {$value['page']}{$_SERVER['HTTP_REFERER']} としているのですがマニュアルなどを見ると完全な情報ではないために 別に<input hidden="hoge"・・・>を加えることを推薦されるようなのですがこれはやはり必須でしょうか? テストで何回か送信しているのですが送信されたurlを取得できているので微妙に疑問です。 contact.phpをincluedして表示させる構成にしようと思っているのですが、フォームを表示させたいページが 30ページ有り各ページにhiddenを入れてそれぞれの値を取得したいのですがフォーム表示用のphpは 1つで済ませたいのでどのような方法であればフォーム用のphpは1つで各ページのhiddenを取得し 表示できるかに悩んでおります。 【例】 1.php←hidden値:あいうえお 2.php←hidden値:あかさたな 3.php←hidden値:はまやらわ (各ページのhiddenの値は統一性や連番表示はありません) contact.phpにhiddenを入れれば値は取得できるのですが30ページとも同じ値を取得してしまうので 意味がありません。 お礼の後で申し訳ないのですがなにかアドバイスなど頂けますと幸いです。

関連するQ&A

  • HTML_QuickFormのAdvCheckBox にデフォルトでチェックを入れるには

    HTML_QuickFormのAdvCheckBoxにデフォルトでチェックを入れたいのですが、 $form->addElement('advcheckbox', 'c1', '', 'Check1', NULL, array("f", "t")); $form->addElement('advcheckbox', 'c2', '', 'Check2', NULL, array("f", "t")); $form->addElement('advcheckbox', 'c3', '', 'Check3', NULL, array("f", "t")); $form->setDefaults(array('c2'=>'checked')); 上記のようにやってみたのですが Check2 にチェックを入れることは出来ませんでした。通常のcheckboxでは下記のようにやってチェックを入れることができました。 $form->addElement('checkbox', 'c1', '', 'Check1'); $form->addElement('checkbox', 'c2', '', 'Check2'); $form->addElement('checkbox', 'c3', '', 'Check3'); $form->setDefaults(array('c2'=>'checked')); AdvCheckboxは方法が違うのでしょうか?

    • ベストアンサー
    • 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
  • 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
  • 動的に作ったチェックボックスが選択できません!!

    こんにちは 閲覧ありがとうございます。 タイトルの通り、HTMLのcheckboxをjQuery/javascriptで動的に作ったのですが、動かなくて困っています。 単純に一つ一つcreateElement()で作った場合は大丈夫なのですが、作りたいものが入れ子になった状態です。 まず、作りたいものをHTMLで書くと以下になります。 <div class="input-checkbox"> <span class="kintoneplugin-input-checkbox-item"> <input type="checkbox" name="checkbox" value="value*****" id="id*****"> <label for="id*****">チェックボックス1</label> </span> </div> そして、次にこの形を動的に作ろうとしたものが以下です。 上のHTMLの<div class="input-checkbox">はあるという前提で、その子に動的に作った要素を入れようとしています。 arrayとあるのは、この内容をfor文で回すためです。 //1.span要素作成 var checkSpan = document.createElement('span'); checkSpan.className = "input-checkbox-item"; //2.checkbox作成 var viewCheckBox = document.createElement('input'); viewCheckBox.type = "checkbox"; viewCheckBox.name = "checkbox"; viewCheckBox.id = array2[k]; viewCheckBox.value = array2[k]; viewCheckBox.disabled=""; //3.ラベル作成 var viewLabel = document.createElement("label"); viewLabel.for = array2[k]; viewLabel.id = "label_"+k; viewLabel.innerHTML = array[k]; 4.//追加 $('.input-checkbox').append($(checkSpan).append(viewCheckBox).append(viewLabel)); 上記の内容で実行すると、チェックボックスとそのラベルは表示されるのですが、チェックボックスが編集不可というか、、チェックできないのです。 disabledの指定などもしてみたのですが、うまくいきませんでした。 どうやったらチェックをできるようになるでしょうか>< プログラミング初心者なので、変なところとかがあったらすいません。。。 よろしくお願いします!!

  • チェックボックスの戻り

    チェックボックスのvalue値に数字を入れてPOSTしています。 DB登録の前にその値を足し算してDBに登録しています。 <input type="checkbox" name="cb[0]" value="1"> <input type="checkbox" name="cb[1]" value="2"> <input type="checkbox" name="cb[2]" value="4"> <input type="checkbox" name="cb[3]" value="8"> <input type="checkbox" name="cb[4]" value="16"> ・・・のようにしています。DBの値を読み取ってcheckedを付ける際はどのようにしたら効率よく処理できるでしょうか?switchを使うとすごくチェックボックスの数が増えると厄介です。困っています。教えてください。

    • ベストアンサー
    • 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
  • 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
  • チェックボックスの値取得後の加工について

    下記のJavaScriptをどうように修正をすれば良いか、 ご教授いただければと思い投稿させて頂きました。 どうぞよろしくお願い申し上げます。 出力ボタンをクリックすると現状では下記のようになります。 【現状】 ------------------------------------------------------ アンケート結果  →回答1  →回答2 希望としては取得した値を下記のように加工をして出力したいと思います。 【希望】 ------------------------------------------------------ アンケート結果  →回答1、回答2 【ソース】 ------------------------------------------------------ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN Frameset" "http://www.w3.org/TR/html4/frameset.dtd"> <html> <head> <script> function textoutput(formObj) { var checkbox01 = formObj.elements["C01"]; var text = 'アンケート結果' + '\n'; for ( var i = 0; i < checkbox01.length; i ++ ) { if ( checkbox01[i].checked === true ) { text += checkbox01[i].value; text += '\n'; } } formObj.elements["output"].value=text; } </script> </head> <body> <form name="form01"> <strong>・回答結果</strong><br> <table border="0"> <td colspan="2" valign="middle" width="560"> <input type="checkbox" name="C01" value=" →回答1" id="checkbox1-1"> <label for="checkbox1-1">回答1</label> <input type="checkbox" name="C01" value=" →回答2" id="checkbox1-2"> <label for="checkbox1-2">回答2</label> </td> <table> 結果出力<br> <input type="button" value="ログ出力" onClick="textoutput(this.form);"><br> <textarea name="output" id="output" cols="60" rows="10"></textarea><br> </form> </body> </html>

  • form で、チェックボックスにまとめてチェック

    データベースから、データを持ってきて、複数のグループに分けてまとめてチェックを入れようとしています。 複数のチェックボックスがある場合はいいのですが、チェックボックスが一つしかない場合に チェックが入りません。 どの様に変更すれば、一つでもチェックが入るようになるでしょうか? 以下の様なサンプルコードを見ながら、作成しています。 function AllChecked1(){ var check = document.form.a1.checked; for (var i=0; i<document.form.elements['aa1[]'].length; i++){ document.form.elements['aa1[]'][i].checked = check; } } <form name="form" method="POST" action="select1.php"> <input type="checkbox" name="a1" id="a1" onClick="AllChecked1();" /><label for="a1"> group1 全選択</label> <input type="checkbox" name="aa1[]" id="aa11" value="1" /><label for="aa11">名前1</label><br /> </form> よろしくお願いいたします。

  • チェックボックスでのvalue値のスペースについて

    HTMLのformからチェックボックスで選択された値をCGIに飛ばしデータファイル(cgiファイル)に保存したいのですが、 チェックボックスのvalueを複数選択するとvalue値の間にスペースが入ってしまいます。 正確にはデータファイルをterapadで開こうとすると、 「NULL文字を含むファイルです。NULL文字は半角スペースへ変換しました。」というアラートがでてvalue値の間に半角スペースが入ってしまいます。 <チェックボックスのHTML> <input type="checkbox" name="■" value="jpn" />日本 <input type="checkbox" name="■" value="usa" />米国 ■にはデータを保存する項目の番号が入っており、一つのチェックボックスでは同じ番号が入ります。 例えば■が1なら1番に保存されます。 日本と米国を選択し送信するとデータファイル上では「jpn usa」となってしまいます。 NULL文字とはデータの値がない場合に返される値だという認識なのですが、全てのチェックボックスを選択していれば、 「jpnusa」という形で送信されるものではないのでしょうか? データを送信する際、このNULL文字による半角スペースをなくしたいのですが、何か方法はありますでしょうか? やはりCGIファイルを編集しなければ不可能なのでしょうか? ご教授よろしくお願いします。

    • ベストアンサー
    • CGI