0

hi everybody,
I am doing pagination.
if I set the limit to 5 and the no of result is 30, then 6 pages is shown as the overall page).
however, only the first 5 results is shown.
How should I change the code?
many thanks

<?php 
   /* call this script "advs.php" */
   //if(!$c) { 
   if(!$_GET['c']) { 
//"c" variable to $_GET['c'] and the "all" "any" and "none" variables to $_POST['all'] 
?>
  <?php
$all= $_POST['all'] ;
 $any= $_POST['any'] ;
 $none=$_POST['none'] ;
 
 
//this makes sure the page number isn't below one, or more than our maximum pages
$pageno = (int)$pageno;
if ($pageno > $lastpage) {
   $pageno = $lastpage;
} 
if ($pageno < 1) {
   $pageno = 1;
} 
 mysql_connect("localhost","root","rootroot");
 MySQL_select_db("coas5");
 
   if((!$all) || ($all == "")) { $all = ""; } else { $all = "+(".$all.")"; }
   if((!$_POST['all'] ) || ($_POST['all']  == "")) { $_POST['all']  = ""; } else { $_POST['all']  = "+(".$_POST['all'] .")"; }
   if((!$any) || ($any == "")) { $any = ""; } 
   if((!$none) || ($none == "")) { $none = ""; } else { $none = "-(".$none.")"; }
  
   $query = " SELECT count(*),
          MATCH(subject, learningArea, noofstudents, topic, ability) AGAINST ('$all $none $any' IN BOOLEAN MODE) 
          FROM lesson
       WHERE MATCH(subject, learningArea, noofstudents, topic, ability) AGAINST ('$all $none $any' IN BOOLEAN MODE) AND lesson.verified= 'yes' " ;
      
	  $artm1 = MySQL_query($query);
	  $query_data = mysql_fetch_row($artm1);
	  $numrows = $query_data[0];
     
$rows_per_page = 2;
$lastpage      = ceil($numrows/$rows_per_page);
	
$pageno = (int)$pageno;
if ($pageno > $lastpage) {
   $pageno = $lastpage;
} 
if ($pageno < 1) {
   $pageno = 1;
} 


//This sets the range to display in our query
$limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page;

$query = " SELECT *,
          MATCH(subject, learningArea, noofstudents, topic, ability) AGAINST ('$all $none $any' IN BOOLEAN MODE) 
          FROM lesson
       WHERE MATCH(subject, learningArea, noofstudents, topic, ability) AGAINST ('$all $none $any' IN BOOLEAN MODE) AND lesson.verified= 'yes' $limit" ;
       $artm1 = MySQL_query($query);

 if(MySQL_num_rows($artm1) > 0) {
           echo "<b>Lesson Plans Matches</b><br>";
		 echo "<table>";
		 echo "<table border='1'>";
          echo "<tr><td>Lesson ID </td><td>Subject </td><td>Learning area</td> <td>Topic</td> <td>Time period</td><td>Ability</td></tr>";
             
			 while($artm2 = MySQL_fetch_array($artm1)) {
           	  echo "<td><a href='customise1.php?lessonID=  {$artm2['lessonID']}; '>  {$artm2['lessonID']}</a></td>";
//echo "<td>{$artm2['lessonID']}</td>";
			echo "<td>{$artm2['subject']}</td>";
			echo "<td>{$artm2['learningArea']}</td>";
			echo "<td>{$artm2['topic']}</td>";
			echo "<td>{$artm2['minutes']}</td>";
			echo "<td>{$artm2['ability']}</td></tr>";
         }
      echo "</table>";
   }
  else { 
      echo "No Results were found in this category.<br>"; 
   } 

if ($pageno == 1) {
   echo " FIRST PREV ";
} else {
   echo " <a href='{$_SERVER['PHP_SELF']}?pageno=1'>FIRST</a> ";
   $prevpage = $pageno-1;
   echo " <a href='{$_SERVER['PHP_SELF']}?pageno=$prevpage'>PREV</a> ";
} 

//Next we inform the user of his current position in the sequence of available pages.

echo " ( Page $pageno of $lastpage ) ";

//This code will provide the links for any following pages.

if ($pageno == $lastpage) {
   echo " NEXT LAST ";
} else {
   $nextpage = $pageno+1;
   echo " <a href='{$_SERVER['PHP_SELF']}?pageno=$nextpage'>NEXT</a> ";
   echo " <a href='{$_SERVER['PHP_SELF']}?pageno=$lastpage'>LAST</a> ";
} // if
}
   echo "<br>"; 
   
  ?>
