Hi,
Tuesday, March 11, 2003, 8:31:47 PM, you wrote:
c> Hi, this is kind of a complex question, Im making a message board, now I
c> dont want list, lets say, all 25 messages on the same page. I would like
c> to have <- previous 1 2 3 next -> type of links and only list 5 messages
c> per page and every time a user clicks the next, previous, or one of the
c> page number links it will list the next 5 messages that havn't been
c> listed yet. Could someone show me how to do this or at least point me in
c> the correct direction ? The data is all stored in a MySQL database.
c> Thanks,
c> --
c> Conbud <[EMAIL PROTECTED]>
c> Graphic & Web Design Using Open Source Technology
c> --
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> ';
}
$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> ';
}
else{
$r.= '<a
href="'.$_SERVER['PHP_SELF'].'?search_page='.$x.$words.'">'.$x.'</a> ';
}
$x++;
}
if($this->page < $this->pages){
$y = $this->page + 1;
$r .= '<a
href="'.$_SERVER['PHP_SELF'].'?search_page='.$y.$words.'">Next</a> ';
}
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("&searchword=".$searchword."&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