0

Pagination really confuses me. My code works but it only shows the first page. The next page doesn't work. I just want to show 3 records per page. Do you have to have another query to show the results of the second page?

<?php 

 // Connects to your Database 

 mysql_connect("localhost", "root", "") or die(mysql_error()); 

 mysql_select_db("db_pet") or die(mysql_error()); 


 //This checks to see if there is a page number. If not, it will set it to page 1 

 if (!(isset($pagenum))) 

 { 

 $pagenum = 1; 

 } 



 //Here we count the number of results 

 //Edit $data to be your query 

 $data = mysql_query("SELECT * FROM tb_pet") or die(mysql_error()); 

 $rows = mysql_num_rows($data); 



 //This is the number of results displayed per page 

 $page_rows = 3; 



 //This tells us the page number of our last page 

 $last = ceil($rows/$page_rows); 



 //this makes sure the page number isn't below one, or more than our maximum pages 

 if ($pagenum < 1) 

 { 

 $pagenum = 1; 

 } 

 elseif ($pagenum > $last) 

 { 

 $pagenum = $last; 

 } 



 //This sets the range to display in our query 

$max = 'limit ' .($pagenum - 1) * $page_rows .',' .$page_rows; 






 //This is your query again, the same one... the only difference is we add $max into it

 $data_p = mysql_query("SELECT * FROM tb_pet $max") or die(mysql_error()); 


 //This is where you display your query results

 while($info = mysql_fetch_array($data_p)) 

 { 

 Print $info['pet_name']; 

 echo "<br>";

 } 

 echo "<p>";


 // This shows the user what page they are on, and the total number of pages

echo " --Page $pagenum of $last-- <p>";


 // First we check if we are on page one. If we are then we don't need a link to the previous page or the first page so we do nothing. If we aren't then we generate links to the first page, and to the previous page.

 if ($pagenum == 1) 

 {

 } 

 else 

 {

 echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=1'> <<-First</a> ";

 echo " ";

 $previous = $pagenum-1;

 echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$previous'> <-Previous</a> ";

 } 


 //just a spacer

echo " ---- ";


 //This does the same as above, only checking if we are on the last page, and then generating the Next and Last links

 if ($pagenum == $last) 

 {

 } 

 else {

 $next = $pagenum+1;

 echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$next'>Next -></a> ";

 echo " ";

 echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$last'>Last ->></a> ";

 } 

 ?> 
9
  • 2
    I don't see how you pass page number to your code. Should be like $pagenum = isset($_GET['pagenum']) ? (int)$_GET['pagenum'] : 1 Commented Sep 11, 2012 at 11:13
  • 1
    See comment above, second your result never returns any different results without a LIMIT from the offset from and to the page rows (10 results per page, 0,9 - 10,19, etc). Commented Sep 11, 2012 at 11:15
  • 1
    Seriously...there are 20 other people who asked the same question. Searching for php mysql pagination on google will give you like 400000 results Commented Sep 11, 2012 at 11:18
  • 1
    @user1551672 PHP manual Commented Sep 11, 2012 at 11:20
  • 1
    @user1551672 so you dont really see a difference between ` ` (empty line) and $pagenum = isset($_GET['pagenum']) ? (int)$_GET['pagenum'] : 1 Commented Sep 11, 2012 at 11:28

1 Answer 1

1
if (!(isset($pagenum))) {
    $pagenum = 1;
}

you have not set $pagenum any where on this line instead it should be

if (!(isset($_GET['pagenum']))) {
   $pagenum = 1;
 }else{
   $pagenum = $_GET['pagenum'];
 }

it is just fix for your code, you need to improve the way you write code and try using PDO instead mysql functions

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.