2
Contributors
4
Replies
5
Views
7 Years
Discussion Span
Last Post by tulipputih
0

You need to put a LIMIT in your mysql statement for it to do what you want it to do....

SELECT * FROM `your_table` LIMIT 0, 10; # << This will display the first 10 results from the database.

SELECT * FROM `your_table` LIMIT 5, 5; # << This will show records 6, 7, 8, 9, and 10

You should aim to do something like

$query = " SELECT count(*),
          MATCH(subject, learningArea, noofstudents, topic, ability) AGAINST ('$all $none $any' IN BOOLEAN MODE) 
          FROM lesson
       WHERE MATCH(subject, learningArea, noofstudents, topic, ability) AGAINST ('$all $none $any' IN BOOLEAN MODE) AND lesson.verified= 'yes'  LIMIT $offset, $limit" ;

## $offset should be something like $pageno * $limit
## $limit should obviously be how many you want to show per page

hi everybody,
I am doing pagination.
if I set the limit to 5 and the no of result is 30, then 6 pages is shown as the overall page).
however, only the first 5 results is shown.
How should I change the code?
many thanks

<?php 
   /* call this script "advs.php" */
   //if(!$c) { 
   if(!$_GET['c']) { 
//"c" variable to $_GET['c'] and the "all" "any" and "none" variables to $_POST['all'] 
?>
  <?php
$all= $_POST['all'] ;
 $any= $_POST['any'] ;
 $none=$_POST['none'] ;
 
 
//this makes sure the page number isn't below one, or more than our maximum pages
$pageno = (int)$pageno;
if ($pageno > $lastpage) {
   $pageno = $lastpage;
} 
if ($pageno < 1) {
   $pageno = 1;
} 
 mysql_connect("localhost","root","rootroot");
 MySQL_select_db("coas5");
 
   if((!$all) || ($all == "")) { $all = ""; } else { $all = "+(".$all.")"; }
   if((!$_POST['all'] ) || ($_POST['all']  == "")) { $_POST['all']  = ""; } else { $_POST['all']  = "+(".$_POST['all'] .")"; }
   if((!$any) || ($any == "")) { $any = ""; } 
   if((!$none) || ($none == "")) { $none = ""; } else { $none = "-(".$none.")"; }
  
   $query = " SELECT count(*),
          MATCH(subject, learningArea, noofstudents, topic, ability) AGAINST ('$all $none $any' IN BOOLEAN MODE) 
          FROM lesson
       WHERE MATCH(subject, learningArea, noofstudents, topic, ability) AGAINST ('$all $none $any' IN BOOLEAN MODE) AND lesson.verified= 'yes' " ;
      
	  $artm1 = MySQL_query($query);
	  $query_data = mysql_fetch_row($artm1);
	  $numrows = $query_data[0];
     
$rows_per_page = 2;
$lastpage      = ceil($numrows/$rows_per_page);
	
$pageno = (int)$pageno;
if ($pageno > $lastpage) {
   $pageno = $lastpage;
} 
if ($pageno < 1) {
   $pageno = 1;
} 


//This sets the range to display in our query
$limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page;

$query = " SELECT *,
          MATCH(subject, learningArea, noofstudents, topic, ability) AGAINST ('$all $none $any' IN BOOLEAN MODE) 
          FROM lesson
       WHERE MATCH(subject, learningArea, noofstudents, topic, ability) AGAINST ('$all $none $any' IN BOOLEAN MODE) AND lesson.verified= 'yes' $limit" ;
       $artm1 = MySQL_query($query);

 if(MySQL_num_rows($artm1) > 0) {
           echo "<b>Lesson Plans Matches</b><br>";
		 echo "<table>";
		 echo "<table border='1'>";
          echo "<tr><td>Lesson ID </td><td>Subject </td><td>Learning area</td> <td>Topic</td> <td>Time period</td><td>Ability</td></tr>";
             
			 while($artm2 = MySQL_fetch_array($artm1)) {
           	  echo "<td><a href='customise1.php?lessonID=  {$artm2['lessonID']}; '>  {$artm2['lessonID']}</a></td>";
//echo "<td>{$artm2['lessonID']}</td>";
			echo "<td>{$artm2['subject']}</td>";
			echo "<td>{$artm2['learningArea']}</td>";
			echo "<td>{$artm2['topic']}</td>";
			echo "<td>{$artm2['minutes']}</td>";
			echo "<td>{$artm2['ability']}</td></tr>";
         }
      echo "</table>";
   }
  else { 
      echo "No Results were found in this category.<br>"; 
   } 

if ($pageno == 1) {
   echo " FIRST PREV ";
} else {
   echo " <a href='{$_SERVER['PHP_SELF']}?pageno=1'>FIRST</a> ";
   $prevpage = $pageno-1;
   echo " <a href='{$_SERVER['PHP_SELF']}?pageno=$prevpage'>PREV</a> ";
} 

//Next we inform the user of his current position in the sequence of available pages.

echo " ( Page $pageno of $lastpage ) ";

//This code will provide the links for any following pages.

if ($pageno == $lastpage) {
   echo " NEXT LAST ";
} else {
   $nextpage = $pageno+1;
   echo " <a href='{$_SERVER['PHP_SELF']}?pageno=$nextpage'>NEXT</a> ";
   echo " <a href='{$_SERVER['PHP_SELF']}?pageno=$lastpage'>LAST</a> ";
} // if
}
   echo "<br>"; 
   
  ?>
