好吧,所以我目前正在开发一个网站,对于网站的一部分,我试图从SQL数据库中显示一些数据。我希望数据以这样的方式显示:
<div class="project-list">
<ul>
<?php
try {
$stmt = $db->query('SELECT movieID, movieName, movieDesc, movieYear FROM latest ORDER BY movieID DESC');
while($row = $stmt->fetch()){
echo '<li>';
echo '<a href="#" class="no-underline">';
echo '<div class="project">';
echo '<h2 class="project-date">'.$row['movieYear'].'</h2>';
echo '<div class="poster"><img src="assets/img/FoTD_Poster.png" width="160" height="188"></div>';
echo '<h2 class="project-title" align="center"><b>'.$row['movieName'].'</b></h2>';
echo '</a>';
echo '</div>';
echo '</li>';
echo '<li>';
}
} catch(PDOException $e) {
echo $e->getMessage();
}
?>
</ul>
</div>
基本上这应该显示一个记录,然而,我的问题是我的样式表的设置方式是它只允许每个项目列表/行显示三个项目div。我无法弄清楚如何制作它所以我只能显示每个div的3条记录并用PHP重置。
答案 0 :(得分:1)
如果我的问题正确,您希望使用PHP将div的数量限制为3。尝试在SQL查询中添加LIMIT 3
:
$stmt = $db->query('SELECT movieID, movieName, movieDesc, movieYear FROM latest ORDER BY movieID DESC LIMIT 3');
我还注意到在while循环结束时有一个echo '<li>';
不合适。这可能是也可能不是问题,但如果不需要,我会删除它。
编辑:我可以再试一次吗?
如果我这次你说得对,你希望PHP在每个内部产生任意数量<div class="project-list">
,最多3 <li>
,对吗?
你走了:
<?php
try {
// this line is for my local setup, you have to change or remove it:
$db = new PDO('mysql:host=localhost;dbname=stackmovies;charset=utf8', 'root', '');
$stmt = $db->query('SELECT movieID, movieName, movieDesc, movieYear FROM latest ORDER BY movieID DESC');
$i = 0;
while($row = $stmt->fetch()){
echo "\n"; // for debugging
if ($i % 3 == 0) {
echo '<div class="project-list">';
echo '<ul>';
}
echo "\n"; // for debugging
echo '<li>';
echo '<a href="#" class="no-underline">';
echo '<div class="project">';
echo '<h2 class="project-date">'.$row['movieYear'].'</h2>';
echo '<div class="poster"><img src="assets/img/FoTD_Poster.png" width="160" height="188"></div>';
echo '<h2 class="project-title" align="center"><b>'.$row['movieName'].'</b></h2>';
echo '</a>';
echo '</div>';
echo '</li>';
echo "\n"; // for debugging
if ($i % 3 == 2) {
echo '</ul>';
echo '</div>';
}
echo "\n"; // for debugging
$i++;
}
if ($i > 0 && ($i - 1) % 3 != 2) {
echo '</ul>';
echo '</div>';
}
} catch(PDOException $e) {
echo $e->getMessage();
}
?>
答案 1 :(得分:1)
这是你想要的方式。利用array_chunk()
。您需要将sql中的所有数据添加到一个数组中(在本例中我们将调用$data
)。
while($row = $stmt->fetch()) {
$data[] = $row;
}
接下来,我们将数据块化为3个数组。
$chunked = array_chunk($data, 3);
然后您需要做的就是利用2个foreach()
循环将其打印出来。
// start the loop of chunks
foreach($chunked as $chunk) {
// you'd open the row here
// get the items in the specific chunk
foreach($chunk as $item) {
// you'd find your data elements in $item
}
// you'd close the row off here
}
这是一个有效的Example
。