使用PHP和MySQL的Bootstrap分页

8yt*_*0d3 9 php pagination twitter-bootstrap

我是Bootstrap的新手,我正在尝试在页面的其中一个部分实现分页以正确表示数据.有人可以帮忙吗?

以下是代码现在看起来如何的快照.如何实现分页以便只显示10条记录?谢谢.

<section class="success" id="all-confessions">
    <div class="container">
        <div class="row">
            <div class="col-lg-12 text-center">
                <h2>All Confessions</h2>
                <hr class="star-light">
            </div>
        </div>
        <div class="row">
            <div class="row text-left">
                <?php
                $allconfession = mysql_query("SELECT * FROM collection ORDER BY date DESC");

                while($result2 = mysql_fetch_array($allconfession)) {
                    $id = $result2['id'];
                    ?>
                    <div class="col-md-3 col-md-offset-1">
                        <h5>#<?php echo $id; ?></h5>
                    </div>
                    <div class="col-md-10 col-md-offset-1">
                        <p class="para-confess">
                            <?php
                            echo $result2['type'] ." from ". $result2['college'] ." of ". $result2['department'] ." confessed ". $result2['confession']; 
                            ?>
                        </p>
                        <div class="text-left">
                            <?php
                            if(isset($_COOKIE['uname'])) {
                                ?>
                                <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
                                    <input type="text" name="cid" style="display: none;" value="<?php echo $id; ?>">
                                    <button type="submit" class="btn btn-success fa fa-thumbs-up" name="like"> Cool</button>
                                    <button type="submit" class="btn btn-warning fa fa-thumbs-down" name="dislike"> WTF</button>
                                </form>
                                <?php
                            }
                            ?>
                        </div>
                        <div class="text-right">
                            <i class="fa fa-thumbs-o-up"> 
                                <?php 
                                $likes = mysql_query("SELECT COUNT(*) FROM activity WHERE cid = $id AND ld = 1");
                                $alikes = mysql_fetch_row($likes);
                                echo $alikes[0]; 
                                ?> 
                            </i> &nbsp;
                            <i class="fa fa-thumbs-o-down"> 
                                <?php 
                                $dislikes = mysql_query("SELECT COUNT(*) FROM activity WHERE cid = $id AND ld = 0");
                                $adislikes = mysql_fetch_row($dislikes);
                                echo $adislikes[0]; 
                                ?> 
                            </i>
                        </div>
                        <hr/>
                    </div>
                    <?php
                }
                ?>
            </div>
        </div>
    </div>
</section>
Run Code Online (Sandbox Code Playgroud)

CCh*_*oma 5

你离我很远.

至少,您需要执行以下操作.

  1. 您需要创建一个变量来确定每页显示的项目数.
  2. 您需要获取该变量并将其乘以页码以获取要在查询中偏移的记录数.
  3. 您需要使用上面计算得到的数字来偏移查询结果,并将查询限制为要显示的项目数.
  4. 您需要计算总项目数并将其除以每页的项目数,以获得在分页中显示的总页数.

这里有一些简单的分页代码,我和Bootstrap一起多次使用过.

http://www.a2zwebhelp.com/php-mysql-pagination

只需省略样式并将Bootstrap类应用于元素.但是你不能只添加静态html并期望它在没有任何后端逻辑的情况下工作.Bootstrap只提供了一种对分页进行样式化的方法,但您必须构建它.


小智 5

首先,请了解 PDO http://php.net/manual/en/book.pdo.php。在我的解决方案中,我假设您使用的是 PDO。

您需要做的第一件事是确定数据库中实际有多少行。

$nbOfResults = $pdo->query('select count(*) from collection')->fetchColumn();
Run Code Online (Sandbox Code Playgroud)

然后设置每页实体的一些限制。

$entitiesPerPage = 10; 
Run Code Online (Sandbox Code Playgroud)

现在让我们确定应该有多少页。首先,我将按entitiesPerPage 划分结果数。假设有 202 个结果。将其除以 10(每页实体)将产生 20 页(转换为 int)。但是仍然有 2 个实体。这就是为什么我必须检查模数并在需要时再添加一页的原因。

$nbOfPages = intval($nbOfResults / $entitiesPerPage);

if( ($entitiesPerPage % $nbOfResults) !== 0 ) {
    $nbOfPages += 1
}
Run Code Online (Sandbox Code Playgroud)

现在我们准备建立一个分页。但首先我们需要有一个保存当前页面的变量。

$currentPage = $_GET['page']; 
Run Code Online (Sandbox Code Playgroud)

或者以更优雅的方式。

$currentPage = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_NUMBER_INT);
Run Code Online (Sandbox Code Playgroud)

但是,如果没有任何页面,让我们假设我们在第一页上。

if(!$currentPage) { $currentPage = 1 }
Run Code Online (Sandbox Code Playgroud)

好的,现在是保存分页信息的数组的时候了。

$pagination = [];

if ($currentPage !== 1) {
    $pagination[] = [
        'page' => 'Previous',
        'link' => '?page=' . ($currentPage - 1),
        'active' => false,
    ];
}

for($i = 1; $i <= $nbOfPages; $i++) {
   $pagination[] = [
      'page' => $i,
      'link' => '?page=' . $i,
      'active' => ( $i === $currentPage ),
   ];
}

if ($currentPage !== $nbOfPages) {
    $pagination[] = [
        'page' => 'Next',
        'link' => '?page=' . ($currentPage + 1),
        'active' => false,
    ];
}
Run Code Online (Sandbox Code Playgroud)

最后是获取当前页面结果的查询。

$query = 'SELECT * FROM collection ORDER BY date DESC LIMIT ? OFFSET ?';
$sth = $dbh->prepare($query);
$sth->execute(array($entitiesPerPage, ( $currentPage - 1 ) * $entitiesPerPage)));
Run Code Online (Sandbox Code Playgroud)

现在您要做的就是遍历 $pagination 变量并打印正确的引导程序 HTML。