SitePoint Sponsor

User Tag List

Results 1 to 3 of 3
  1. #1
    SitePoint Enthusiast
    Join Date
    Dec 2009
    Posts
    60
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    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.

    Code:
    <?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";
    }
    
    ?>
    AllTopExchange - Banner Ad Network
    40,000+ Free Impressions When You Join.

    TrinityClicks Best GPT Site EVER! Join Now!

  2. #2
    Unobtrusively zen silver trophybronze trophy
    paul_wilkins's Avatar
    Join Date
    Jan 2007
    Location
    Christchurch, New Zealand
    Posts
    14,678
    Mentioned
    99 Post(s)
    Tagged
    4 Thread(s)
    This article takes you through all of the details to achieve Perfect PHP Pagination
    Programming Group Advisor
    Reference: JavaScript, Quirksmode Validate: HTML Validation, JSLint
    Car is to Carpet as Java is to JavaScript

  3. #3
    Non-Member Kalon's Avatar
    Join Date
    Aug 2010
    Location
    At my computer
    Posts
    2,012
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    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

    Code:
     
    <?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

    Code:
     
    <?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


    Code SQL:
    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');


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •