Smartyで配列を使用する方法

このQ&Aのポイント
  • Smartyで配列を使用する方法について教えてください。
  • Smartyのフォームで繰り返し同じ名前の要素を使うためには配列を使用することができます。
  • 配列を使って複数の名前や年齢などの情報を管理することができます。
回答を見る
  • ベストアンサー

Smartyで作ったフォームで配列を使用する

先月からPHPを勉強し始めた初心者です。 質問文で分からないことも多くあるかとは思いますが、補足をするのでご指摘ください。 Smartyのサンプルプログラムを流用しながら、フォームを作成しています。 フォームで繰り返し同じ名前の要素を使いたかったため、配列を使いたいと思っています。 (イメージとしては、複数人の名前・年齢といった情報をName[],Age[]という配列にしたいです。) PHPのページで確認するとnameに配列名を入れれば配列として扱えるようです。 http://php.net/manual/ja/faq.html.php#faq.html.arrays これをSmartyで扱おうとしています。 --コントローラー------- $this->form->addElement('text', 'Name', '名前', ['size' => 30]); --テンプレート------- <FONT size="2">{$form.Name.label}:</FONT></TD> <TD width="79%"> {if $form.Name.error } <font size="2" color="red">{$form.Name.error}</font><BR> {/if} {$form.Name.html}</TD> --------- 上記のようであれば動作するのですが、単純にNameをName[]とした場合には下記のエラーが出て動作しません。 Fatal error: Cannot use [] for reading in ~ファイル名、行数 良い方法があればご教授お願いいたします。 分かりにくい質問で申し訳ないです。

  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

試したわけではないですが、参考URLにそれらしき回答がありそうです。確認してみてください。 (違ったらすみません)

参考URL:
http://www.smarty.net/docsv2/ja/language.function.html.checkboxes.tpl

