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 连接器已弃用。强烈建议不要使用此扩展程序。相反,应该使用MySQLiPDO_MySQL扩展。

于 2012-08-12T17:51:06.427 回答