我想明智地显示数据(PAGINATION)

时间:2016-02-18 06:43:08

标签: php

我在管理面板名称PostDisplay中有一个字段,当我在postDisplay中输入3然后在帖子页面(正面)它将显示3个帖子,我的问题是当我在postDisplay中输入20时它显示20个帖子但是我想在页面上分页,因此第1页显示5张贴第2页,接下来5,依此类推,这是我的php页面,可以获取数据并显示帖子。

<?php
    include_once ('class/user_posts.php');
    $user_posts = new user_posts;
    $slug = "post";
    $svs = $user_posts->select(" where A.type='" . $slug . "' ", "", "0", "$postcount");
    $blogArray = array();
    if (mysql_num_rows($svs) != 0) {
        while ($row = mysql_fetch_array($svs)) {
            $blogArray[] = $row;
        }
    }
?>
<div class="center margin-bottom-lg">
    <div class="container"> 
        <div class="row padding-bottom-lg">
            <div class="col-md-12">
                <div class="gray-box">
                    <h1 class="header">
                       <?php echo $user_options->getvalue('blogtitle', 'Blog...'); ?>
                    </h1>
                <div class="row our-services margin-bottom-lg padding-lg">
<?php
   header('Cotent-type: text/plain'); // Just here for formatting
   foreach ($blogArray as $array) {
       echo '<div class="col-md-4">';
       echo '<div class="row">';
       echo '<div class="col-xs-12">';
       echo '<a class="title-link" href="#">';
       echo '<h3>' . $array['slug'] . '</h3>';
       echo '</a>';
       echo '<p>' . $array['description'] . '</p>';
       echo '<p class=""><a href="#" class="btn-link">Read More...</a></p>';
       echo '</div>';
       echo '</div>';
       echo '</div>';
    }
?>
                    </div>
                </div>
            </div>
        </div>
    </div> 
</div>

1 个答案:

答案 0 :(得分:1)

似乎$ svs是包含您想要分页的数据的变量,但是我们没有足够的信息,好吧,PostDisplay是一个变量,用于操纵页面上显示的帖子数量但是你的代码没有提一下。 因此,我将提供有关如何分页的全球建议:

要进行分页,您需要在SQL语句中使用LIMIT子句来搜索您的数据。 LIMIT接受参数,“第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数”。 (来自https://dev.mysql.com/doc/refman/5.5/en/select.html
所以,假设postDisplay等于3,通过使用LIMIT 0,3(&lt; = postDisplay),您的SELECT语句将返回语句的前三个3结果。使用postDisplay = 20(LIMIT 0,20),前20个结果 现在,您有20个用户帖子,并且您希望进行分页以呈现4个页面,每个页面包含5个帖子。您需要将postDisplay设置为5并使用另一个变量来计算LIMIT子句的第一个参数,因为在第1页上,您将显示0到4,第2页,第5到第9页,第3页,第10到第14个结果,最后一页15到19.第一个参数将是0然后5> 10>这是它开始的地方。

要计算它,你需要知道你是哪一页,如果它是第1,2,3或4页。所以你设置一个$ _GET ['page']并用它来计算你将根据postDisplay计算,如果你的第一个参数是0,5,10或15 您还需要声明一下,以了解数据库中有多少用户帖子,以开始计算如何在切片中剪切该数字。

//here you get how many user posts total there is
$req_nbr_user_posts=mysqli_query($yourdbconnexion,"SELECT COUNT(*) AS nbr FROM user_posts");
$nbr_user_posts=mysqli_fetch_assoc($req_nbr_user_posts);

$postDisplay=5;
$current_page=$_GET['page'];

//here you have the total of pages for your pagination with $pages_total
$number_of_pages=floor($nbr_user_posts['nbr']/$postDisplay);
if($nbr_user_posts['nbr']%$postDisplay==0) $rest=0;
else $rest=1;
$pages_total=$number_of_pages+$rest;

//here is how to calculate that first argument of the LIMIT clause
$first_argument=($current_page-1)*$postDisplay;

$what_to_display=mysqli_query($yourdbconnexion,"SELECT * FROM user_posts LIMIT ".$first_argument.", ".$postDisplay);

就是这样!