在Smarty中返回数据库值

时间:2012-08-12 10:01:47

标签: php smarty

我有这个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

1 个答案:

答案 0 :(得分: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}查看数组$contact的形成方式。

另一个忠告:

您在此处使用的PHPs mysql连接器已弃用。强烈建议不要使用此扩展名。相反,应使用MySQLiPDO_MySQL扩展名。