分页显示问题与数字页面

时间:2014-06-21 09:52:10

标签: php pagination

嘿伙计们,我的英语不是很好,但我试着解释清楚。 我创建了分页,我的所有代码都运行得很完美。

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

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 />';

      } 

1 个答案:

答案 0 :(得分:0)

我建议你使用更简单的方法。

让我们考虑一个页面包含25个结果。 这意味着: 第一页范围是:1-25 第2页范围是:26-50 等等..

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

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

SELECT ContactName FROM Customers LIMIT 25 OFFSET 25;

将产生使用所需的结果。

现在您只需要使用pn传递所请求的页面。然后打印下一个1-3(无论如何)下一个\ prev页面。

要知道有多少页面,只需执行另一个count sql查询,它将为您提供结果并将其除以25。