アプリ版:「スタンプのみでお礼する」機能のリリースについて

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 {

}
?>

A 回答 (3件)

おそらくなのですが、PHPの技術というよりは、HTML_QuickFormの使い方、という問題のような気がします。

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

すみません、追加質問について、ちょっとお困りの内容がうまく把握できません。


もう少し実現したい動作などを追記してもらえれば、と。。。

この回答への補足

情報不足で申し訳ございませんでした^^;
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つでそれぞれ違う値を読み込むにはなにかいい方法が
ないものかと思っております。

自分でも説明が難しくわかりづらくなってしまいましたが宜しくお願いします。

補足日時:2008/02/27 21:46
    • good
    • 0

こんばんは。

教えて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と混乱しそうですね。

この回答への補足

追記でもう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ページとも同じ値を取得してしまうので
意味がありません。

お礼の後で申し訳ないのですがなにかアドバイスなど頂けますと幸いです。

補足日時:2008/02/25 17:59
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
教えていただいた通りで思うように表示できました^^

私も深くはわからないのですがHTML_QuickFormはpearの一種で間単にフォームを作れるとの程度しか
わからないながらもかなり試行錯誤しましたがおかげさまで助かりました!

smartyも始めたばかりで勉強中なのですが奥が深いですね~
smarty独自の変数を使いこなせるようになればもっと素晴らしさがわかると思うのですが
それまではまだまだ時間が掛かりそうです^^;

お礼日時:2008/02/25 17:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!