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

下記サンプルで、

ソース
http://www.okushin.co.jp/information/tanuki03/in …
画面
http://www.okushin.co.jp/information/tanuki03/ta …

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を返してきます

たぶん、些細な問題でしょうが・・よろしくお願い致します。

A 回答 (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, "");

} else {
// 入力が不正な時は「戻る」ボタンのみを表示
$buttons[] = &HTML_QuickForm::createElement ("submit","RETURN_CONF", "戻る");
$form->addGroup($buttons, "BTNG", null, "");
}
// 入力内容を凍結
$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, "");
}

$renderer = new HTML_QuickForm_Renderer_ArraySmarty($smarty);
$form->accept ($renderer);
$smarty->assign ("form", $renderer->toArray());

$smarty->display(basename($_SERVER["SCRIPT_NAME"],".php").".tpl");
?>
    • good
    • 0
この回答へのお礼

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

ありがとうございました。

お礼日時:2006/09/22 12:24

こんにちは、上記サイトは自分も参考にしましたが、


ちょっと分かりづらいのが難点。。。

$form = new HTML_QuickForm("Form");だったら
$val = $form->exportValues();

で連想配列で、値が格納されますので、
ラジオボタンの場合は、$val['rdoAnimal']['rdoAnimal']

のような感じで、格納されます、
textのなどの場合は、$val['text']

のように、格納されますので、後はprint_r($val)で
確認してみて下さい。

この回答への補足

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, '', '', 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();
?>

補足日時:2006/09/22 09:48
    • good
    • 0
    • good
    • 0
この回答へのお礼

inu2さん、ありがとうございました。

確かにサンプルではprint_rで出力されていました。
array(3) {
 ["iradYesNo"]=>
 string(1) "Y"
 ["name"]=>
  :
  :

みたいなやつって、print_rの結果だったのですね。
ありがとうございました。

お礼日時:2006/09/22 09:44

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