Urgent help needed

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

  1. #1
    Hi Guys

    I am making use of the following PHP script to search a mysql database, 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. Rainulf

    Rainulf Active Member

    Messages:
    373
    Likes Received:
    12
    Best Answers:
    0
    Trophy Points:
    85
    #2
    Hmm, I didn't carefully check your code, but double check your offset, which is this, because this is usually the problem:
      $query .= " limit $s,$limit";
    Code (markup):
    I made a little function for you to calculate offset:
       function calculateOffset($pageNum, $rowsPerPage) {
          $tempOffset = $pageNum * $rowsPerPage;
          return ($tempOffset > $rowsPerPage) ? ceil($tempOffset-$rowsPerPage) : 0;
       }
    
    PHP:
    Try to call this function and pass it to $s
     
    Last edited: Jul 19, 2010
    Rainulf, Jul 19, 2010 IP
  3. Deacalion

    Deacalion Peon

    Messages:
    438
    Likes Received:
    11
    Best Answers:
    0
    Trophy Points:
    0
    #3
    See?
    
    if (empty($s)) {
        $s=0;
    }
    
    PHP:
    Should be $_GET['s'].
     
    Deacalion, Jul 19, 2010 IP
    Rian likes this.
  4. Rian

    Rian Well-Known Member

    Messages:
    1,763
    Likes Received:
    48
    Best Answers:
    0
    Trophy Points:
    125
    #4
    Thanks guys, I tried, but still dont work...
     
    Rian, Jul 19, 2010 IP
  5. Rian

    Rian Well-Known Member

    Messages:
    1,763
    Likes Received:
    48
    Best Answers:
    0
    Trophy Points:
    125
    #5
    You were right, thank you!

    I passed the s variable to GET and it is working now.
     
    Rian, Jul 19, 2010 IP
  6. Deacalion

    Deacalion Peon

    Messages:
    438
    Likes Received:
    11
    Best Answers:
    0
    Trophy Points:
    0
    #6
    No problem. You might want to do some reading up on SQL injection as well. :)
     
    Deacalion, Jul 20, 2010 IP