php - 是否可以使用 PHP PDO 将 Mysql 查询结果分页为每页 5 x 5 网格?

标签 php mysql pdo pagination

我想查询图像 url 数据库,然后使用 php 显示它们。到目前为止,我还没有找到任何不使用 javascript 的示例(不想使用,因为它加载同一页面上的所有图像,并且 javascript 控制您所看到的内容)。

其他分页示例只是不允许您输出这样的结果......

image1 image2 image3 image4 image5
image6 image7 image8 image9 image10

1 2 3 4 5 Next

...无需通过 php 取消分页,也不必对分页进行硬编码。这没有多大意义,因为在任何给定时间图像可能或多或少。

有人知道这是否可行吗?

例如...

在此脚本中,循环只能控制每页显示的记录数。我需要能够在输出指定数量的记录后打破 td。

<?php

require_once'connect.php';
$query = $db->query("SELECT COUNT(id) FROM table");
$rows = $query->fetchColumn();
$items_per_page = 25;
$last_page = $rows/$items_per_page;

if(isset($_GET['p']) && ctype_digit($_GET['p']) && $_GET['p'] > 0) {
    $page = $_GET['p'];
}
else {
    $page = '1';
}

if($page > $last_page) {
    $page = $last_page;
}

$page_controls = '<p class="page_controls">';
$start = ($page -1) * $items_per_page;

if($items_per_page > $rows) {
    $page_controls .= '<span>1</span>';
}
else {
    if($page > 1) {
        $prev = $page - 1;
        $page_controls .= '<a href="?p='. $prev .'">Prev</a>';

        for($i = ($page - 3); $i < $page; $i++) {
            if($i > 0) {
                $page_controls .= '<a href="?p=' . $i .'">' . $i . '</a>';
            }
        }
    }

$page_controls .= '<span>'. $page .'</span>';

if($page < $last_page) {
    for($i = $page+1; $i <= $last_page; $i++) {
        $page_controls .= '<a href="?p=' . $i . '">' . $i . '</a>';
            if($i >= $page+3) {
                break;
            }
    }

    $next = $page + 1;
    $page_controls .= '<a href="?p=' . $next . '">Next</a>';
    }
}

$page_controls .= '</p>';

$query = $db->prepare("SELECT * FROM table limit ?, ?");
$query->bindParam(1, $start, PDO::PARAM_INT);
$query->bindParam(2, $items_per_page, PDO::PARAM_INT);
$query->execute();

echo '<table>';

$cols = 5;

foreach($query->fetchAll(PDO::FETCH_ASSOC) as $data) {


    echo '<tr>
    <td><a href="' . $data['url'] . '"><img src="' . $data['image_url'] . '"  width=200 height=100></a></td>
    </tr>';

}

echo '</table>';

echo $page_controls;

?>

最佳答案

有人之前发布了一个解决方案,但后来删除了它,所以我无法给予适当的信任。然而,这里经过一个小修改就完成了我的问题......

echo '<table>';

$cols = 5;

foreach($query->fetchAll(PDO::FETCH_ASSOC) as $cnt => $data) {
    if ( $cnt % $cols == 0 ) {
        echo '<tr>';
    }

    echo '<td><a href="<' . $data['url'] . '"><img src="' . $data['image_url'] . '"></a></td>
    ';

    if (  $cnt % $cols == 5 ) {
        echo '</tr>';
    }    
    $cnt++;
}

echo '</table>';

总的来说,我同意最好使用 CSS 来控制图像的布局。如果您愿意,那么前面的代码是最好的。

关于php - 是否可以使用 PHP PDO 将 Mysql 查询结果分页为每页 5 x 5 网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38847935/

相关文章:

php - 在 PHP 中连接两个 MYSQL 列

PHP:如何找到最常用的数组键?

php - 扩展对象时如何在 Silverstripe 中添加额外的summary_field?

javascript - jQuery getJson 函数内填充的数组范围

php - PHP在li元素内部文本和图片对齐

PHP explode 检测用户名

php - 我们应该始终绑定(bind)我们的 SQL 语句吗?

php - PDO 从表中删除指定行

mysql - Codeigniter trans_start() 不回滚所有查询

mysql - 使用 PDO 对象 - MySQL