• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Smartyのセレクトボックスが書けない;;)

Smartyを使ったセレクトボックスの書き方

このQ&Aのポイント
  • Smartyを初めて使う際にセレクトボックスの書き方に困っています。どのように書けば良いのでしょうか?
  • 質問者はSqlite3を使用しており、カテゴリーというセレクトボックスにidとcategoryの値をforeachで回して入れたいと考えています。
  • Smartyを使わずに他の部分は作成できているが、foreachの使い方がよくわからないため、ソースコードの詳しい説明が欲しいとのことです。

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

  • ベストアンサー
  • ka-kichi
  • ベストアンサー率59% (22/37)
回答No.1

簡潔にソースだけ記載します。 PHPからhogeという名前でidとcatの配列を受け取ったものとします。 $hoge = array( "1" => "cat1", "2" => "cat2", "3" => "cat3" ); $smarty->assign("hoge",$hoge); ここまでPHP 以下Smarty <form action="./" method="post"> <select> {foreach from=$hoge key=id item=cat} <option value="{$id}">{$cat}</option> {/foreach} </select> </form> 参考になれば幸いです。

noname#102618
質問者

補足

回答ありがとうございます。 ヒントにほぼセットできました。 ただ、ひとつ問題が・・・。 セレクトボックスに同じ値が2つセットされるんです。 経営 経営 という具合に・・・。 index.php $stmt = $pdo->prepare('SELECT * FROM ' . DATABASE_TABLE_CATEGORY); $flag = $stmt->execute(); if (!$flag) { db_error($stmt->errorInfo()); } while ($data = $stmt->fetch(PDO::FETCH_ASSOC)) { $smarty->assign('cats', array( 'no' => $data[no], 'cat' => $data[category] )); } admin_form.tpl <select name="cat"> <option value="">選択してください</option> <!--{foreach from=$cats|smarty:nodefaults key=no item='cat'}--> <option value="{$cats.no}">{$cats.cat}</option> <!--{/foreach}--> </select>

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Smartyで、セレクトボックスが選択された時に

    いつもお世話になっています。 Smartyに関して質問します。 以下のようなtemplateがあった場合に、 <html> <head><title></title> </head> <body> <selection name="hobby"> <option name="hobby[]" value="0" >スポーツ</option> <option name="hobby[]" value="1">卓球</option> </selection> <div id ="hobby_details">ここに、選択された値により表示する内容を変える </div> </body> </html> セレクトが選択されたら、それをキーにdbに接続して値をとってき、 再度<div></div>内部に値を表示することはできないのでしょうか? その場合として、pluginクラスを作って表示することはできないのでしょうか? したいのが、セレクトボックスが選択されたときに、<div></div>内に値を表示したいのです。 宜しくお願いします。

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

    smartyを勉強中です。 市販本のサンプルアプリは、うまく実行できました。 環境は、windows /php-5 / smarty-2.6.17 サンプルを真似して、少し修正して、実行すると、下記エラーが出ます。 Fatal error: Smarty error: [in fra_disp.tpl line 13]: syntax error: unrecognized tag: frag.rec_ctl (Smarty_Compiler.class.php, line 446) ソースをじっくり見てますが、サンプルと何が違うか分かりません。こんな質問で申し訳ありませんが、何かヒントいただけませんか。 ちなみに、呼び元pgでは、 $o_smarty->assign("frags",$data); $o_smarty->display("fra_disp.tpl"); また、テンプレートでは、 {foreach from=$frags item="frag"} <tr> <td>{frag.rec_ctl}</td> とコーディングしてます。

    • ベストアンサー
    • PHP
  • 連動させたいセレクトボックスについて。

    こんにちは。DB+PHPが初心者のものです。 前にもここで質問させていただきましたが、 自分なりにコードを書いてみたので コードの訂正、ご教授をよろしくお願いいたします。 セレクトボックス1には、[table 1]の、種類が入り れレクトボックス2には、[table 1]の種類に連動して、[table 2]の名前が選択できるようにする。 下記のようにソースを書いてみましたが、 table1の値は、セレクトボックスでちゃんと表示されますが、table2はセレクトボックスは表示されるものの、何も値がありません(T_T) 動きとしては、table1のセレクトボックスで選択したら、その項目をDBへ問い合わせ、その項目に対応した、DBに登録されているtable2の値を二つ目のセレクトボックスに表示させたいです。 <html> <body> <select name="mkoumoku"> <option selected>-------------</option> <?php //DB接続 $dbcon=mysql_connect("localhost","abcd","defg"); //DB選択 mysql_select_db("zozozo"); //table1を取得 $res=mysql_query("select distinct * from table1"); while ($rows=mysql_fetch_array($res)) { echo "<option value=\"".$rows['id']."\">".$rows['kind']."\n"; } echo "</select>"; ?> <select name="skoumoku"> <option selected>-------------</option> <? //table1に連動して項目を変えたいところのコード $res1=mysql_query("select * from table2 where key =$_POST[mkoumoku] order by id"); while ($rows=mysql_fetch_array($res1)) { echo "<option value=\"".$rows['id']."\">".$rows['name']."\n"; } //Dbクローズ mysql_close($dbcon); ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPとSmartyを使い、データベースからのデータを表示したい。

    PHP・Smartyを使い、DBからの表示を行おうとしています。 基本的な作業だとは思うのですが、なかなかできないので、教えてください。 ソースコードです。 //////PHPのコード <?php require_once('Connections/dbconn_mylocal.php'); ?>//DBへの接続を行っている。ここは正常。 <?php $sql = 'SELECT * FROM c_movie'; $result = mysql_query($sql, $conn); while($row = mysql_fetch_array ($result)){ $movie = $row["movie_title"]; } $smarty->assign('movie', $movie); $smarty->display("test1120.tpl"); ?> /////////////////tplファイル <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Smartyで表示する</title> </head> <body> ({foreach item='con' from=$movie}) ({$con}) ({/foreach}) </body> </html> よろしくお願いします!

    • ベストアンサー
    • PHP
  • javascriptでのセレクトボックスについて。

    javascriptを使ったセレクトボックスについて教えてください。 教えてgooのカテゴリ選択のように、セレクトボックスでjavascripを使い、 一つめのselectボックスでは ・1 ・2 ・3 のオプションを選択可能に 二つめのselectボックスでは、 1が選択されたら ・1の1 ・1の2 ・1の3 のオプションを選択可能に 2が選択されたら ・2の1 ・2の2 ・2の3 を選択可能に 3が選択されたら ・3の1 ・3の2 ・3の3 を選択可能に と言う風にはどうすれば出来るでしょうか? 教えてください、お願いします。

  • smartyでチェックボックスをチェック済み状態にするには

    先ほどカテゴリ選択ミスでperlに投稿してしまいましたすみません。 こんばんは、PHPでメールフォームを作成していて壁に当たり質問させていただきます。 {{html_checkboxes name="checked" selected=$smarty.session.checked options=$checked_value}} 入力フォームのtplにて上記のようにしてチェックボックスを配置しています。 このチェックボックスに最初からチェックを入れておくことはできませんか? メールフォーム自体は出来ているのですが、このチェックボックスをチェック済みにすることが出来ずに困っています。 検索したり書物を調べたのですが掲載されていなく、自己解決ができません。 表示されるチェックボックスは全てチェック済みが初期状態にしておきたいのです。 ご指摘よろしくお願いします。

    • 締切済み
    • PHP
  • Smarty3のリソース・プラグイン

    Smarty3のリソース・プラグインについて Smarty3(3.0.9)でリソース・プラグインを行うと以下エラーが出力され、データベース内のテンプレートを呼び出すことができません。 Uncaught exception 'SmartyException' with message 'Unable to load template db 'test.tpl'' in /usr/local/lib/php/smarty/sysplugins/smarty_internal_template.php:165 Stack trace: #0 /usr/local/lib/php/smarty/sysplugins/smarty_internal_template.php(554): Smarty_Internal_Template->isExisting(true) #1 /usr/local/lib/php/smarty/Smarty.class.php(340): Smarty_Internal_Template->getRenderedTemplate() #2 /usr/local/lib/php/smarty/Smarty.class.php(384): Smarty->fetch('test.tpl', NULL, NULL, NULL, true) #3 /usr/local/apache2/htdocs/test.php(18): Smarty->display('test.tpl') #4 {main} thrown in /usr/local/lib/php/smarty/sysplugins/smarty_internal_template.php on line 165 同様のプログラムでSmarty2*で実行するとうまく表示します。 Smarty3のマニュアル(英語版)を見てもうまくいきません。。 ご存知の方、ぜひ教えてください。 (環境) OS:Debian 6.0.1 WebServer:Apache2.2.19 PHP:PHP5.3.6 MySQL:MySQL5.0.87 (プラグイン) <?php require('DB.php'); define("DB_FILE","mysqli://*****:*****@localhost/*****"); function smarty_resource_db_source ($name, &$source, $o_smarty) { $db = DB::connect(DB_FILE); $stt = $db->prepare("SELECT source FROM templates WHERE name =?"); $rs = $db->execute($stt,array($name)); if(is_null($row=$rs->fetchRow(DB_FETCHMODE_ASSOC))){ return FALSE; }else{ $source=$row["source"]; return TRUE; } } function smarty_resource_db_timestamp($name, &$modified, $o_smarty) { $db = DB::connect(DB_FILE); $stt = $db->prepare("SELECT * FROM templates WHERE name =?"); $rs = $db->execute($stt,array($name)); if(is_null($row=$rs->fetchRow(DB_FETCHMODE_ASSOC))){ return FALSE; }else{ $modified=$row["modified"]; return TRUE; } } function smarty_resource_db_secure($name, $o_smarty) { // 全てのテンプレートがセキュアであると仮定します return true; } function smarty_resource_db_trusted($name, $o_smarty) { // テンプレートから使用しません } ?> (呼び出しファイル) <?php set_include_path('/usr/local/lib/php/smarty/:' . get_include_path()); @include('Smarty.class.php'); $o_smarty = new Smarty(); // Smartyのテンプレートのキャッシュファイル格納先を指定 $o_smarty->compile_dir = "/usr/local/apache2/htdocs/template_c"; $o_smarty->plugins_dir[]="/usr/local/apache2/htdocs/plugin"; $o_smarty->default_resource_type="db"; // phpスクリプトからテンプレートリソースを使用します $o_smarty->display("test.tpl"); ?> (データベース) CREATE TABLE templates ( name VARCHAR(100) NOT NULL default '', modified TIMESTAMP, source TEXT, PRIMARY KEY (name) ) DEFAULT CHARACTER SET utf8; -- Dumping data for table 'templates' INSERT INTO templates VALUES('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');

    • 締切済み
    • PHP
  • セレクトボックスの連動

    セレクトボックスAを切り替えると、他のセレクトボックスがAと同じになるようなものを作りたいのですが、うまくいきません。 ソースは以下の通りです。 function ChangeSelect() { var index = formA.selectA.selectedIndex; for (i=1,i<formB.selectCnt.value,i++) { if (i == index) { FormB.selectB1.options[index].value ); } } } <form name="formA"> <select name="selectA" onchange="javascript:ChangeSelect()"> <option value="りんご">りんご <option value="みかん">みかん <option value="いちご">いちご </select> </form> <form name="formB> <input type="hidden" name="selectCnt" value=***> <select name="selectB1"> <option value="りんご">りんご <option value="みかん">みかん <option value="いちご">いちご </select> </form> 存在するセレクトボックスは全て同じ値が入っています。 formAにはセレクトボックスは1つですが、formBにあるセレクトボックスは0~複数と場合によって異なります。 formBにあるセレクトボックスはselectB1、selectB2、selectB3という感じに最後の数字のみが異なるnameがつくようにしています。 <input type="hidden" name="selectCnt" value=***>のvalueには、ASPで数えたセレクトボックスの数を入れています(セレクトボックスが10個あれば10と入ります) 数が決まっていればFormB.selectB1.options[index].valueを数の分だけ増やせばいいのですが、0の時もあれば10の時もある、という場合にはどういう風に書けばいいのかわかりません。 どのように記述すれば良いのでしょうか。アドバイスお願いします><

  • PHPのみで、動的なセレクトボックスの実現方法 携帯サイト

    PHP5.1.2 smarty html_options利用 携帯サイトにて、1つのセレクトボックスを選択すると、 2つめのセレクトボックスが動的に変わるということを実現したいです。 携帯サイトなので、javascriptは利用不可です。 よくある、都道府県を選択するとその市区町村が出てくる というようなものです。 実現方法について教えてください。 PHPでsubmitしたことにすることはできるのでしょうか?

    • 締切済み
    • PHP
  • php デーやベース内 セレクトボックス

    データベース内のある項目をセレクトボックスにて表示させ、そのセレクトボックスを複数作りたいのですが、最初のセレクトボックスしかデータベース内のものを表示できなく困っています。 ソースは下記の通りになります。 for ($i = 1; $i <= 11; $i++) { $names .= '<select name="name[' .$i. ']">'."\n"; while ($row = mysql_fetch_array($nameResult)) { $memberName = $row['name']; $names .= '<option value="' .$memberName. '">' .$memberName. '</option>'."\n"; } $names .= '</select>'."\n"; } echo $names; 2つめ以降もデータベース内のもの受け取れるようにしたいのですが、宜しくお願いします。 ソースが間違っていましたら、正しいソースも教えていただければと思います。

    • ベストアンサー
    • PHP