2011-04-30 32 views
0

所以我想讓我的頁面在論壇上的10個帖子後分頁。分頁按鈕出現並且功能和變量url正常工作,但是頁面1顯示數據庫中的所有文章而不是僅10,而頁面2顯示相同的內容(所有文章)。數據庫文章:分頁

我敢肯定它的簡單的東西,我只是沒有看到...

我的主要論壇頁面的代碼是這樣的:

$conn = mysql_connect("$host", "$username", "$password"); 
     if(!$conn) die("Failed to connect to database!"); 
     $status = mysql_select_db("$db_name", $conn); 
     if(!$status) die("Failed to select database!"); 


    $sql="SELECT * FROM $tbl_name ORDER BY id DESC"; 
    // OREDER BY id DESC is order result by descending 
    $result=mysql_query($sql); 

     include ('pagination.php'); 
     ?> 
    <?php 
     $pager = new PS_Pagination($conn, $sql, 10, 5, "param1=valu1&param2=value2"); 

     /* 
     * Enable debugging if you want o view query errors 
     */ 
     $pager->setDebug(true); 

     /* 
     * The paginate() function returns a mysql result set 
     * or false if no rows are returned by the query 
     */ 
     $rs = $pager->paginate(); 
     if(!$rs) die(mysql_error()); 

    while($rows=mysql_fetch_array($result)){ // Start looping table row 
    ?> 

    <tr> 
    <td bgcolor="#FFFFFF"><? echo $rows['id']; ?></td> 
    <td bgcolor="#FFFFFF"><font size="3"><a href="view_topic.php?id=<? echo $rows['id']; ?>"><? echo $rows['topic']; ?></a></font><BR></td> 
    <td align="center" bgcolor="#FFFFFF"><? echo $rows['view']; ?></td> 
    <td align="center" bgcolor="#FFFFFF"><? echo $rows['reply']; ?></td> 
    <td align="center" bgcolor="#FFFFFF"><? echo $rows['datetime']; ?></td> 
    </tr> 

    <?php 
    // Exit looping and close connection 
    } 
    mysql_close(); 
    ?> 
    <tr> 
    <td colspan="5" align="right" bgcolor="#E6E6E6"><a href="create_topic.php"><strong>Create New Topic</strong> </a></td> 
    </tr> 
    </table> 
    <br /> 

    <center><?php echo $pager->renderFullNav(); 

     ?></center> 

然後我的分頁文件的代碼是這樣的:

<?php 


class PS_Pagination { 
    var $php_self; 
    var $rows_per_page = 10; //Number of records to display per page 
    var $total_rows = 0; //Total number of rows returned by the query 
    var $links_per_page = 5; //Number of links to display per page 
    var $append = ""; //Paremeters to append to pagination links 
    var $sql = ""; 
    var $debug = false; 
    var $conn = false; 
    var $page = 1; 
    var $max_pages = 0; 
    var $offset = 0; 

    /** 
    * Constructor 
    * 
    * @param resource $connection Mysql connection link 
    * @param string $sql SQL query to paginate. Example : SELECT * FROM users 
    * @param integer $rows_per_page Number of records to display per page. Defaults to 10 
    * @param integer $links_per_page Number of links to display per page. Defaults to 5 
    * @param string $append Parameters to be appended to pagination links 
    */ 

    function PS_Pagination($connection, $sql, $rows_per_page = 10, $links_per_page = 5, $append = "") { 
     $this->conn = $connection; 
     $this->sql = $sql; 
     $this->rows_per_page = (int)$rows_per_page; 
     if (intval($links_per_page) > 0) { 
      $this->links_per_page = (int)$links_per_page; 
     } else { 
      $this->links_per_page = 5; 
     } 
     $this->append = $append; 
     $this->php_self = htmlspecialchars($_SERVER['PHP_SELF']); 
     if (isset($_GET['page'])) { 
      $this->page = intval($_GET['page']); 
     } 
    } 

    /** 
    * Executes the SQL query and initializes internal variables 
    * 
    * @access public 
    * @return resource 
    */ 
    function paginate() { 
     //Check for valid mysql connection 
     if (! $this->conn || ! is_resource($this->conn)) { 
      if ($this->debug) 
       echo "MySQL connection missing<br />"; 
      return false; 
     } 

     //Find total number of rows 
     $all_rs = @mysql_query($this->sql); 
     if (! $all_rs) { 
      if ($this->debug) 
       echo "SQL query failed. Check your query.<br /><br />Error Returned: " . mysql_error(); 
      return false; 
     } 
     $this->total_rows = mysql_num_rows($all_rs); 
     @mysql_close($all_rs); 

     //Return FALSE if no rows found 
     if ($this->total_rows == 0) { 
      if ($this->debug) 
       echo "Query returned zero rows."; 
      return FALSE; 
     } 

     //Max number of pages 
     $this->max_pages = ceil($this->total_rows/$this->rows_per_page); 
     if ($this->links_per_page > $this->max_pages) { 
      $this->links_per_page = $this->max_pages; 
     } 

     //Check the page value just in case someone is trying to input an aribitrary value 
     if ($this->page > $this->max_pages || $this->page <= 0) { 
      $this->page = 1; 
     } 

     //Calculate Offset 
     $this->offset = $this->rows_per_page * ($this->page - 1); 

     //Fetch the required result set 
     $rs = @mysql_query($this->sql . " LIMIT {$this->offset}, {$this->rows_per_page}"); 
     if (! $rs) { 
      if ($this->debug) 
       echo "Pagination query failed. Check your query.<br /><br />Error Returned: " . mysql_error(); 
      return false; 
     } 
     return $rs; 
    } 