0

You need to put a LIMIT in your mysql statement for it to do what you want it to do....

SELECT * FROM `your_table` LIMIT 0, 10; # << This will display the first 10 results from the database.

SELECT * FROM `your_table` LIMIT 5, 5; # << This will show records 6, 7, 8, 9, and 10

You should aim to do something like

$query = " SELECT count(*),
          MATCH(subject, learningArea, noofstudents, topic, ability) AGAINST ('$all $none $any' IN BOOLEAN MODE) 
          FROM lesson
       WHERE MATCH(subject, learningArea, noofstudents, topic, ability) AGAINST ('$all $none $any' IN BOOLEAN MODE) AND lesson.verified= 'yes'  LIMIT $offset, $limit" ;

## $offset should be something like $pageno * $limit
## $limit should obviously be how many you want to show per page

OK, BUT i WANT ALL THE RESULT TO BE DISPLAYED ACCORDING TO HOW MANY PAGES I SPECIFY ;
$rows_per_page = 2;
$lastpage = ceil($numrows/$rows_per_page);

0

i don't understand what your trying to do sorry.

if you want tio display 5 results per page and be able to click through the pages you don't need $rows_per_page = 2;
$lastpage = ceil($numrows/$rows_per_page);

all you need to do is what i said in the previous post, then put $pageno = 1 in the url and then the "next" link should be $pageno=2 then $offset can be calculated by $offset = $pageno * $limit;

i would edit your code for you but it's a bit all over the place and my boss wouldn't be too happy if i spent half my day trying to fix it.

if you can't get this working i would usggest starting simple, starting fresh and starting with a simple query and home amde pagination system then add to it to get what you want.

0

maybe this is better to explain my problem.
Any suggestion please?
thank you


this is current output of my code

let say I set the row to be displayed per page is 5, and there are 9 results.
the following output is displayed. the output is perfect in the first page

Lesson Plans Matches

Lesson ID Learning area T
52 Computer Systems
53 Computer Systems
61 ICT and Society
75 Computer Systems
91 Computer Systems
FIRST PREV ( Page 1 of 2 ) NEXT LAST

When I click next, supposed the 2nd page will be displayed..
and this should be there( Page 2 of 2 ).
however in the 2nd page nothingis displayed and the page is displayed like this

No Results were found in this category.
FIRST PREV ( Page 1 of 0 ) NEXT LAST

it seems that the link doesn't function even the correct page nmber is sent to the URL
http://localhost/search/booleanview.php?pageno=2

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.