• 締切済み

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

みんなの回答

  • 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