0

データを取得するための次の Smarty コードがあります。

$sel=mysql_query("select id, name from form");
$smarty->assign('contact', mysql_fetch_row($sel));
$smarty->display('testfunction.tpl');

私のテンプレートファイル:

<ul>
    {foreach from=$contact item=foo}
        <li>{$foo}</li>
    {/foreach}
</ul>

これは以下を出力します:

 1
 a

しかし、出力を次のようにしたい:

1:a
2:b
4

1 に答える 1

1

を使用するmysql_fetch_rowと、まさにそのとおりに実行されます。行をフェッチしますが、複数の行はフェッチしません。私の推測では、結果セットは次のようになります (間違っている場合は、質問で明確にしてください)。

id  | name
----+------------
 1  | a
 2  | b

これを回避する方法は、次のように Smarty で分解できる配列を構築することです。

/* PHP code */
$your_array = array();

$sel=mysql_query("select id, name from form");
while($row=mysql_fetch_array($sel)) {
   $your_array[] = $row;
}

$smarty->assign('contact', $your_array);
$smarty->display('testfunction.tpl');

これで、基本的に次のような配列が Smarty に作成されました。

[1] => (
     [0] => 1, 
     [1] => a
),

[2] => (
     [0] => 2, 
     [1] => b
)

これは、説明したように表示できます。

{* Smarty Code *}
<ul>
    {foreach from=$contact item=foo}
        <li>{$foo[0]}: {$foo[1]}</li>
    {/foreach}
</ul>

私はそれを試していませんが、それは仕事をするはずです。正しくない場合は{debug}、テンプレートで a を使用して、配列がどのように$contact形成されるかを確認してください。

別のアドバイス:

ここで使用している PHP mysql コネクタは非推奨です。この拡張機能は使用しないことを強くお勧めします。代わりに、MySQLiまたはPDO_MySQL拡張機能を使用する必要があります。

于 2012-08-12T17:51:06.427 に答える