2014-06-21 101 views
1

嘿家伙我的英语不是很好'但我试图解释我的自我清楚。 我创建分页,我的所有代码都在工作完美。分页显示问题与编号页

问题是,我想只显示五个页数,并点击下一个按钮,我隐藏一个并显示新的。它看起来像那样。

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-25 第2页的范围是:26-50 等..

现在,当用户请求页面2,我们应该显示他的25-49的结果。这意味着(page-1)* 25至page * 25-1 = 25-49的结果。

现在我们需要的是如何告诉SQL将这些考虑在内。

SELECT ContactName FROM Customers LIMIT 25 OFFSET 25; 

将产生使用所需的结果。

现在您只需通过pn所要求的页面就可以了。并打印下一个1-3(无论)next \ prev页面。

知道有多少网页有,只是做另一个count SQL查询,会给你的结果,并通过25

+0

把它你能PLS显示出一些这方面的例子吗?我不是很了解你。谢谢 – Victorino