PHP每个div显示一定数量的记录

时间:2015-02-10 02:43:28

标签: php html mysql css

好吧,所以我目前正在开发一个网站,对于网站的一部分,我试图从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重置。

2 个答案:

答案 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