Help with Pagination

Discussion in 'Databases' started by Rian, Jul 19, 2010.

  1. #1
    Hi Guys

    I am making use of the following script, but the pagination does not work. It keeps showing the fist ten records. Can someone please tell me what is the problem here?

    <?php
    
      // Get the search variable from URL
      $var = @$_GET['q'] ;
      $trimmed = trim($var); //trim whitespace from the stored variable
    
    // rows to return
    $limit=10; 
    
    //connect to your database ** EDIT REQUIRED HERE **
    mysql_connect("localhost","xxxxxxx","xxxxxx"); //(host, username, password)
    
    //specify database ** EDIT REQUIRED HERE **
    mysql_select_db("xxxxxxxx") or die("Unable to select database"); //select which database we're using
    
    // Build SQL Query  
    $query = "select * from debt where AccountNumber like \"%$trimmed%\"  
      order by DateReceived DESC"; // EDIT HERE and specify your table and field names for the SQL query
    
     $numresults=mysql_query($query);
     $numrows=mysql_num_rows($numresults);
    
    // If we have no results, offer a google search as an alternative
    
    if ($numrows == 0)
      {
      echo "<h4>Results</h4>";
      echo "<p>Sorry, your search: &quot;" . $trimmed . "&quot; returned zero results</p>";
    
    // google
     echo "<p><a href=\"http://www.google.com/search?q=" 
      . $trimmed . "\" target=\"_blank\" title=\"Look up 
      " . $trimmed . " on Google\">Click here</a> to try the 
      search on google</p>";
      }
    
    // next determine if s has been passed to script, if not use 0
      if (empty($s)) {
      $s=0;
      }
    
    // get results
      $query .= " limit $s,$limit";
      $result = mysql_query($query) or die("Couldn't execute query");
    
    // begin to show results set
    $count = 1 + $s ;
    
    
    // now you can display the results returned
      while ($row= mysql_fetch_array($result)) {
      
      echo '<h1>New Case Information</h1>';
    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    echo '<img alt="" src="divider.png" width="600" height="50" />';
    echo '<br/>';
    echo '<br/>';
    
    $count++ ;
    
      }
    
    $currPage = (($s/$limit) + 1);
    
    //break before paging
      echo "<br />";
    
      // next we need to do the links to other results
      if ($s>=1) { // bypass PREV link if s is 0
      $prevs=($s-$limit);
      print "&nbsp;<a href=\"$PHP_SELF?s=$prevs&q=$var\">&lt;&lt; 
      Prev 10</a>&nbsp&nbsp;";
      }
    
    // calculate number of pages needing links
      $pages=intval($numrows/$limit);
    
    // $pages now contains int of pages needed unless there is a remainder from division
    
      if ($numrows%$limit) {
      // has remainder so add one page
      $pages++;
      }
    
    // check to see if last page
      if (!((($s+$limit)/$limit)==$pages) && $pages!=1) {
    
      // not last page so give NEXT link
      $news=$s+$limit;
    
      echo "&nbsp;<a href=\"$PHP_SELF?s=$news&q=$var\">Next 10 &gt;&gt;</a>";
      }
    
    $a = $s + ($limit) ;
      if ($a > $numrows) { $a = $numrows ; }
      $b = $s + 1 ;
      echo "<p>Showing results $b to $a of $numrows</p>";
      
    ?>
    Code (markup):
     
    Rian, Jul 19, 2010 IP
  2. aquilax

    aquilax Member

    Messages:
    126
    Likes Received:
    4
    Best Answers:
    0
    Trophy Points:
    33
    #2
    You never set the value of $s
     
    aquilax, Jul 20, 2010 IP
  3. pigpromoter

    pigpromoter Well-Known Member

    Messages:
    542
    Likes Received:
    13
    Best Answers:
    1
    Trophy Points:
    165
    #3
    How do you set $s? Your comment says you're checking if it has been "passed by the script". How should it get passed?

    Off topic: I always thought bare-PHP belonged to the 2000's and everyone is using a MVC these days. You proved me wrong :|
     
    pigpromoter, Jul 21, 2010 IP
  4. Rian

    Rian Well-Known Member

    Messages:
    1,763
    Likes Received:
    48
    Best Answers:
    0
    Trophy Points:
    125
    #4
    Thank you, you are right!

    I simply added:

    $s = @$_GET['s'] ;

    ...and it worked!
     
    Rian, Jul 21, 2010 IP
  5. prosta

    prosta Peon

    Messages:
    71
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #5
    you didnt set $s
     
    prosta, Jul 22, 2010 IP
  6. pigpromoter

    pigpromoter Well-Known Member

    Messages:
    542
    Likes Received:
    13
    Best Answers:
    1
    Trophy Points:
    165
    #6
    Make sure you sanitize $_GET['s'], I can see a billion vulnerabilities in your code.
     
    pigpromoter, Jul 23, 2010 IP