MySQL / PHP - 显示while循环中表的所有数据,而循环不在模板文件中

时间:2014-09-18 20:18:44

标签: php mysql

我正在努力尝试在页面上显示表格中的所有条目但是我希望它完成,以便我有“functions.php”获取数据并将其全部循环,但之后只需要一个简单的包含在page.php。

中的某种(不使用include或require等)

所以基本上page.php可以作为模板文件,如果有意义的话,函数文件将是所有代码编写和整理等等的地方?

到目前为止,我已经按照我的意愿从表中提取信息了,但是我不知道在page.php中循环它时我会怎么做。

如果我可以将{DISPLAY_POSTS}放在page.php中并且它可以正常工作,那就太棒了,但这真的只是一厢情愿的想法。可以这样做,phpBB团队为论坛软件做了这件事,但我确信它更复杂。

我从表中获取数据的代码是......

$posts = mysqli_query($sql, "SELECT * FROM " . $dbprefix . "posts") or die($posts . "<br/>" . mysqli_error());

while($postsData = mysqli_fetch_array($posts)) {
    $data1      = $postsData['post1'];
    $data2      = $postsData['post2'];
}

谢谢!

P.S。你可能已经从之前的帖子中猜到了,我是StackOverflow的新手,而且我是PHP的初学者,所以有些事情可能会让我头疼。

2 个答案:

答案 0 :(得分:1)

如果您想使用单个短代码输出模板页面上的所有循环数据,那么您必须合并所有循环数据..

$posts = mysqli_query($sql, "SELECT * FROM " . $dbprefix . "posts") or die($posts . "<br/>" . mysqli_error());

while($postsData = mysqli_fetch_array($posts)) {
    $data1.=$postsData['post1'];
    $data2.=$postsData['post2'];
}

echo $data1;
echo $data2;

现在尝试在模板页面上添加短代码。

答案 1 :(得分:1)

首先,您的代码将导致$data1$data2仅包含表格最后一行的信息,因为您在每次迭代中都会覆盖变量。为了防止这种情况,你应该这样做:

$posts = []; // this is where a new array is created
while($postsData = mysqli_fetch_array($posts)) {
    $posts[] = $postsData; // adds the current record to the array
}

将为您提供包含所有帖子的二维数组。

其次,要将逻辑与演示文稿分开,您可以使用TWIG之类的模板引擎。引擎需要template并插入数组中的数据以呈现完整的结果。模板page.twig的示例如下:

<ul>
{% for item in posts %}
    <li>{{ post.data1 }} - {{ post.data2 }}</li>
{% endfor %}
</ul>

page.php只会包含使用$posts中的数据呈现模板的说明:

echo $twig->render('page.twig', array('posts' => $posts));

有关详细信息,请参阅TWIG的文档。

逻辑和表述的分离总体上涵盖了广泛框架所涉及的许多方面。最常见的方法是模型 - 视图 - 控制器或MVC,它可能会为您指出更高级的信息。