2014-06-21 1 views
1

안녕 얘들 아 내 영어가별로 좋지는 않지만 내 자신을 분명히 설명하려고합니다. 페이지 매김을 만들고 있으며 모든 코드가 완벽하게 작동합니다.숫자 페이지의 페이지 매김 디스플레이 문제

문제는 5 개의 페이지 번호 만 표시하고 다음 버튼을 클릭하면 하나를 숨기고 새 페이지를 표시한다는 것입니다. 그것은 그렇게 보입니다.

next 12345 prev 

next 23456 prev 

감사합니다.

<?php 

    $dbh = new PDO("mysql:host=localhost;dbname=northwind", "root", "123"); 


    $query = $dbh->prepare("SELECT ContactName FROM Customers"); 
    $query->execute(); 
    $numRows = $query->rowCount(); 


    if (isset($_GET['pn'])) { 
     $pn = $_GET['pn']; 
    } else { 
     $pn = 1; 
    } 

    $startPage = 1; 
    $perPage = 9; 


    $lastPage = ceil($numRows/$perPage); 


    if ($pn < 1) { 
    $pn = 1; 
    } else if ($pn > $lastPage) { 
    $pn = $lastPage; 
    } 

    $controls = ''; 


    if ($pn != $lastPage) { 

     $controls .= '<a id="next" href="' . $_SERVER['PHP_SELF'] . '?pn=' . ($pn + 1) . '"> next </a>'; 
    } 


    for ($i=1; $i <= $lastPage; $i++) { 

     if ($i == $pn) { 
       $background = ' red;'; 
     } else { 
       $background = ' green;'; 
     } 

     $controls .= '<a id="page_' . $i . '" data-page="' . $i . '" class="num" style="background:' . $background . ' " href="' . $_SERVER['PHP_SELF'] . '?pn=' . $i . '"> ' . $i . '</a>'; 
    } 

    if ($pn != $startPage) { 

      $controls .= '<a href="' . $_SERVER['PHP_SELF'] . '?pn=' . ($pn - 1) . '"> prev </a>'; 
    } 

     $controls .= "PAGE " . $pn . " of " . $lastPage ; 


     $limit = "LIMIT " . ($pn-1) * $perPage . ', ' . $perPage; 

     $query2 = $dbh->prepare("SELECT ContactName FROM Customers " . $limit . ""); 
     $query2->execute(); 

     $outputList = ''; 

     while($row = $query2->fetch(PDO::FETCH_OBJ)){ 

      $outputList .= '<h1>' . $row->ContactName . '</h1><hr />'; 

     } 

답변

0

가 좀 더 쉽게 접근 방식을 사용하도록 제안 :

여기 내 코드입니다.

페이지가 25 개의 결과가 있다고 가정 해 보겠습니다. 그 의미 : 1 페이지 범위는 : 1-25 2 페이지 범위는 : 26-50 등등 .. 이제

사용자 요청 페이지 2, 우리는 그에게 25 ~ 49의 결과를 표시해야 할 때 . 이것은 페이지 25-1의 결과가 25-49의 결과가 될 때까지 (페이지 -1) * 25의 결과를 의미합니다.

이제 SQL에이를 고려해 볼 필요가 있습니다.

SELECT ContactName FROM Customers LIMIT 25 OFFSET 25; 

원하는 결과를 생성합니다.

이제는 이미 요청한 페이지를 pn으로 전달하면됩니다. 다음 1-3 페이지 (다음)를 인쇄하십시오.

은 당신에게 결과를 제공하고이 중 일부 예를 보여 개 pls 수 (25)

+0

하여 나눕니다 다른 count SQL 쿼리를 수행 얼마나 많은 페이지를 알고? 나는 너를 정말로 이해하지 못한다. 감사합니다. – Victorino