I don't know if the problem is same as what oliver-b mentioned but here is the brief code for temporary solution upto 40 page links which is divided for 20 page links displayed. If you want for more than that I guess you will have to pass more variable for the solution...
<?php
$dbhost = "";
$dbname = "";
$dbusername = "";
$dbpassword = "";
$connection = mysql_connect($dbhost, $dbusername, $dbpassword);
if (!$connection) { echo("ERROR: " . mysql_error() . "\n"); }
// the number of rows returned from database
$database = mysql_select_db($dbname,$connection);
$numresults = mysql_query("SELECT fieldname FROM tablename order by date ");
$numrows = mysql_num_rows($numresults);
$limit = 20;
// next determine if offset has been passed to script, if not use 0
if (!$offset) { $offset = 0; }
function pagelinkpreview()
{
global $limit,$offset,$pages,$numrows,$pagenumber;
// calculate number of pages needing links
$pages=intval(round($numrows/$limit));
// get previous page displayed
if ($offset>=$limit)
{
$newoff=$offset-$limit;
echo "<a href=\"$PHP_SELF?offset=$newoff\">PREV</a>";
}
else
{
echo "prev";
}
echo " ";
// get next page displayed
if ($offset<$limit*($pages-1))
{
$newoff=$offset+$limit;
echo "<a href=\"$PHP_SELF?offset=$newoff\">NEXT</a>";
}
else
{
echo "next";
}
echo " <br /><br /> ";
// get the page number displayed
// carefully go through the code since you may have to adjust the $lastoffsetnumber value
// according to your requirement also along with the other value like $pagelinkmax
// $pagegroupnumer variable is not necessary but for future purpose I have linked it.
echo "<font face=\"Verdana\" size=\"3\"><b>Pages: </b></font>";
$pagenumber=1;
$pagelinkmax=10;
$lastoffsetnumber=120;
$pagegroup=ceil($pages/$pagelinkmax);
$pagegroupnumber=1;
if ($offset <= $lastoffsetnumber)
{
while (($pagenumber <= $pages) and ($pagenumber <= $pagelinkmax))
{
if ((($pagenumber-1)$limit)==$offset)
{
print "<font size=2 color=#008800><b> $pagenumber </b></font>";
}
else
{
$newoff=($pagenumber-1)$limit;
echo "<a href=\"$PHP_SELF?offset=$newoff\"><font size=3> [$pagenumber] </font></a>";
}
$pagenumber++;
}
if ($pagegroupnumber<$pagegroup)
{
$newoff=($pagenumber-1)*$limit;
echo "<a href=\"$PHP_SELF?offset=$newoff&pagegroupnumber=$pagegroupnumber\"><font size=3> [Next 10 Pages] </font></a>";
}
}
else
{
$pagenumber=$pagenumber+10;
$pagelinkmax=$pagelinkmax+10;
$pagegroupnumber=$pagegroupnumber+1;
if ($offset>=$limit)
{
$newoff=$offset-$limit;
echo "<a href=\"$PHP_SELF?offset=$newoff&pagegroupnumber=$pagegroupnumber\"><font size=3> [Previous 10 Pages] </font></a>";
}
while (($pagenumber <= $pages) and ($pagenumber <= $pagelinkmax))
{
if ((($pagenumber-1)$limit)==$offset)
{
print "<font size=2 color=#008800><b> $pagenumber </b></font>";
}
else
{
$newoff=($pagenumber-1)$limit;
echo "<a href=\"$PHP_SELF?offset=$newoff\"><font size=3> [$pagenumber] </font></a>";
}
$pagenumber++;
}
if ($pagegroupnumber<$pagegroup)
{
$newoff=($pagenumber-1)*$limit;
$pagegroupnumber++;
echo "<a href=\"$PHP_SELF?offset=$newoff&pagegroupnumber=$pagegroupnumber\"><font size=3> [Next 10 Pages] </font></a>";
}
}
} // END FUNCTION
?>