Friends,

I am trying to display data with limits from my MYSQL Records. It Shows the data, but it does not work with Next or Previous Page. Here is the code:

<?php 
 // Connects to your Database 
 mysql_connect("localhost", "root", "") or die(mysql_error()); 
 mysql_select_db("shipments") 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 info") or die(mysql_error()); 
 $rows = mysql_num_rows($data); 
 
 //This is the number of results displayed per page 
 $page_rows = 1; 
 
 //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 info $max") or die(mysql_error()); ?>

<table width="100%" border="0" cellspacing="1" cellpadding="0">

<tr> 
<td><table width="100%" border="1" cellspacing="1" cellpadding="0">
  <tr>
    <td width="34" height="61" align="center"><p><strong>Id</strong></p>
      <p>&nbsp;</p></td>
    <td width="146" align="center"><p><strong>eBay ID</strong></p>
      <p>&nbsp;</p></td>
    <td width="22" align="center"><p ><strong>To/Address</strong></p>
      <p>&nbsp;</p></td>
    <td width="144" align="center"><p><strong>Date Sent</strong></p>
      <p>&nbsp;</p></td>
    <td width="148" align="center"><p><strong>Tracking</strong></p>
      <p>&nbsp;</p></td>
  </tr>
  <?php
while($rows=mysql_fetch_array($data_p)){
?>
  <tr>
    <td align="center"><?php $id[]=$rows['id']; ?>
      <?php echo $rows['id']; ?></td>
    <td align="CENTER"><?php echo $rows['user']; ?></td>
    <td align="justify" ><?php echo nl2br ( $rows['addr']); ?></td>
    <td align="justify"><?php echo $rows['datesent']; ?></td>
    <td align="center"><?php echo $rows['tracking']; ?></td>
  </tr>
  <?php
}
?>
  <tr><td></td>
    <td colspan="4" align="center"></td>
  </tr>
</table></td>
</tr>
</form>
</table><?php 
 // 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> ";
 } 
 ?>

Recommended Answers

All 7 Replies

Unless there's more code somewhere, you aren't setting $pagenum when you load the script.

At line 7 maybe you should try something like:

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

Hope that helps.
David

Thank you ! It worked like a Charm !! Thanx a lot !

One more thing, I want to Order the IDs in DESC. I tried placing

ORDRER BY id DESC

at line 14but it did not work. Can you please tell me what to do?

Other than the misspelling in your post, the 'ORDER BY id DESC' should work. I'm not sure it has to be at the end of the query, but I'm superstitious and always put it there.

So the line would look like:

$data = mysql_query("SELECT * FROM info ORDER BY id DESC") or die(mysql_error());

Should work. Let me know if it doesn't, we'll take a closer look.

David

Edit: Now you've got me wondering

I wonder about line 36

$data_p = mysql_query("SELECT * FROM info $max ORDER BY id DESC") or die(mysql_error());
//or
$data_p = mysql_query("SELECT * FROM info ORDER BY id DESC $max") or die(mysql_error());

Seems as though the first one would select the first x number of unordered items and then order them descending, and the second would order the list and then select x number of items.

I can't find anything in the SQL Manual about this type of precedence, so I'm going to go and try some stuff on my own database. I'll give you an update late today or early tomorrow.

Its just here I made a typo and put the spelling in correct, otherwise, its not making any difference if I put the code or not. In fact, the data is ordered Alphabatically in User ID field.

On my last post, you have to put the 'limit x,y' after the 'order by' or it doesn't return anything. I know that isn't what you asked, but just for your reference.

I'm not sure what to tell you about the 'order by' thing. Try 'ASC' instead of 'DESC' and see if it changes anything. That's about all I know to tell you to try.

Sorry. :(

I tried with asc, desc and none on the SQL select query. It happen to change nothing.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.