関連するQ&A

  • Smarty 三次元配列を使いたい

    最近Smartyを使い始めた者です。 以下のような多次元配列を、$smarty->assign('data', $data); します。 $data = array( [0] => array( [id] => 23 [comment] => 'aaa' [name] = array( [0] => 'xxx' [1] => 'yyy' )) [1] => array( [id] => 24 [comment] => 'bbb' [name] = array( [0] => 'zzz' )) [2] => array( [id] => 25 [comment] => 'ccc' [name] = array( [0] => 'ttt' [1] => 'uuu' )) ) そして、以下のようなテーブルを表示させたいのです。 |-------------------| | 23  | aaaa | xxxx | |    |     |------| |    |     | yyyy | |-------------------| | 24  | bbbb | zzzz | |-------------------| | 25  | cccc | tttt | |    |     |------| |    |     | uuuu | |-------------------| <td>タグのrowspan属性を使おうと思っています。 {foreach}をつかって、以下のようなものを書きましたが、駄目でした。 {foreach from=$data item=value01 name=kiji} <tr> <td rowspan="{$value01.numgoods}">{$value01.id}</td> <td rowspan="{$value01.numgoods}">{$value01.comment}</td> {foreach from=$value01 item=value02 name=goods} {if $smarty.foreach.goods.first} <td>{$value02.name.0]</td></tr> {else} <tr> <td>{$value.name.1}</td> </tr> {/if} {/foreach} {/foreach} エラー表示は、 syntax error: unrecognized tag: $value02.name.0 です 本当は、$value02.name の.0を三次元での要素数分だけ自動でループしてほしいのですが、その書き方がわかりません。 ネットをあさっても、これと言うサイトを見つけれません。 そもそも、三次元目の要素を取得するsmartyの方法がわかりません。 どなたかご教授の程、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • smartyについて

    smartyについて 環境は、windows /php-5 / smarty-2.6.17です。 以下の2つエラーが出てどう対処すればいいか困っています。 【1つめ】 Fatal error: Smarty error: [in **.tpl line 10]: syntax error: unrecognized tag: 文--> 【2つめ】 {$errmsg (Smarty_Compiler.class.php, line 446) in C:\xampp\php\PEAR\Smarty\libs\Smarty.class.php on line 1095 【ソース】 呼び先PGは、 $this->smarty->assign("errmsg","ニックネーム"); $this->smarty->display("**.tpl"); テンプレートでは、 <tr id="" class=""> <td id="" class=""><font color="#ff0000">{$errmsg}を入力してください。</font></td> </tr> よろしくお願いいたします。

    • 締切済み
    • PHP
  • php メールフォーム エラー表示方法

    現在メールフォームの作成にて困っていることがあります。 form.php <?php //エラー表示設定 if(isset($_SESSION['error'])) { foreach ($_SESSION['error'] as $value) { print ' <span style="color:#FF0000; font-size:13px;">' . h($value) . '</span><br />' . "\n"; } } ?> <!--FORMタグここから--> <form method="post" action="confirm.php"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td><label for="name">名前</label><span class="indispensable_color">*</span></td> <td><input type="text" size="50" name="name" id="name" value="<?php print h(@$_SESSION['name']); ?>" /></td> <td>例:goo 太郎</td> </tr> <tr> <td><label for="kana">フリガナ</label><span class="indispensable_color">*</span></td> <td><input type="text" size="50" name="kana" id="kana" value="<?php print h(@$_SESSION['kana']); ?>" /></td> <td>例:グー タロウ</td> </tr> </table> </form> confirm.php // 名前欄をチェックします。 if (trim($name) == '') { $error[] = 'お名前は必須項目です。'; } else if (mb_strlen($name) > 100) { $error[] = 'お名前は100文字以内でお願い致します。'; } // フリガナ欄をチェック if (trim($kana) == '') { $error[] = 'フリガナは必須項目です。'; } // エラー数を確認します。 if(count($error) > 0) { // エラーがある場合は、入力フォームに戻る $dirname = dirname($_SERVER['SCRIPT_NAME']); $dirname = $dirname == DIRECTORY_SEPARATOR ? '' : $dirname; $uri = 'http://' . $_SERVER['SERVER_NAME'] . $dirname . '/form.php'; header('HTTP/1.1 303 See Other'); header('Location: ' . $uri); // 確認画面を表示します。 } else { と記載しています。 これですと、エラーがあった場合の表示はtableの上にまとめて表示されます。 まとめて表示されるのではなく個別に表示されるにはどうしたらよろしいでしょうか? 例→名前の項目のテキストボックスの下に「お名前は必須項目です。」   カナの項目のテキストボックスの下に「カナは必須項目です。」 と表示されるようにしたい。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • PHP(smarty)についての質問(文字化け)

    あるサイトでsmartyを勉強中ですが、そのサンプルファイルを実行したところ、 文字化けが発生して困っています。 ・form.php←お問い合わせ用テンプレートファイルの指定 ・form.tpl←お問い合わせ情報を入力させるテンプレートファイル ・template.tpl←テンプレートファイルを表示させるテンプレートファイル form.phpから、お客様情報を入力させるためのテンプレートファイル(form.tpl)を指定し、 template.tplにそれを表示させるのが処理概要です。 実行すると、タイトルの"問い合わせフォーム"は表示されますが、 それ以下のform.tplの日本語部分が文字化けします。 template.tplで{include file=$content_tpl params=$params}の処理で form.tplを取り込んでいますが、その時文字コードがおかしくなっている気がします。 form.tplに対して文字コード(UTF-8)が有効になっていないと思われます。 実験的に、{include file=$content_tpl params=$params}を削除して、 そこにform.tplの記載をすべて記述すると文字化けは起こりませんでした。 文字コードの指定をform.tplに対しても有効にするにはどのように修正すればよろしいでしょうか。 以下にソースファイルを記載します。 ★form.php <?php // 共通の設定を読み込む require_once( 'common.php' ); // Smartyオブジェクト取得 $smarty =& getSmartyObj(); // ひな形のSmartyテンプレートでincludeするテンプレートを指定 $smarty->assign( 'content_tpl', 'form.tpl' ); // パラメータを渡す $smarty->assign( 'params', array( 'types' => array( 'request' => '意見、要望', 'question' => '質問、問い合わせ', 'other' => 'その他' ) ) ); // ページを表示する $smarty->display( 'template.tpl' ); ?> ★form.tpl <p>お問い合わせやご意見・ご要望を以下のフォームにご記入の上ご送信ください。</p> <form method="post" action="post.php"> <dl> <dt>お名前</dt> <dd> <input type="text" name="name" value="{$params.name|escape:'html':'UTF-8'}" /> {if $params.errors.name} <p class="error-message">名前を入力してください。</p> {/if} </dd> <dt>メールアドレス</dt> <dd> <input type="text" name="address" value="{$params.address|escape:'html':'UTF-8'}" /> {if $params.errors.address} <p class="error-message">アドレスが不正です。</p> {/if} </dd> <dt>お問い合わせ種類</dt> <dd> {html_options name="type" options=$params.types selected=$params.type} {if $params.errors.type} <p class="error-message">お問い合わせ種類が不正です。</p> {/if} </dd> <dt>お問い合わせ件名</dt> <dd> <input type="text" name="title" value="{$params.title|escape:'html':'UTF-8'}" /> {if $params.errors.title} <p class="error-message">件名を入力してください。</p> {/if} </dd> <dt>お問い合わせ内容</dt> <dd> <textarea name="content" cols="60" rows="5"> {$params.content|escape:'html':'UTF-8'} </textarea> {if $params.errors.content} <p class="error-message">お問い合わせ内容を入力してください。</p> {/if} </dd> </dl> <input type="submit" value="送信する" /> </form> ★template.tpl <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>問い合わせフォーム</title> <style type="text/css"> {literal} .error-message{ margin:5px; font-size:80%; color:red; } {/literal} </style> </head> <body> <h1>問い合わせフォーム</h1> {include file=$content_tpl params=$params} </body> </html> ★common.php <?php define( 'SMARTY_DIR', 'C:/xampp\php/smarty/libs/' ); require_once( SMARTY_DIR .'Smarty.class.php' ); // Smartyオブジェクト取得 function & getSmartyObj() { static $smarty = null; if( is_null( $smarty ) ){ $smarty = new Smarty(); $smarty->template_dir = 'C:/xampp/php/smarty/templates/'; $smarty->compile_dir = 'C:/xampp/php/smarty/templates_c/'; $smarty->config_dir = 'C:/xampp/php/smarty/configs/'; $smarty->cache_dir = 'C:/xampp/php/smarty/cache/'; } return $smarty; } ?>

    • ベストアンサー
    • 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
  • Servletへフォームから配列を送信できますか?

    PHPでは、下記のようにHTMLを記述することで、 フォーム内容を配列で送信及び取得できるのですが、 Servletで同じ事をするにはどうすれば良いでしょうか? <HTML><title>一括更新</title><BODY> <form action=./test.php method=post> <table> <tr><td> <input type=input name=a[0] value="1"> <input type=input name=b[0] value="2"> </td></tr> <tr><td> <input type=input name=a[1] value="1"> <input type=input name=b[1] value="2"> </td></tr> </table> <input type="submit" value="更新"> </form></BODY></HTML>

  • [PHP初心者] フォームのエラーチェック

    PHPやデータベースに全く疎い者です。 皆様にご指導頂きたく投稿致します。質問内容もレベルが低いですがどうが宜しくお願いします。 メールフォームにてフォームのボタンを押下し、 エラーチェックをして、エラー項目を同一画面上の上の辺りに表示させたいのですが、、参考書を読んだり、過去スレを拝見しても、どうもわかりません。 <body> //↓この辺をどう書けばいいのか、さっぱりなんです。 <?php if(isset($_POST['mailform'])) { if($_POST['name'] == "") { echo("名前を入力して下さい。<br>"); }} ?> //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ <form method="POST" action="kakunin.php"> <table border="0" cellpadding="5"> <tr> <td colspan="2"></td> </tr> <tr> <td>名前</td> <td><input type="text" name="name" size="20"></td> </tr> <tr> <td>メールアドレス</td> <td><input name="mail" type="text" id="mail" size="20"></td> </tr> <tr> <td>項目</td> <td>     <input type="checkbox" name="check[]" value="PHP">PHP <input type="checkbox" name="check[]" value="Perl">Perl <input type="checkbox" name="check[]" value="ASP">ASP <input type="checkbox" name="check[]" value="JSP">JSP</td> </tr> <tr> <td>お問い合わせ内容</td> <td><textarea rows="5" name="naiyou" cols="40"></textarea></td> </tr> <tr> <td colspan="2"><input name="mailform" type="submit" id="mailform" value="::入力内容を確認::">  <input type="reset" name="Submit" value="リセット"></td> </tr> </table> </form> </body>

    • 締切済み
    • PHP
  • <?php ?>内にてformを使用して$POSTに値を送る

    ※PHP初心者なのでお手柔らかにお願いします。 現在PHPを使用して掲示板を作成しているのですが、 掲示板の書き込みフォームの作成で詰まっています。 下記ソースを実行してもテーブルが表示されません。 テーブルのみ表示を試してみたらうまくいったので、 inputタグがおかしいのではと思いますが何が NGなのかよく分かりません。 誰か教えてください。 <?php $Temp = '<div align="center">       <form action="bbs_input.php" method="POST">       <table border="0" width="100%">         <tr>           <td width="20%" align="right" bgcolor="E0FFFF">             <b><font size="2" color="#696969">お名前(HN)               </font></b>           </td>           <td>             <input type="text" name="NAME" size="30"             maxlength="20" value="<?=$_POST['NAME'] ?>">           </td>         </tr>      </table>      </form>      </div>'; print ($Temp); ?>

    • ベストアンサー
    • PHP
  • smartyでtplファイルでの2次元配列

    お世話になります。 smartyでtplファイル内で2次元配列を書きたいのですがどのようにアクセスしたらいいでしょう? foreachを入れ子にして使いたいのですが なかなかうまくいきません。 *このように使いたいのです PHP側 $txtA_ary[$page][$page_count]//こんな感じに各値が入る $form->addElement('text','txtA',$txtA_ary); tpl側 {foreach key=a_key item=a_item from=$form.txtA.label} {foreach key=b_key item=a_item from=$form.txtA.label.a_key} {$form.txtA.label.$a_key.$b_key} {/foreach} {/foreach}

    • ベストアンサー
    • PHP
  • フォームのname値を配列にしてJavaScriptでフォームのチェックをする方法

    JavaScriptでフォームの半角数字のチェックをしたいのですが、 form内容をCGI(PHP)に渡すためname値を配列にしないといけないのですが、 以下のスクリプトだとエラーが出てしまいます。 *実際はif(isNaN~)と<input~>をループで書き出しており、行数が不特定なので それぞれ別のname値を使うことができない状態です。 <script language="JavaScript"> function check() { if(isNaN(document.form1.hoge[0].value)){ alert("値は半角数字で入力してください。"); return(false); } if(isNaN(document.form1.hoge[1].value)){ alert("値は半角数字で入力してください。"); return(false); } return(true); } </script> <form method="post" action="xxx.cgi" onSubmit="return check()" name="form1"> <input type="text" name="hoge[0]"> <input type="text" name="hoge[1]"> </form> 特にCGIに渡す必要がなければ <input type="text" name="hoge"> <input type="text" name="hoge"> としてやればチェックができるのですが、どうしても次の 処理があるためname値を配列にする必要があります。 解決方法がわかる方がおられましたらご教授ください。 以上よろしくお願いいたします。