PHP、mySQL 和 Smarty 模板。 while 循环仅显示 1 个数据库条目

PHP, mySQL, and Smarty template. while loop only displays 1 database entry

我正在使用 php/mysql 和 smarty(php 模板生成器)。我正在遍历 sql 查询并获取要显示在 .tpl 文件中的数据。

$query = "SELECT * from recipes";
    $result = mysqli_query($db_server, $query);
    if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        // assign user information to template
        $tpl->assign('title', $row['title']);
        $tpl->assign('submission_date', $row['submission_date']);
        $tpl->assign('instructions', $row['instructions']);
        $tpl->assign('category', $row['category']);
    }
    } else {
        echo "0 results";
    }

我的html:

<div class="content">
    {if $signedin}
        <h4>{$title}<h4>
        <h6>{$submission_date}</h6>
        <p>{$instructions}</p>
        <p>{$category}</p>
    {else}
        You are currently not signed in.
    {/if}

</div>

问题是这只显示最近的条目,而我试图显示数据库中的每个条目。

我的循环有什么问题?

我在每个 $tpl->assign 之间放置了 echo,它循环并显示所有数据,所以我想知道这是否是一个 Smarty 问题。

就像我在评论中所说的那样,您只获得最后一行值的原因是因为循环中的每次迭代都会覆盖这些值。

您可以做的一种方法是创建一个容器,然后使用您的 while 循环并先将它们全部放入其中。完成后,然后 ->assign() 将它放在模板中并制作循环演示和逻辑以及您需要做的其他事情。

基本思路如下:

// Backend

$data = array(); // initialize a simple container
$query = "SELECT * from recipes";
$result = mysqli_query($db_server, $query);

if ($result->num_rows > 0) {
    // fetch rows
    while($row = $result->fetch_assoc()) {
        $data[] = $row; // push them inside
    }
}

// assign user information to template
$tpl->assign('values', $data);


// Front end

<div class="content">
    {foreach from=$values key=k item=value}
        <h4>{$value.title}<h4>
        <h6>{$value.submission_date}</h6>
        <p>{$value.instructions}</p>
        <p>{$value.category}</p>
    {/foreach}
</div>