Need help creating pagination for code

I was wondering if anyone knew how to create pagination for the attached code. I want it to display 10 entries per page.


<?php

$connection = mysql_connect ("localhost","", "") or die ("Cannot make the connection");
$db = mysql_select_db ("",$connection) or die ("Cannot connect to database");
$sql_query = "SELECT * FROM ava_abeonfbm1 ORDER BY id DESC LIMIT 20";
$result = mysql_query($sql_query);
if(mysql_num_rows($result))
{
//output as long as there are still available fields
while($row = mysql_fetch_row($result))
{
echo ("<div class=\\"gameInfo\\"><div style=\\"height:40px; margin-top:10px; padding:\\">$row[2]</div><img src=\\"$row[4]\\" width=\\"90\\" height=\\"90\\" /><a href=\\"$row[9]\\" target=\\"_blank\\"><img src=\\"http://collectionsarcade.com/images/icon_facebook_add.gif\\" /></a></div>") ;
//echo ("<a href=\\"$row[2]\\">$row[3]</a>");
//echo (": $row[4]<br>");
}
}
//if no fields exist
else
{
echo "no values in the database";
}

?>

This article takes you through all of the details to achieve Perfect PHP Pagination

this is a demo of the class I use for pagination.

the demo has prev, first, next, last and individual page links

you can specify the number of links per page.

i’ve included the sql to create the test table the demo uses if you want to play with it.

index.php

 
<?php
session_start();
//---------------------------------------------------------------------------------------------------------------------- 
//connect to the database 
$DBUserName = "xxxx";     //database user account name 
$DBPassword = "";     //database user account password    
$DBName = "xxxx";   //name of database
@$conn = mysql_connect("localhost", $DBUserName, $DBPassword) or die('<br />1-Cannot connect to the database at the moment.<br /><br />Please try again later.<br />');  //connect to mysql
@$isDbSelected = mysql_select_db($DBName, $conn) or die('<br />1-Cannot connect to the database at the moment.<br /><br />Please try again later.<br />');        //connect to the db
//---------------------------------------------------------------------------------------------------------------------- 
include('Paginator.php');
if (!isset($_SESSION['pageMaker'])) {
    $linesPerPage = 5;   //number of lines to print per page
    $numLinksDisplay = 5;    //number of page links to display at a time
    $query = 'select * from tblperson';
    $pageMaker = new Paginator($linesPerPage, $numLinksDisplay, $query, $conn);
} else {
    $pageMaker = unserialize($_SESSION['pageMaker']);
}
//set current page 
if (isset($_GET['type']))
    $pageMaker->setCurrPage($_GET['type'], $_GET['txtPgNum']);
//------------------------------------------------------------ 
//Code to retrieve the rows to display on the current page 
//------------------------------------------------------------ 
if (!$rs = $pageMaker->getPageRecords($conn))
    die('<p>**ERROR - cannot get records for the page at the moment.</p>');
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
        <title>Pagination</title>
        <!-- add the stylesheet for the page links -->
<?php echo $pageMaker->getLinkStyles(); ?> 
    </head>
    <body>
        <!-- Display the page links -->
        <div id="page_links_wrapper">
<?php echo $pageMaker->showLinks(); ?>
        </div>
        <!-- Code block to display the DB records for this page-->
        <table>
            <?php
            while ($row = mysql_fetch_assoc($rs)) {
                echo '<tr><td>' . $row['fldPersonID'] . '</td><td>' . $row['fldGivenName'] . '</td><td>' . $row['fldFamilyName'] . '</td></tr>';
            }
            mysql_free_result($rs);
            mysql_close($conn);
            ?>
        </table>
        <!-- End of code block to display the DB records for this page-->
        <?php
//hide or display the 'previous' and 'next' buttons as required 
            $pageMaker->applyLinkStyles();
//serialise the session's pageMaker object for the next call to this page 
            $_SESSION['pageMaker'] = serialize($pageMaker);
        ?>
    </body>
</html> 

Paginator.php

 
<?php
class Paginator {
    // Properties
    protected $linesPerPage;    //number of lines to print per page
    protected $numLinksDisplay;    //number of page links to display at a time
    protected $query;
    protected $currPage;
    protected $totRows;
    protected $totPages;
    protected $offset;
    /*     * *********************************************************************
      Class Constructor
     * ********************************************************************* */
    public function __construct($numLines, $numLinks, $query, $conn) {
        $this->linesPerPage = ceil($numLines);
        $this->numLinksDisplay = ceil($numLinks);
        $this->query = $query;
        $this->currPage = 1;
        $this->offset = 0;
        $this->initialise($conn);
    }
    /*     * *********************************************************************
      Class Accessor Methods
     * ********************************************************************* */
    public function setQuery($query, $conn) {
        $this->query = $query;
        $this->initialise($conn);
    }
    //-------------------------------------------------------------------------
    public function setCurrPage($type, $pageNum) {
        $pageNum = ceil($pageNum);
        //check which link was clicked
        switch ($type) {
            case 'pageLink':
                $this->currPage = $pageNum;
                break;
            case 'prevNext':
                $this->currPage = $this->currPage + $pageNum;
                if ($this->currPage < 1) {
                    $this->currPage = 1;
                }
                if ($this->currPage > $this->totPages) {
                    $this->currPage = $this->totPages;
                }
                break;
            case 'firstPg':
                $this->currPage = 1;
                break;
            case 'lastPg':
                $this->currPage = $this->totPages;
                break;
        }
        //calculate the offset of the first record number to retrieve from the DB for this page
        $this->offset = ($this->currPage * $this->linesPerPage) - $this->linesPerPage;
        if ($this->offset < 0) {
            $this->offset = 0;
        }
        if ($this->offset > $this->totRows) {
            $this->offset = $this->totRows;
        }
    }
    //-----------------------------------------------
    public function getCurrPage() {
        return $this->currPage;
    }
    /*     * *********************************************************************
      Class Methods
     * ********************************************************************* */
    private function initialise($conn) {
        //count all the records to work out max number of rows and number of pages needed
        $rs = @mysql_query($this->query, $conn) or die("<p>3-Server is busy.<br />Please try again later.</p>");
        $this->totRows = mysql_num_rows($rs); //total number of rows to display
        @mysql_free_result($rs);
        if ($this->totRows % $this->linesPerPage == 0) {
            $this->totPages = $this->totRows / $this->linesPerPage;
        } else {
            $this->totPages = round(($this->totRows / $this->linesPerPage) + 0.5);  //total number of pages required
        }
        $this->numLinksDisplay = ($this->numLinksDisplay > $this->totPages) ? $this->totPages : $this->numLinksDisplay;
        //echo $this->totRows.'<br />'.$this->totPages.'<br />'.$this->numLinksDisplay;  die();
    }
    //-------------------------------------------------------------------------------------
    public function getPageRecords($conn) {
        $query = $this->query . ' limit ' . $this->offset . ',' . $this->linesPerPage;
        $rs = @mysql_query($query, $conn);
        if (!$rs) {
            return false;
        } else {
            return $rs;
        }
    }
    //-------------------------------------------------------------------------------------
    public function showLinks() {
        if ($this->totPages <= 1)
            return;  //no need to display any links
 $str = '<div id="page_links_wrap">' .
                '<div id="page_links_summ">' .
                '<p id="totPages">Total pages: ' . $this->totPages . '</p>' .
                '<p id="totRows">Total records: ' . $this->totRows . '</p>' .
                '</div>' .
                '<div id="page-links-container">' .
                '<ul id="page-links">' .
                '<li id="liFirstPage"><a href="' . $_SERVER['PHP_SELF'] . '?txtPgNum=-1&amp;type=firstPg" title="Click to view first page">First</a></li>' .
                '<li id="liPrevPage"><a href="' . $_SERVER['PHP_SELF'] . '?txtPgNum=-1&amp;type=prevNext" title="Click to view previous page">Previous</a></li>';
        //calculate the min and max link numbers to display for this page
        if ($this->numLinksDisplay % 2 == 0) { //even number of links to display
            $limit1 = $this->currPage - $this->numLinksDisplay / 2;
            $limit2 = $this->currPage + ($this->numLinksDisplay / 2) - 1;
        } else { //odd number of links to display
            $limit1 = $this->currPage - ($this->numLinksDisplay - 1) / 2;
            $limit2 = $this->currPage + ($this->numLinksDisplay - 1) / 2;
        }
        if ($limit1 < 1 && $this->currPage < $this->numLinksDisplay)
            $limit1 = 1;
        if ($limit2 > $this->totPages)
            $limit2 = $this->totPages;
        //adjust the link numbers for when we are within $_SESSION['numLinksDisplay']/2 of either end
        if ($this->currPage <= $this->numLinksDisplay / 2)
            $limit2 = $this->numLinksDisplay;
        if ($this->currPage > $this->totPages - $this->numLinksDisplay / 2)
            $limit1 = $this->totPages - $this->numLinksDisplay + 1;
        //echo '<br />'.$_SESSION['currPage'].'<br />'.$limit1.'<br />'.$limit2.'<br /><br />';
        //display the page links
        for ($i = $limit1; $i <= $limit2; $i = $i + 1) {
            $str = $str . '<li id="liPg' . $i . '"><a href="' . $_SERVER['PHP_SELF'] . '?txtPgNum=' . $i . '&amp;type=pageLink" title="Go to page ' . $i . '">' . $i . '</a></li>';
        }
        $str = $str . '<li id="liNextPage"><a href="' . $_SERVER['PHP_SELF'] . '?txtPgNum=1&amp;type=prevNext" title="Click to view next page">Next</a></li>' .
                '<li id="liLastPage"><a href="' . $_SERVER['PHP_SELF'] . '?txtPgNum=-1&amp;type=lastPg" title="Click to view last page">Last</a></li>' .
                '</ul>' .
                '</div>' .
                '</div>';
        return $str;
    }
    //-------------------------------------------------------------------------------------
    public function getLinkStyles() {
        if ($this->totPages <= 1) {
            return;  //no need to display any links
        }
        $str = '<style type="text/css"> ' .
                '#page_links_wrap {' .
                //'border: 1px solid green; ' .
                'margin: 5px 0px 0px 0px; ' .
                'padding: 0px 0px 0px 0px; ' .
                'width: 270px}' .
                '#page-links-container { ' .
                'font-size: 8pt; ' .
                'font-family: tahoma, arial, sans serif; ' .
                'margin: 0px 0px 0px 0px; ' .
                'padding: 0px 0px 0px 0px} ' .
                '#page-links-container ul { ' .
                'clear: both; ' .
                'padding: 0px 0px 0px 0px; ' .
                'margin: 0px 0px 10px 0px;' .
                'list-style-type: none} ' .
                '#page-links-container ul li { ' .
                'display: inline; ' .
                'color: rgb(0,0,205); ' .
                'padding: 3px 4px 3px 4px; ' .
                'margin: 0px 0px 0px 6px} ' .
                '#page-links-container ul li a { ' .
                'text-decoration: none; ' .
                'font-size: 8pt} ' .
                '#page-links-container ul li a:hover { ' .
                'text-decoration: underline} ' .
                '#page-links-container ul li a:visited { ' .
                'color: rgb(0,0,205);} ' .
                '#page_links_summ { ' .
                'font-size: 8pt; ' .
                'font-family: tahoma, arial, sans serif; ' .
                'overflow: hidden} ' .
                '#totPages { ' .
                //'border: 1px solid blue; ' .
                'margin: 5px 0px 5px 10px; padding: 0px 0px 0px 0px;' .
                'float: left} ' .
                '#totRows { ' .
                //'border: 1px solid red; ' .
                'margin: 5px 10px 5px 0px; padding: 0px 0px 0px 0px;' .
                'float: right} ' .
                '</style> ';
        return $str;
    }
    //--------------------------------------------------------------------------------------
    public function applyLinkStyles() {
        if ($this->totPages <= 1)
            return;  //no need to display any links
            //hide or display the 'previous' and 'next' buttons as required
 if ($this->totPages == 1)
            echo '<script type="text/javascript">document.getElementById("page-links-container").style.display="none";</script>';
        if ($this->currPage == 1) {
            echo '<script type="text/javascript">document.getElementById("liPrevPage").disabled = true;</script>';
        } else {
            echo '<script type="text/javascript">document.getElementById("liPrevPage").disabled = false;</script>';
        }
        if ($this->currPage == $this->totPages) {
            echo '<script type="text/javascript">document.getElementById("liNextPage").disabled = true;</script>';
        } else {
            echo '<script type="text/javascript">document.getElementById("liNextPage").disabled = false;</script>';
        }
        //highlight the current page's page link
        echo '<script type="text/javascript">document.getElementById("liPg' . $this->currPage . '").style.backgroundColor="rgb(200,200,200)";</script>';
        echo '<script type="text/javascript">document.getElementById("liPg' . $this->currPage . '").style.border="1px solid rgb(0,0,0)";</script>';
    }
    //--------------------------------------------------------------------------------------
}
//end of class
?>

SQL to create the test database table

 
CREATE TABLE `tblperson` (
`fldPersonID` int(11) NOT NULL AUTO_INCREMENT,
`fldFamilyName` varchar(20) DEFAULT NULL,
`fldGivenName` varchar(20) DEFAULT NULL,
PRIMARY KEY (`fldPersonID`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
/*Data for the table `tblperson` */
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Sui','Steven');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Student','Mary');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Student','Sam');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Malik','Moore');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Soo','Malinda');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('flinstone','fred');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('rubble','barney');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('flinstone','wilma');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('flinstone','pebbles');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('smart','maxwell');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Soo','Malinda');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Sui','Steven');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Student','Mary');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Student','Sam');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Malik','Moore');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Soo','Malinda');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('flinstone','fred');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('rubble','barney');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('flinstone','wilma');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('flinstone','pebbles');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('smart','maxwell');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Soo','Malinda');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Sui','Steven');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Student','Mary');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Student','Sam');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Malik','Moore');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Soo','Malinda');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('flinstone','fred');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('rubble','barney');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('flinstone','wilma');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('flinstone','pebbles');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('smart','maxwell');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Soo','Malinda');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Sui','Steven');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Student','Mary');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Student','Sam');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Malik','Moore');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Soo','Malinda');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('flinstone','fred');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('rubble','barney');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('flinstone','wilma');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('flinstone','pebbles');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('smart','maxwell');
insert into `tblperson`(`fldFamilyName`,`fldGivenName`) values ('Soo','Malinda');