PHP Pagination

In this tutorial I’m going to show you how to create a pagination. The concept behind pagination, let’s say we have one million records in our database and we probably we don’t want to see that entire record in the our web browser at once. Instead we’re going to return a subset of results and the first page may consist 20 records on it. And then we have another link to our next page that has other sets of record and you go back to the previous records. Any Paginated web page may require two sets of information, the Subset of records on the current page and the information about the complete set of records. To start with this application, create a new folder in our root directory called ”pagination”. Then if you don’t have a twitter bootstrap framework, you need to download this framework now for this well be using it for this project. Then extract it and copy the three folders such as: css,fonts and js and paste it inside pagination folder located at the local server. Here’s the folder structure: pagination/ ├── css/ │ ├── bootstrap.css │ ├── bootstrap.min.css │ ├── bootstrap-theme.css │ ├── bootstrap-theme.min.css ├── js/ │ ├── bootstrap.js │ ├── bootstrap.min.js └── fonts/ ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.svg ├── glyphicons-halflings-regular.ttf └── glyphicons-halflings-regular.woff Next, here’s the MySQL table structure used in this application.
  1. CREATE TABLE IF NOT EXISTS `employees` (
  2.   `EMPLOYEE_ID` INT(11) NOT NULL,
  3.   `FIRST_NAME` VARCHAR(255) DEFAULT NULL,
  4.   `LAST_NAME` VARCHAR(255) DEFAULT NULL,
  5.   `EMAIL` VARCHAR(255) DEFAULT NULL,
  6.   `PHONE_NUMBER` VARCHAR(255) DEFAULT NULL,
  7.   `HIRE_DATE` datetime DEFAULT NULL,
  8.   `JOB_ID` VARCHAR(255) DEFAULT NULL,
  9.   `SALARY` INT(11) DEFAULT NULL,
  10.   `COMMISSION_ID` INT(11) DEFAULT NULL,
  11.   `MANAGER_ID` INT(11) DEFAULT NULL,
  12.   `DEPARTMENT_ID` INT(11) DEFAULT NULL,
  13.   PRIMARY KEY (`EMPLOYEE_ID`),
  14.   KEY `COMMISSION_ID` (`COMMISSION_ID`),
  15.   KEY `DEPARTMENT_ID` (`DEPARTMENT_ID`),
  16.   KEY `JOB_ID` (`JOB_ID`),
  17.   KEY `MANAGER_ID` (`MANAGER_ID`)
  18. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  19.  
  20. --
  21. -- Dumping data for table `employees`
  22. --
  23.  
  24. INSERT INTO `employees` (`EMPLOYEE_ID`, `FIRST_NAME`, `LAST_NAME`, `EMAIL`, `PHONE_NUMBER`, `HIRE_DATE`, `JOB_ID`, `SALARY`, `COMMISSION_ID`, `MANAGER_ID`, `DEPARTMENT_ID`) VALUES
  25. (100, 'steven', 'King', 'sKing', '213-231-2313', '1987-06-17 00:00:00', 'AD_PRESS', 24000, NULL, 100, 90),
  26. (101, 'neena', 'Kochar', 'nKochar', '123-1231-212', '1989-09-21 00:00:00', 'AD_VP', 17000, NULL, 100, 90),
  27. (102, 'lex', 'De Haan', 'lDe Haan', '113-2122-2121', '1990-01-13 00:00:00', 'AD_VP', 17000, NULL, 100, 90),
  28. (103, 'alexander', 'Hunold', 'aHunold', '211-4515-1515', '1991-05-21 00:00:00', 'IT_PROG', 9000, NULL, 102, 60),
  29. (104, 'Bruce', 'Ernst', 'bErnst', '515-541-151', '1999-07-02 00:00:00', 'IT_PROG', 6000, NULL, 103, 60),
  30. (107, 'Diana', 'Lorents', 'dLorents', '515-515-5156', '1999-11-16 00:00:00', 'IT_PROG', 4200, NULL, 103, 60),
  31. (124, 'Kevin', 'Mourgos', 'kMourgos', '559-887-333', '1995-10-17 00:00:00', 'IT_PROG', 5800, NULL, 100, 50),
  32. (141, 'Trenne', 'Rajs', 'tRajs', '212-548-989', '1997-01-29 00:00:00', 'ST_MAN', 3500, NULL, 124, 50),
  33. (142, 'Curtis', 'Davies', 'cDavies', '333-999-777', '1998-03-15 00:00:00', 'ST_CLERK', 3100, NULL, 124, 50),
  34. (143, 'Randal', 'Matos', 'rMatos', '4444-5654-54', '1998-09-07 00:00:00', 'ST_CLERK', 2600, NULL, 124, 50),
  35. (144, 'Peter', 'Vargas', 'pVargas', '6565-5641-87', '2000-01-10 00:00:00', 'ST_CLERK', 2500, NULL, 124, 50),
  36. (149, 'Ellen', 'Zlotkey', 'eZlotkey', '656-4847-45', '1996-11-05 00:00:00', 'ST_CLERK', 10500, NULL, 100, 50),
  37. (174, 'Jonathan', 'Abel', 'jAbel', '5988-4556-564', '1999-05-24 00:00:00', 'SA_MAN', 11000, 0, 100, 80),
  38. (176, 'Kimberly', 'Taylor', 'kTaylor', '687-695-8754', '1987-09-17 00:00:00', 'SA_REP', 8600, 0, 149, 80),
  39. (178, 'Jinnefer', 'Grant', 'jGrant', '552-6541-897', '1996-02-17 00:00:00', 'SA_REP', 7000, 0, 149, 80),
  40. (200, 'Michael', 'Whalen', 'mWhalen', '2121-5465-541', '1997-08-17 00:00:00', 'SA_REP', 4400, 0, 149, NULL),
  41. (201, 'Pat', 'Hartstein', 'pHartstein', '14564-541-45', '1994-07-07 00:00:00', 'AD_ASST', 13000, NULL, 101, 10),
  42. (205, 'Shelley', 'Fay', 'sFay', '515-215-1156', '1994-07-07 00:00:00', 'MK_MAN', 6000, NULL, 100, 20),
  43. (206, 'William', 'Higgins', 'wHiggins', '566-112-5156', '1995-09-26 00:00:00', 'AC_MGR', 12000, NULL, 201, 20),
  44. (207, 'hatch', 'Glets', 'hGlets', '556-5465-515', '1989-03-07 00:00:00', 'AC_ACCOUNT', 8300, NULL, 101, 110);
At this time we will create a new PHP file called “pagination.php”, then add the following code. The code below has an explanation in every line so that it could guides you to understand the concepts and the importance of using the pagination.
  1. <!DOCTYPE html>
  2.  
  3. <html lang="en">
  4. <head>
  5.         <meta charset="utf-8">
  6.         <meta content="width=device-width, initial-scale=1.0" name="viewport">
  7.         <meta content="" name="description">
  8.         <meta content="" name="author">
  9.         <link href="" rel="shortcut icon">
  10.  
  11.         <title>Pagination</title><!-- Bootstrap core CSS -->
  12.         <link href="css/bootstrap.css" rel="stylesheet">
  13.         <link href="css/bootstrap-responsive.css" rel="stylesheet">
  14. </head>
  15.  
  16. <body>
  17.         <div class="container">
  18.                 <div class="well">
  19.                         <h2>Pagination</h2>
  20.                 </div>
  21.  
  22.                 <div class="well">
  23.                         <table class="table table-condensed">
  24.                                 <thead>
  25.                                         <tr>
  26.                                                 <th>Employee ID</th>
  27.                                                 <th>Last Name</th>
  28.                                                 <th>First Name</th>
  29.                                                 <th>Email</th>
  30.                                                 <th>Salary</th>
  31.                                         </tr>
  32.                                 </thead>
  33.  
  34.                                 <tbody>
  35.                                         <?php
  36.                                         //create a mySQL connection
  37.                                         $dbhost    = 'localhost';
  38.                                         $dbuser    = 'root';
  39.                                         $dbpass    = '';
  40.                                         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
  41.                                         if (!$conn) {
  42.                                                 die('Could not connect: ' . mysql_error());
  43.                                         }
  44.                                         mysql_select_db('oracledbm');
  45.                                         /* Get total number of records */
  46.                                         $sql    = "SELECT count(*) FROM employees ";
  47.                                         $retval = mysql_query($sql, $conn);
  48.                                        
  49.                                         if (!$retval) {
  50.                                                 die('Could not get data: ' . mysql_error());
  51.                                         }
  52.                                        
  53.                                         //this is the current page per number ($current_page)  
  54.                                         $current_page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
  55.                                
  56.                                         //record per Page($per_page)   
  57.                                         $per_page = 5;
  58.                                         //total count record ($total_count)
  59.                                         $row = mysql_fetch_array($retval, MYSQL_NUM);
  60.                                     $total_count = $row[0];
  61.                                        
  62.                                         //it gets the result of total_count over per page
  63.                                         $total_pages = $total_count/$per_page;
  64.                                         //get the off set current page minus 1 multiply by record per page     
  65.                                         $offset = ($current_page - 1) * $per_page;
  66.                                         //move to previous record by subtracting one into the current record
  67.                                         $previous_page = $current_page - 1;
  68.                                         //mvove to next record by incrementing the current page by one         
  69.                                         $next_page = $current_page + 1;
  70.                                         //check if previous record is still greater than one then it returns to true
  71.                                         $has_previous_page =  $previous_page >= 1 ? true : false;
  72.                                         //check if Next record is still lesser than one total pages then it returns to true
  73.                                         $has_next_page = $next_page <= $total_pages ? true : false;
  74.                                        
  75.                                         //find records of employee and we specify the offset and the limit record per page
  76.                                         $sql = "SELECT employee_id, LAST_NAME, FIRST_NAME, EMAIL, salary FROM employees LIMIT {$per_page} OFFSET {$offset}";
  77.                                         $retval = mysql_query($sql, $conn);
  78.                                         if (!$retval) {
  79.                                                 die('Could not get data: ' . mysql_error());
  80.                                         }
  81.                                         while ($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
  82.                                                 echo '<tr>';
  83.                                                 echo '<td>' . $row['employee_id'] . '</td>';
  84.                                                 echo '<td>' . $row['LAST_NAME'] . '</td>';
  85.                                                 echo '<td>' . $row['FIRST_NAME'] . '</td>';
  86.                                                 echo '<td>' . $row['EMAIL'] . '</td>';
  87.                                                 echo '<td>' . $row['salary'] . '</td>';
  88.                                                
  89.                                         }
  90.  
  91.                                         echo '</tr>';
  92.                                         echo '</tbody>';
  93.                                         echo '</table>';
  94.                                        
  95.                                         echo '<ul class="pagination" align="center">';
  96.                                                                        
  97.                                         if ($total_pages > 1){
  98.                                                 //this is for previous record
  99.                                                 if ($has_previous_page){
  100.                                                 echo ' <li><a href=pagination.php?page='.$previous_page.'>&laquo; </a> </li>';
  101.                                                 }
  102.                                                  //it loops to all pages
  103.                                                  for($i = 1; $i <= $total_pages; $i++){
  104.                                                         //check if the value of i is set to current page       
  105.                                                         if ($i == $current_page){
  106.                                                         //then it sset the i to be active or focused
  107.                                                                 echo '<li class="active"><span>'. $i.' <span class="sr-only">(current)</span></span></li>';
  108.                                                          }else {
  109.                                                          //display the page number
  110.                                                                 echo ' <li><a href=pagination.php?page='.$i.'> '. $i .' </a></li>';
  111.                                                          }
  112.                                                  }
  113.                                                 //this is for next record              
  114.                                                 if ($has_next_page){
  115.                                                 echo ' <li><a href=pagination.php?page='.$next_page.'>&raquo;</a></li> ';
  116.                                                 }
  117.                                                
  118.                                         }
  119.                                        
  120.                                         echo '</ul>';
  121.                                         mysql_close($conn);
  122.                                         ?>
  123.                                 </tbody>
  124.                         </table>
  125.                 </div>
  126.         </div>
  127. </body>
  128. </html>
After executing this application, it should look like as shown below:

Add new comment