Hi,

Friday, February 27, 2004, 8:31:32 AM, you wrote:
S> Hi,

S> Using the following function I can present any query in a table. However
S> some of the results are very large and I would like to limit all results to
S> 1000 rows. So I am trying to paginate the results. However the page that
S> calls these queries uses form elements to create the query. So I need to be
S> able to add links to the top of the query result i.e. previous and next, and
S> I need to resubmit the $_POST variables to create the query again.

S> Thanks for any advice offered.

Here is a class that will create a google like pagination of results  if that is
what you are after :)

<?
class page_class {
        var $count = 0;         //total pages
        var $start = 0;         //starting record
        var $pages = 0;         //number of pages available
        var $page = 1;          //current page
        var $maxpages;          //shows up to 2 * this number and makes a sliding scale
        var $show;              //number of results per page
        function page_class($count=0,$show=5,$max=9){
                $this->count = $count;
                $this->show = $show;
                $this->maxpages = $max;
                ($this->count % $this->show == 0)? $this->pages = 
intval($this->count/$this->show):$this->pages intval($this->count/$this->show) +1;
                if(!empty($_GET['search_page'])){
                        $this->page = $_GET['search_page'];
                        $this->start = $this->show * $this->page - $this->show;
                }
        }
        function get_limit(){
                $limit = '';
                if($this->count > $this->show) $limit = 
'LIMIT'.$this->start.','.$this->show;
                return $limit;
        }
        function make_head_string($pre){
                $r = $pre.' ';
                $end = $this->start + $this->show;
                if($end > $this->count) $end = $this->count;
                $r .= ($this->start +1).' - '.$end.' of '.$this->count;
                return $r;
        }
        function make_page_string($words,$pre='Result Page:'){
                $r = $pre.' ';
                if($this->page > 1){
                        $y = $this->page - 1;
                        $r .= '<a 
href="'.$_SERVER['PHP_SELF'].'?search_page='.$y.$words.'">Previous</a>&nbsp;';
                }
                $end = $this->page + $this->maxpages-1;
                if($end > $this->pages) $end = $this->pages;
                $x = $this->page - $this->maxpages;
                $anchor = $this->pages - (2*$this->maxpages) +1;
                if($anchor < 1) $anchor = 1;
                if($x < 1) $x = 1;
                if($x > $anchor) $x = $anchor;
                while($x <= $end){
                        if($x == $this->page){
                                $r .= '<span class="s">'.$x.'</span>&nbsp;';
                        }
                        else{
                                $r.= '<a 
href="'.$_SERVER['PHP_SELF'].'?search_page='.$x.$words.'">'.$x.'</a>&nbsp;';
                        }
                        $x++;
                }
                if($this->page < $this->pages){
                        $y = $this->page + 1;
                        $r .= '<a 
href="'.$_SERVER['PHP_SELF'].'?search_page='.$y.$words.'">Next</a>&nbsp;';
                }
                return $r;
        }
}

//Usage

mysql_connect("**.**.**.**", "******", "********") or die (mysql_error());

$Query = "SELECT COUNT(*) AS cnt FROM tabletosearch WHERE fieldtosearch LIKE '%" 
.$searchword."%'";
$query = mysql_query($Query) or die(mysql_error());
$row = mysql_fetch_array($result);
$count = $row['cnt'];
if($count > 0){
          //start class total number of results,number of results to show,max number 
of pages on a sliding scale (ends up as 2x this number..ie 20)
        $page = new page_class($count,5,10); 
        $limit = $page->get_limit();
        $Query2= "SELECT * FROM tabletosearch WHERE fieldtosearch LIKE '%" 
.$searchword. "%' ORDER BY  whatever ASC ".$limit;
        $result = mysql_query($Query2) or die(mysql_error());
        $hstring = $page->make_head_string('Results');
        $pstring = 
$page->make_page_string("&amp;searchword=".$searchword."&amp;whatever=".$whatever);//add
 the other variables to pass to next page in a
similar fashion
        echo "<table><tr><td>".$hstring."</td></tr>";
        while($row = mysql_fetch_array($result)){
                   echo "<tr><td>".$show_data_here."</td></tr>";
        }
        echo "<tr><td>".$pstring."</td></tr></table>";
}
?>
Note: the search variables on subsequent pages will be passed by GET method



-- 
regards,
Tom

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to