Basic Pagination

Discussion in 'PHP' started by johneva, Aug 20, 2010.

  1. #1
    Hi

    I have been trying to get this script working I copied it from a tutorial but carnt seem to get it to work.

    I have changed the database connection details back for obvious reasons.

    Can anybody tell me where I am going wrong with this?

    <?php 
     // database connection info
     $conn = mysql_connect('localhost', 'username', 'password') or trigger_error("SQL", E_USER_ERROR);
     $db = mysql_select_db('dbname',$conn) or trigger_error("SQL", E_USER_ERROR);
     
     // find out how many rows are in the table 
        $sql = "SELECT COUNT(*) FROM news";
        $result = mysql_query($sql, $conn) or trigger_error("SQL", E_USER_ERROR);
        $r = mysql_fetch_row($result);
        $numrows = $r[0];
        
        // number of rows to show per page
        $rowsperpage = 10;
        // find out total pages
        $totalpages = ceil($numrows / $rowsperpage);
        
        // get the current page or set a default
        if (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) {   
          // cast var as int   
          $currentpage = (int) $_GET['currentpage'];
        } else {   
          // default page num   
          $currentpage = 1;
        } // end if
        
        // if current page is greater than total pages...
        if ($currentpage > $totalpages) {   
        // set current page to last page   
        $currentpage = $totalpages;
        } // end if
        // if current page is less than first page...
        if ($currentpage < 1) {   
        // set current page to first page   
        $currentpage = 1;
        } // end if
        
        // the offset of the list, based on current page
        $offset = ($currentpage - 1) * $rowsperpage;
        
        // get the info from the db
        $sql = "SELECT *, number FROM news LIMIT $offset, $rowsperpage";
        $result = mysql_query($sql, $conn) or trigger_error("SQL", E_USER_ERROR);
        
        // while there are rows to be fetched...
        while ($list = mysql_fetch_assoc($result)) {   
        // echo data
        echo $list['id'] . " : " . $list['title'] . "<br />";
        } // end while
        
        
        if ($result > 0) { 
        //build the pagination links 
        // range of title links to show
        $range = 3;
        
      // if not on page 1, don't show back links
        if ($currentpage > 1) {   
        // show << link to go back to page 1   
        echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=1'><<</a> ";
        // get previous page num
        $prevpage = $currentpage - 1;
        // show < link to go back to 1 page
        echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$prevpage'><</a> ";
        } // end if
    
        // loop to show links to range of pages around current page
        for ($x = ($currentpage - $range); $x < (($currentpage + $range) + 1); $x++) {   
          // if it's a valid page number...
          if (($x > 0) && ($x <= $totalpages)) {
            // if we're on current page...
            if ($x == $currentpage) {
            // 'highlight' it but don't make a link
              echo " [<b>$x</b>] ";
              // if not current page...
            } else {
          // make it a link
              echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$x'>$x</a> ";
            } // end else
          } // end if
        } // end for
        
        // if not on last page, show forward and last page links
        if ($currentpage != $totalpages) {
        // get next page
        $nextpage = $currentpage + 1;
        // echo forward link for next page
        echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$nextpage'>></a> ";
        // echo forward link for lastpage
        echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$totalpages'>>></a> ";
        }    // end if
    } 
    ?>
    PHP:
     
    johneva, Aug 20, 2010 IP
  2. MyVodaFone

    MyVodaFone Well-Known Member

    Messages:
    1,048
    Likes Received:
    42
    Best Answers:
    10
    Trophy Points:
    195
    #2
    Try this:
    
    <?php 
     $conn = mysql_connect('localhost', 'username', 'password') or trigger_error("SQL", E_USER_ERROR);
     $db = mysql_select_db('dbname',$conn) or trigger_error("SQL", E_USER_ERROR);
     
     // find out how many rows are in the table
    $query = 'SELECT COUNT(*) FROM `news`';
    $result = mysql_query($query);
    
    $query_data = mysql_fetch_row($result);
    $numrows = $query_data[0];
       
        // number of rows to show per page
        $rowsperpage = 10;
        // find out total pages
        $totalpages = ceil($numrows / $rowsperpage);
       
        // get the current page or set a default
        if (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) {  
          // cast var as int  
          $currentpage = (int) $_GET['currentpage'];
        } else {  
          // default page num  
          $currentpage = 1;
        } // end if
       
        // if current page is greater than total pages...
        if ($currentpage > $totalpages) {  
        // set current page to last page  
        $currentpage = $totalpages;
        } // end if
        // if current page is less than first page...
        if ($currentpage < 1) {  
        // set current page to first page  
        $currentpage = 1;
        } // end if
       
        // the offset of the list, based on current page
        $offset = ($currentpage - 1) * $rowsperpage;
       
        // get the info from the db
    $sql = "SELECT * FROM news LIMIT $offset, $rowsperpage";
    $result = mysql_query($sql) or trigger_error("SQL", E_USER_ERROR);
       
        // while there are rows to be fetched...
        while ($list = mysql_fetch_assoc($result)) {  
        // echo data
        echo $list['id'] . " : " . $list['title'] . "<br />";
        } // end while
       
       
        if ($result > 0) {
        //build the pagination links
        // range of title links to show
        $range = 3;
       
      // if not on page 1, don't show back links
        if ($currentpage > 1) {  
        // show << link to go back to page 1  
        echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=1'><<</a> ";
        // get previous page num
        $prevpage = $currentpage - 1;
        // show < link to go back to 1 page
        echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$prevpage'><</a> ";
        } // end if
    
        // loop to show links to range of pages around current page
        for ($x = ($currentpage - $range); $x < (($currentpage + $range) + 1); $x++) {  
          // if it's a valid page number...
          if (($x > 0) && ($x <= $totalpages)) {
            // if we're on current page...
            if ($x == $currentpage) {
            // 'highlight' it but don't make a link
              echo " [<b>$x</b>] ";
              // if not current page...
            } else {
          // make it a link
              echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$x'>$x</a> ";
            } // end else
          } // end if
        } // end for
       
        // if not on last page, show forward and last page links
        if ($currentpage != $totalpages) {
        // get next page
        $nextpage = $currentpage + 1;
        // echo forward link for next page
        echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$nextpage'>></a> ";
        // echo forward link for lastpage
        echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$totalpages'>>></a> ";
        }    // end if
    }
    ?>
    
    PHP:
     
    MyVodaFone, Aug 20, 2010 IP
    johneva likes this.
  3. johneva

    johneva Well-Known Member

    Messages:
    1,480
    Likes Received:
    46
    Best Answers:
    1
    Trophy Points:
    170
    #3
    That worked great cheers.
     
    johneva, Aug 23, 2010 IP