2010-08-16 60 views
0

我写了一个分页类,它看起来像它不输出正确数量的行。我有一张满51条记录的表格,而只显示了30条记录,而对于这些页面,它只显示了页面1,它应该显示页面1和页面2,页面通过浏览器参数页面= 1进行查看。当我尝试查看页面= 2时,我看到了其余的记录。这里是班级。分页类计算不正确

include_once("class.db.php"); 

     class Pagination { 

     var $param; 
     var $perPage; 
     var $adjacents; 
     var $start; 
     var $sql; 
     var $pageName; 


    function __construct() { 

     $this->db = new MysqlDB; 
     $this->db->connect(); 
    } 

     function setParam() { 

      if(isset($_GET['page']) && is_numeric($_GET['page']) && ($_GET['page'] > 0)) { 
       $this->param = $_GET['page']; 
      } else { 
       $this->param = 1; 
      } 
     } 


     function setIndex() { 
      $this->setParam(); 
      return $this->start = ($this->param * $this->perPage) - $this->perPage; 
     } 

     function showPagination() { 
      $qRows = $this->db->query($this->sql); 
      $numRows = $this->db->num_rows($qRows); 
      $numOfPages = ceil($numRows/$this->perPage); 
      $param = $this->param; 
      $pageName = $this->pageName; 



      print "<div class='pagination'>"; 

      print "<a href='$this->pageName?page=1' class='previous-off'> First </a>"; 


      // ----------------------------------------------------------------------------  
       // PRINT ALL PAGES TO THE LEFT // 
       if(($param - $this->adjacents) > 1) { 
        print "<span>...</span>"; 

        $lowerLimit = $param - $this->adjacents; 

        //print all on left side. 
        for($i = $lowerLimit; $i< $param; $i++) { 
         print "<a href='$pageName?page=$param = $i'> $i </a>"; 
        } 



        } else { 

          //print all numbers between current page and first page. 

          for($i = 1; $i < $param; $i++) { 
           print "<a href='$pageName?page=$i'> $i </a>"; 
          } 
         } 
      // ---------------------------------------------------------------------------- 



      //print current page 
      if(($param != 0) && ($param != $numOfPages)) { 
       print "<span class='current'>$param</span>"; 
      } 




      // ----------------------------------------------------------------------------   
         //PRINT ALL PAGES TO THE RIGHT 
        if(($param + $this->adjacents) < $numOfPages) { 

          $upperLimit = $param + $this->adjacents; 

          for($i=($param + 1); $i<=$upperLimit; $i++) { 
           print "<a href='$pageName?page=$i'> $i </a>"; 
          } 
          print "<span>...</span>"; 
         } else { 

          //print all page numbers if out of padded range 

          for($i = $param + 1; $i<$numOfPages; $i++) { 
           print "<a href='$pageName?page=$i'> $i </a>"; 
          } 

         } 
      // ---------------------------------------------------------------------------- 

      $lastPage = $numOfPages - 1; 
      print "<a class='next' href='$pageName?page=$lastPage'> Last </li>"; 

      print "</div>"; 
     } 





     function getData() { 
      $query = $this->sql; 
      $this->start = $this->setIndex(); 
      return "$query LIMIT $this->start, $this->perPage"; 
     } 

    } 

这是我如何使用类:

$ DB =新MySQLdb的; $ paginate = new分页;

$paginate->pageName = "index.php"; //sets the page to use 
$paginate->perPage = 10; //show num of records per page 
$paginate->adjacents = 3; //current page adjacent to 
$paginate->sql = "select * from tbl_products"; //the main query 
$query = $db->query($paginate->getData()); 

while($row = mysql_fetch_object($query)) { 
print $row->pName."<br/>"; 
} 

$ paginate-> showPagination(); //显示分页格

+0

有谁知道吗? – sam 2010-08-16 05:14:28

回答

0

在功能setIndex你必须写:

return $this->start = (($this->param - 1) * $this->perPage) - $this->perPage; 

因为查询应该是这样的:

第1页:SELECT ... LIMIT 0,[nr_of_pages]

2页:SELECT ... LIMIT [nr_of_pages]*1,[nr_of_pages] ...

+0

我做到了这一点,这就是查询出了什么错误。 select * from tbl_content where visible ='1'order by year desc LIMIT -30,30 – sam 2010-08-16 20:33:49

+0

可能$ this-> param变成零度 – Zsolti 2010-08-17 10:36:45