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

MySQL/PHP—在while循环中显示表中的所有数据,而不在模板文件中显示循环,php,mysql,Php,Mysql,我正在尝试在一个页面上显示一个表中的所有条目,但是我希望这样做,这样我就有了“functions.php”,它可以获取数据并循环所有内容,但是在say page.php中有一个简单的包含(不使用include或require等) 因此,本质上,page.php将充当模板文件,函数文件将是所有代码编写和排序的地方,等等,如果这有意义的话 到目前为止,我已经有了这个工具,可以按照我的要求从表中提取信息,但是我不知道如何在page.php中循环它 如果我能把{DISPLAY_POSTS}放在page.

我正在尝试在一个页面上显示一个表中的所有条目,但是我希望这样做,这样我就有了“functions.php”,它可以获取数据并循环所有内容,但是在say 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'];
}
$posts=mysqli_query($sql,“从“$dbprefix.posts”中选择*)或die($posts。“
.”.mysqli_error()); while($postsData=mysqli\u fetch\u数组($posts)){ $data1=$postsData['post1']; $data2=$postsData['post2']; }
谢谢大家!


另外,你可能已经从以前的文章中猜到了,我是StackOverflow的新手,我是PHP的初学者,所以有些事情可能会让我不知所措。

如果你想用一个短代码在模板页面上输出所有循环数据,那么你必须合并所有循环数据

$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;
$posts=mysqli_query($sql,“从“$dbprefix.posts”中选择*)或die($posts。“
.”.mysqli_error()); while($postsData=mysqli\u fetch\u数组($posts)){ $data1.=$postsData['post1']; $data2.=$postsData['post2']; } echo$data1; echo$data2;

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

首先,您的代码将导致
$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
}
这将为您提供一个包含所有帖子的二维数组

其次,要将逻辑与表示分离,可以使用模板引擎,如。引擎将获取并插入数组中的数据,以呈现完整的结果。模板
page.twig
的示例如下:

<ul>
{% for item in posts %}
    <li>{{ post.data1 }} - {{ post.data2 }}</li>
{% endfor %}
</ul>
有关更多详细信息,请参阅的文档


逻辑和表示的分离通常涵盖了许多方面,这些方面由广泛的框架来解决。最常见的方法是模型-视图-控制器或MVC,它可能会向您提供更高级的信息。

“但是,只需要简单的某种包含(不使用包含或要求等)”——这让我感到困惑。如果你不包含文件,你希望它如何被…包含?如果你想在你的模板中有占位符,比如{DISPLAY_POSTS},你应该创建一个模板引擎或者使用一个已经存在的引擎,比如。这里的问题真的太宽泛了,因为本质上你是在问如何构建一个模板框架。为什么不使用一个现有的呢?是的,我想现在你提到了它,这是我想问的。我试着使用
,其中包含HTML标记和不同的PHP变量,但我发现它没有显示任何内容。也没有错误。嗯,我试过了,但没用。关于不能将变量用作数组之类的东西。我是否能够通过将while循环包装在函数中并在模板页面中显示该函数来实现这一点?
$posts
创建为数组,因此不应引发此类错误。原则上,您可以将while循环包装到函数中,但是您应该打印
$postData
的相关字段,而不是将它们添加到
$posts
echo $twig->render('page.twig', array('posts' => $posts));