    /** 
    * Display the link to the first page 
    * 
    * @access public 
    * @param string $tag Text string to be displayed as the link. Defaults to 'First' 
    * @return string 
    */ 
    function renderFirst($tag = 'First') { 
     if ($this->total_rows == 0) 
      return FALSE; 

     if ($this->page == 1) { 
      return "$tag "; 
     } else { 
      return '<a href="' . $this->php_self . '?page=1&' . $this->append . '">' . $tag . '</a> '; 
     } 
    } 

    /** 
    * Display the link to the last page 
    * 
    * @access public 
    * @param string $tag Text string to be displayed as the link. Defaults to 'Last' 
    * @return string 
    */ 
    function renderLast($tag = 'Last') { 
     if ($this->total_rows == 0) 
      return FALSE; 

     if ($this->page == $this->max_pages) { 
      return $tag; 
     } else { 
      return ' <a href="' . $this->php_self . '?page=' . $this->max_pages . '&' . $this->append . '">' . $tag . '</a>'; 
     } 
    } 

    /** 
    * Display the next link 
    * 
    * @access public 
    * @param string $tag Text string to be displayed as the link. Defaults to '>>' 
    * @return string 
    */ 
    function renderNext($tag = '&gt;&gt;') { 
     if ($this->total_rows == 0) 
      return FALSE; 

     if ($this->page < $this->max_pages) { 
      return '<a href="' . $this->php_self . '?page=' . ($this->page + 1) . '&' . $this->append . '">' . $tag . '</a>'; 
     } else { 
      return $tag; 
     } 
    } 

    /** 
    * Display the previous link 
    * 
    * @access public 
    * @param string $tag Text string to be displayed as the link. Defaults to '<<' 
    * @return string 
    */ 
    function renderPrev($tag = '&lt;&lt;') { 
     if ($this->total_rows == 0) 
      return FALSE; 

     if ($this->page > 1) { 
      return ' <a href="' . $this->php_self . '?page=' . ($this->page - 1) . '&' . $this->append . '">' . $tag . '</a>'; 
     } else { 
      return " $tag"; 
     } 
    } 

    /** 
    * Display the page links 
    * 
    * @access public 
    * @return string 
    */ 
    function renderNav($prefix = '<span class="page_link">', $suffix = '</span>') { 
     if ($this->total_rows == 0) 
      return FALSE; 

     $batch = ceil($this->page/$this->links_per_page); 
     $end = $batch * $this->links_per_page; 
     if ($end == $this->page) { 
      //$end = $end + $this->links_per_page - 1; 
     //$end = $end + ceil($this->links_per_page/2); 
     } 
     if ($end > $this->max_pages) { 
      $end = $this->max_pages; 
     } 
     $start = $end - $this->links_per_page + 1; 
     $links = ''; 

     for($i = $start; $i <= $end; $i ++) { 
      if ($i == $this->page) { 
       $links .= $prefix . " $i " . $suffix; 
      } else { 
       $links .= ' ' . $prefix . '<a href="' . $this->php_self . '?page=' . $i . '&' . $this->append . '">' . $i . '</a>' . $suffix . ' '; 
      } 
     } 

     return $links; 
    } 

    /** 
    * Display full pagination navigation 
    * 
    * @access public 
    * @return string 
    */ 
    function renderFullNav() { 
     return $this->renderFirst() . '&nbsp;' . $this->renderPrev() . '&nbsp;' . $this->renderNav() . '&nbsp;' . $this->renderNext() . '&nbsp;' . $this->renderLast(); 
    } 

    /** 
    * Set debug mode 
    * 
    * @access public 
    * @param bool $debug Set to TRUE to enable debug messages 
    * @return void 
    */ 
    function setDebug($debug) { 
     $this->debug = $debug; 
    } 
} 
?> 

回答

0

您正在運行兩個查詢。一個這是我們用來展示的一切,和一個在,你根本無視尋呼機:

$result=mysql_query($sql); <-- the query you're actually using in the output portion 

    $rs = $pager->paginate(); <-- the second query you're utterly ignoring. 
    if(!$rs) die(mysql_error()); 

while($rows=mysql_fetch_array($result)) <--fetching/displaying the first query's results 

你應該做的$rs的讀取,不$result

+0

你是一個絕對的傳奇!那樣做了!謝謝! – Novice 2011-04-30 06:30:05

0

SELECT * FROM $tbl_name ORDER BY id DESC";

應該是: SELECT * FROM $tbl_name ORDER BY id DESC LIMIT 10";

您需要包括你也抵消。

SELECT * FROM $tbl_name ORDER BY id DESC LIMIT 10,10"; // for page 2

得到的記錄總數第一:

SELECT COUNT(*) as total FROM $tbl_name;

這會給你總,你可以用它爲您的分頁類 生成正確的偏移量,

此處的信息是使用您的分頁來計算每個頁面偏移量,以便您可以爲您的頁面提供正確的數據

$offset = $pagination->offset(); // what ever the correct method for calculating the offset 
$limit = 10; 

$sql="SELECT * FROM $tbl_name ORDER BY id DESC LIMIT $offset,$limit";