MySQL Pager class
12
This is a mysql php pager class that I found online somewhere and modified.
<?php
/**************************************************************************************
* Class: Pager
* Methods:
* findStart
* findPages
* pageList
* nextPrev
**************************************************************************************/
class Pager
{
/***********************************************************************************
* int findStart (int limit)
* Returns the start offset based on $_GET['page'] and $limit
***********************************************************************************/
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\" class='aPager'>«</a> ";
}
if (($curpage-1) > 0)
{
$page_list .= "<a href=\"".$_SERVER['PHP_SELF']."?page=".($curpage-1)."\" title=\"Previous Page\" class='aPager'><</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."\" class='aPager'>".$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\" class='aPager'>></a> ";
}
if (($curpage != $pages) && ($pages != 0))
{
$page_list .= "<a href=\"".$_SERVER['PHP_SELF']."?page=".$pages."\" title=\"Last Page\" class='aPager'>»</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;
}
}
?>






Instead, use this little nifty trick to get the total number of rows, regardless of what you set for a LIMIT in the query, ex.:
SELECT SQL_CALC_FOUND_ROWS * FROM tblData LIMIT 0, 30;
and then do:
SELECT FOUND_ROWS();
The first query will return your first 30 records, while the second query will return how many rows would have been returned without the use of LIMIT.
This is much better suited for these types of scenarios, since you won't have to actually pull every single record or use any expensive aggregate functions to find out something this simple.