自定义数据库驱动博客的分页?

时间:2011-11-11 04:15:30

标签: php mysql sql pagination blogs

我最近一直在修补PHP,想制作自己的博客代码。我知道如何从数据库中进行选择,我将在其中为表项指定一个表。

我只想知道如何根据page GET变量仅选择表格的某些部分。

很抱歉没有任何代码,但这是一个非常广泛的问题,我觉得当前的代码并不是回答这个问题的必要条件。

编辑:我正在使用MySQL。

3 个答案:

答案 0 :(得分:1)

使用MySQL,您可以使用LIMIT子句。假设您的页码编号从1开始:

$pageSize = 10;
$page = abs(intval($_GET["page"]));
if ($page < 1) {
    $page = 1;
}
$startResult = ($page - 1) * $pageSize;
$sql = "SELECT * FROM `tableName` LIMIT $startResult, $pageSize";

从外部(敌对)环境获取参数时要做的一件非常重要的事情是清理输入。如果您不是恶意用户或Web机器人,可以在GET页面变量中插入任何字符串并更改您的查询。这称为SQL注入。只是google for it,你会找到很多解释。

既然我们知道我们的页面变量必须是正整数,我首先用intval(获取变量的整数值)然后用abs(绝对值)对待它因为我们只想要正值。另一种方法是使用预处理语句(寻找PDO)。

答案 1 :(得分:0)

    I will be like below. You have to do changes according to your code style

<?php
        /*
            Place code to connect to your DB here.
        */
        include('config.php');  // include your code to connect to DB.

        $tbl_name="";       //your table name
        // How many adjacent pages should be shown on each side?
        $adjacents = 3;

        /* 
           First get total number of rows in data table. 
           If you have a WHERE clause in your query, make sure you mirror it here.
        */
        $query = "SELECT COUNT(*) as num FROM $tbl_name";
        $total_pages = mysql_fetch_array(mysql_query($query));
        $total_pages = $total_pages[num];

        /* Setup vars for query. */
        $targetpage = "filename.php";   //your file name  (the name of this file)
        $limit = 2;                                 //how many items to show per page
        $page = $_GET['page'];
        if($page) 
            $start = ($page - 1) * $limit;          //first item to display on this page
        else
            $start = 0;                             //if no page var is given, set start to 0

        /* Get data. */
        $sql = "SELECT column_name FROM $tbl_name LIMIT $start, $limit";
        $result = mysql_query($sql);

        /* Setup page vars for display. */
        if ($page == 0) $page = 1;                  //if no page var is given, default to 1.
        $prev = $page - 1;                          //previous page is page - 1
        $next = $page + 1;                          //next page is page + 1
        $lastpage = ceil($total_pages/$limit);      //lastpage is = total pages / items per page, rounded up.
        $lpm1 = $lastpage - 1;                      //last page minus 1

        /* 
            Now we apply our rules and draw the pagination object. 
            We're actually saving the code to a variable in case we want to draw it more than once.
        */
        $pagination = "";
        if($lastpage > 1)
        {   
            $pagination .= "<div class=\"pagination\">";
            //previous button
            if ($page > 1) 
                $pagination.= "<a href=\"$targetpage?page=$prev\">« previous</a>";
            else
                $pagination.= "<span class=\"disabled\">« previous</span>"; 

            //pages 
            if ($lastpage < 7 + ($adjacents * 2))   //not enough pages to bother breaking it up
            {   
                for ($counter = 1; $counter <= $lastpage; $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<span class=\"current\">$counter</span>";
                    else
                        $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                 
                }
            }
            elseif($lastpage > 5 + ($adjacents * 2))    //enough pages to hide some
            {
                //close to beginning; only hide later pages
                if($page < 1 + ($adjacents * 2))        
                {
                    for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
                    {
                        if ($counter == $page)
                            $pagination.= "<span class=\"current\">$counter</span>";
                        else
                            $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                 
                    }
                    $pagination.= "...";
                    $pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>";
                    $pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>";       
                }
                //in middle; hide some front and some back
                elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
                {
                    $pagination.= "<a href=\"$targetpage?page=1\">1</a>";
                    $pagination.= "<a href=\"$targetpage?page=2\">2</a>";
                    $pagination.= "...";
                    for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
                    {
                        if ($counter == $page)
                            $pagination.= "<span class=\"current\">$counter</span>";
                        else
                            $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                 
                    }
                    $pagination.= "...";
                    $pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>";
                    $pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>";       
                }
                //close to end; only hide early pages
                else
                {
                    $pagination.= "<a href=\"$targetpage?page=1\">1</a>";
                    $pagination.= "<a href=\"$targetpage?page=2\">2</a>";
                    $pagination.= "...";
                    for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
                    {
                        if ($counter == $page)
                            $pagination.= "<span class=\"current\">$counter</span>";
                        else
                            $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                 
                    }
                }
            }

            //next button
            if ($page < $counter - 1) 
                $pagination.= "<a href=\"$targetpage?page=$next\">next »</a>";
            else
                $pagination.= "<span class=\"disabled\">next »</span>";
            $pagination.= "</div>\n";       
        }
    ?>

        <?php
            while($row = mysql_fetch_array($result))
            {

            // Your while loop here

            }
        ?>

    <?=$pagination?>


Please make changes according to your code style

答案 2 :(得分:0)

请根据需要进行更改。您可以轻松地设置页面导航的样式。

<?php 
if(!empty($_GET["start"])){
    $start = $_GET['start'];// To take care global variable if OFF
}else{
    $start  = 0;
}
if(!($start > 0)) { // This variable is set to zero for the first page
    $start = 0;
}

$eu = ($start - 0);
$limit           = 5; // No of records to be shown per page.
$whathis      = $eu + $limit;
$back          = $eu - $limit;
$next          = $eu + $limit;

// to check the total number of records
$query         = mysql_query(" SELECT * FROM <tablename> ") or die (mysql_error());
$total_rows     = mysql_num_rows($query);

//select the record with limitation
$query         = mysql_query(" SELECT * FROM <tablename> limit $eu, $limit ") or die (mysql_error());

//code for previous
if($back >=0) {
echo "<a href='yourpage.php?start=$back'><font face='Verdana' size='2'>PREV</font></a>&nbsp;&nbsp;";
}

//code for the number of page with links
$i     = 0;
$x    = 1;
for($i=0;$i < $total_rows;$i=$i+$limit){
if($i != $eu){
    echo "<a href='yourpage.php?start=$i'><font face='Verdana' size='2'>$x</font></a> ";
}else { 
    echo "<font face='Verdana' size='4' color=red>$x</font>";
} // Current page is not displayed as link and given font color red

$x    = $x+1;
}
//code for next
if($whathis < $total_rows) {
echo "<a href='yourpage.php?start=$next'><font face='Verdana' size='2'>NEXT</font></a>";
}    
?>