Mega Code Archive

 
Categories / Php / Site Navigation
 

MySQL Paging Class

<?php function findStart($limit) { if ((!isset($_GET['page'])) || ($_GET['page'] == "1")) { $start = 0; $_GET['page'] = 1; } else { $start = ($_GET['page']-1) * $limit; } return $start; } /* * int findPages (int count, int limit) * Returns the number of pages needed based on a count and a limit */ function findPages($count, $limit) { $pages = (($count % $limit) == 0) ? $count / $limit : floor($count / $limit) + 1; return $pages; } /* * string pageList (int curpage, int pages) * Returns a list of pages in the format of "« < [pages] > »" **/ function pageList($curpage, $pages) { $page_list = ""; /* Print the first and previous page links if necessary */ if (($curpage != 1) && ($curpage)) { $page_list .= " <a href=\"".$_SERVER['PHP_SELF']."?page=1\" title=\"First Page\">«</a> "; } if (($curpage-1) > 0) { $page_list .= "<a href=\"".$_SERVER['PHP_SELF']."?page=".($curpage-1)."\" title=\"Previous Page\"><</a> "; } /* Print the numeric page list; make the current page unlinked and bold */ for ($i=1; $i<=$pages; $i++) { if ($i == $curpage) { $page_list .= "<b>".$i."</b>"; } else { $page_list .= "<a href=\"".$_SERVER['PHP_SELF']."?page=".$i."\" title=\"Page ".$i."\">".$i."</a>"; } $page_list .= " "; } /* Print the Next and Last page links if necessary */ if (($curpage+1) <= $pages) { $page_list .= "<a href=\"".$_SERVER['PHP_SELF']."?page=".($curpage+1)."\" title=\"Next Page\">></a> "; } if (($curpage != $pages) && ($pages != 0)) { $page_list .= "<a href=\"".$_SERVER['PHP_SELF']."?page=".$pages."\" title=\"Last Page\">»</a> "; } $page_list .= "</td>\n"; return $page_list; } /* * string nextPrev (int curpage, int pages) * Returns "Previous | Next" string for individual pagination (it's a word!) */ function nextPrev($curpage, $pages) { $next_prev = ""; if (($curpage-1) <= 0) { $next_prev .= "Previous"; } else { $next_prev .= "<a href=\"".$_SERVER['PHP_SELF']."?page=".($curpage-1)."\">Previous</a>"; } $next_prev .= " | "; if (($curpage+1) > $pages) { $next_prev .= "Next"; } else { $next_prev .= "<a href=\"".$_SERVER['PHP_SELF']."?page=".($curpage+1)."\">Next</a>"; } return $next_prev; } } ?> Example on how to use: <?php /* Instantiate class */ require_once("class.pager.php"); $p = new Pager; /* Show many results per page? */ $limit = 100; /* Find the start depending on $_GET['page'] (declared if it's null) */ $start = $p->findStart($limit); /* Find the number of rows returned from a query; Note: Do NOT use a LIMIT clause in this query */ $count = mysql_num_rows(mysql_query("SELECT field FROM table")); /* Find the number of pages based on $count and $limit */ $pages = $p->findPages($count, $limit); /* Now we use the LIMIT clause to grab a range of rows */ $result = mysql_query("SELECT * FROM table LIMIT ".$start.", ".$limit); /* Now get the page list and echo it */ $pagelist = $p->pageList($_GET['page'], $pages); echo $pagelist; /* Or you can use a simple "Previous | Next" listing if you don't want the numeric page listing */ //$next_prev = $p->nextPrev($_GET['page'], $pages); //echo $next_prev; /* From here you can do whatever you want with the data from the $result link. */ ?>