I have the following code, which is the basis for pagination in a larger application. However, it does not work, as although I should be obtaining the value of pg from the url, pg never goes higher than 2. For some reason, next = pg+1; seems to always see pg as 1, regardless of what is passed on the url. It is a similar problem with last. I assume I am overriding the value obtained from GET, but I am unsure where.
The problem seems to be in how I am working out $max and the limit, as instead of 0, 10, -10, 10 gets passed. Also the ifcode before $max does not seem to succeed in stopping pg from being 0.
<?php if (isset($_GET['pg'])) { $pg = $_GET['pg']; } else $pg = 1; $con = mysql_connect('localhost','',''); if(!$con) { die('Connection failed because of' .mysql_error()); } mysql_select_db('ebay',$con); if ($pg < 1) { $pg = 1; } elseif ($pg > $last) { $pg = $last; } $table = 'AUCTIONS'; $page_rows = 10; $max = ' limit ' .($pg - 1) * $page_rows .', ' .$page_rows; $rows = getRowsByArticleSearch($query, $table, $max); $rowcount = count($rows); echo $rowcount; $last = ceil($rowcount/$page_rows); $page_rows = 10; $rowcount = 2; // Would normally obtain the number of rows returned, but database stuff is snipped for brevity $last = ceil($rowcount/$page_rows); if ($pg < 1) { $pg = 1; } elseif ($pg > $last) { $pg = $last; } $self = htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'utf-8'); echo ' <a href='$self?pg=1'> <<-First</a> '; $previous = $pg-1; echo ' <a href='$self?pg=$previous'> <-Previous</a> '; echo '---------------------------'; $next = $pg+1; echo ' <a href='$self?pg=$next'>Next -></a> '; echo ' <a href='$self?pg=$last'>Last ->></a> ';
based on the now revised question:
will naturally always return 10, as you’re limiting the result
But this might help:
SQL CALC FOUND ROWS Example:
The first query will still return your articles, while the second will return the number of rows the previous select would have had if not using the LIMIT clause.
Hope that helps.