Version: 1.11
Type: Class
Category: Databases
License: GNU General Public License
Description: This is class creates 1,2,3… links and previous/next links which will page through any records from a mysql database table. It can easily be modified (one line) to use with any database however.
Put this class in its own file called MySQLPagedResults.class.php <?php class MySQLPagedResults { var $total_results_sql; var $current_page; var $results_per_page; var $links_per_page; var $previous_link_text; var $next_link_text; function MySQLPagedResults($total_results_sql,$page_name,$url_string,$results_per_page,$links_per_page,$first_link_text,$previous_link_text,$next_link_text,$last_link_text,$seperator) { $this->total_results_sql = $total_results_sql; if(!isset($_GET[$page_name])) { $this->current_page = 1; } else { $this->current_page = $_GET[$page_name]; } $this->results_per_page = $results_per_page; $this->links_per_page = $links_per_page; $this->previous_link_text = $previous_link_text; $this->next_link_text = $next_link_text; $this->first_link_text = $first_link_text; $this->last_link_text = $last_link_text; $this->page_name = $page_name; $this->url_string = $url_string; $this->seperator = $seperator; } function totalResults() { $query = mysql_query($this->total_results_sql); $result = mysql_fetch_array($query); return $result[0]; } function totalPages() { return ceil($this->totalResults()/$this->results_per_page); } function currentOffset() { return ($this->current_page-1)*$this->results_per_page; } function isFirstPage() { return ($this->current_page <= 1); } function isLastPage() { return ($this->current_page >= $this->totalPages()); } function getPrevNav() { $nav=''; //Deal with previous link if(!$this->isFirstPage()) { $nav.='<a href="?'.$this->page_name.'='.($this->current_page-1).''.$this->url_string.'">'.$this->previous_link_text.'</a>'; } else { $nav.=$this->previous_link_text; } return $nav; } function getNextNav() { //Deal with next link if(!$this->isLastPage()) { $nav.='<a href="?'.$this->page_name.'='.($this->current_page+1).''.$this->url_string.'">'.$this->next_link_text.'</a>'; } else { $nav.=$this->next_link_text; } return $nav; } function getFirstNav() { $nav=''; //Deal with previous link if(!$this->isFirstPage()) { $nav.='<a href="?'.$this->page_name.'=1'.$this->url_string.'">'.$this->first_link_text.'</a>'; } else { $nav.=$this->first_link_text; } return $nav; } function getLastNav() { $nav=''; //Deal with previous link if(!$this->isLastPage()) { $nav.='<a href="?'.$this->page_name.'='.$this->totalPages().''.$this->url_string.'">'.$this->last_link_text.'</a>'; } else { $nav.=$this->last_link_text; } return $nav; } function getResultNumbersStart() { return ($this->current_page*$this->results_per_page)-$this->results_per_page+1; } function getResultNumbersEnd() { return $this->getResultNumbersStart()+$this->results_per_page-1; } function getStartNumber() { $links_per_page_half = $this->links_per_page/2; if($this->current_page<=$links_per_page_half) { return 1; } elseif($this->current_page>=$this->totalPages()-$links_per_page_half) { return $this->totalPages()-$this->links_per_page+1; } else { return $this->current_page-$links_per_page_half; } } function getEndNumber() { if($this->totalPages() < $this->links_per_page) { return $this->totalPages(); } else { return $this->links_per_page; } } function getPagesNav() { $nav=''; for($i=$this->getStartNumber(); $i<$this->getStartNumber()+$this->getEndNumber(); $i++) { if($i!=$this->current_page) { $nav.="<a href='?".$this->page_name."=$i".$this->url_string."'>$i</a>"; } else { $nav.="$i"; } if($i!=$this->getStartNumber()+$this->getEndNumber()-1) { $nav.=$this->seperator; } } return $nav; } } ?> Then use the following code to make use of the class. <?php //Paging class include("MySQLPagedResults.class.php"); //Database connection include("db.inc.php"); //Instantiate a new instance of the class $paging_results = new MySQLPagedResults("SELECT count(*) FROM mytable","page","",25,10,"<<","Previous","Next",">>"," | "); //Make the variables from the class easier to read/use $first_nav = $paging_results->getFirstNav(); $prev_nav = $paging_results->getPrevNav(); $next_nav = $paging_results->getNextNav(); $last_nav = $paging_results->getLastNav(); $pages_nav = $paging_results->getPagesNav(); $offset = $paging_results->currentOffset(); $results_per_page = $paging_results->results_per_page; $current_page = $paging_results->current_page; $total_pages = $paging_results->totalPages(); $start_number = $paging_results->getResultNumbersStart(); $end_number = $paging_results->getResultNumbersEnd(); //Loop through a table of our database using the $offset and $results_per_page variables from our class. $sql = "SELECT * FROM mytable LIMIT $offset,$results_per_page"; $query = mysql_query($sql); while($data = mysql_fetch_array($query)) { echo $data[0] . ", "; } echo "<p><b>Page:</b> $current_page of $total_pages | <b>Results:</b> $start_number - $end_number<br>"; echo "$first_nav $prev_nav $pages_nav $next_nav $last_nav</p>"; ?>