0

我目前正在尝试为我正在处理的内容网站开发分页系统。

目前,用户每页将看到 10 个结果。当用户访问http://www.mydomain.com/page/1时,它应该显示表中的前 10 个条目。如果他们访问http://www.mydomain.com/page/2它应该会显示接下来的 10 个结果。

以下是我当前执行任务的功能,在访问页面时它似乎不起作用 - 有什么想法可能导致这种情况吗?

function getPagedPosts() {
$pageid = $_GET[page];
$page = $pageid - 1 * 10;
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 
$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); 
$query = " 
    SELECT *
    FROM content
    LIMIT '$page', 10
"; 

    try 
    { 
        $stmt = $db->prepare($query); 
        $stmt->execute(); 
    } 
    catch(PDOException $ex) 
    { 
        die("Failed to run query: " . $ex->getMessage()); 
    } 

    $rows = $stmt->fetchAll(); 
foreach($rows as $row):
    print '<tr><td><a href="post/' . $row['id'] . '">' . $row['title'] . '</a><div class="sub ' . $row['subject'] . '">' . $row['subject'] . '</div></td></tr>';
endforeach;

}

4

1 回答 1

0

我创建了一个称为分页的函数:

<?php

function pagination($query, $per_page = 10,$page = 1, $url = '?'){        
    $query = "SELECT COUNT(*) as `num` FROM {$query}";
    $row = mysql_fetch_array(mysql_query($query));
    $total = $row['num'];
    $adjacents = "2"; 

    $page = ($page == 0 ? 1 : $page);  
    $start = ($page - 1) * $per_page;                               

    $prev = $page - 1;                          
    $next = $page + 1;
    $lastpage = ceil($total/$per_page);
    $lpm1 = $lastpage - 1;

    $pagination = "";
    if($lastpage > 1)
    {   
        $pagination .= "<ul class='pagination'>";
                $pagination .= "<li class='details'>Page $page of $lastpage</li>";
        if ($lastpage < 7 + ($adjacents * 2))
        {   
            for ($counter = 1; $counter <= $lastpage; $counter++)
            {
                if ($counter == $page)
                    $pagination.= "<li><a class='current'>$counter</a></li>";
                else
                    $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
            }
        }
        elseif($lastpage > 5 + ($adjacents * 2))
        {
            if($page < 1 + ($adjacents * 2))        
            {
                for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<li><a class='current'>$counter</a></li>";
                    else
                        $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                }
                $pagination.= "<li class='dot'>...</li>";
                $pagination.= "<li><a href='{$url}page=$lpm1'>$lpm1</a></li>";
                $pagination.= "<li><a href='{$url}page=$lastpage'>$lastpage</a></li>";      
            }
            elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
            {
                $pagination.= "<li><a href='{$url}page=1'>1</a></li>";
                $pagination.= "<li><a href='{$url}page=2'>2</a></li>";
                $pagination.= "<li class='dot'>...</li>";
                for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<li><a class='current'>$counter</a></li>";
                    else
                        $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                }
                $pagination.= "<li class='dot'>..</li>";
                $pagination.= "<li><a href='{$url}page=$lpm1'>$lpm1</a></li>";
                $pagination.= "<li><a href='{$url}page=$lastpage'>$lastpage</a></li>";      
            }
            else
            {
                $pagination.= "<li><a href='{$url}page=1'>1</a></li>";
                $pagination.= "<li><a href='{$url}page=2'>2</a></li>";
                $pagination.= "<li class='dot'>..</li>";
                for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<li><a class='current'>$counter</a></li>";
                    else
                        $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                }
            }
        }

        if ($page < $counter - 1){ 
            $pagination.= "<li><a href='{$url}page=$next'>Next</a></li>";
            $pagination.= "<li><a href='{$url}page=$lastpage'>Last</a></li>";
        }else{
            $pagination.= "<li><a class='current'>Next</a></li>";
            $pagination.= "<li><a class='current'>Last</a></li>";
        }
        $pagination.= "</ul>\n";        
    }


    return $pagination;
} 
?>

然后在php页面顶部添加以下代码进行分页:

<?php
//get the function
include_once ('include/functions/pagination.php');

    $page = (int) (!isset($_GET["page"]) ? 1 : $_GET["page"]);
    $limit = 5;
    $startpoint = ($page * $limit) - $limit;

    //to make pagination
    $statement = "`prodcat_mst`"; //table name 'prodcat_mst'
?>

我的 SQL 查询:

$sqryprodcat_mst = "select prodcatm_id,prodcatm_name,prodcatm_mnimg,prodcatm_sts,prodcatm_prty from {$statement} {$ordrby} LIMIT {$startpoint}, {$limit}";

显示分页:

<?php
    echo pagination($statement,$limit,$page);
?>

希望这可以帮助。

于 2013-04-24T18:28:36.533 回答