<?php
//Written by Mikhail D.

require_once('SQL.php');
$sql = new SQL();

echo 
'<p>Simple pagination, results are ordered by id from database outomaticaly.<br />Written by Mikhail D.</p>';

//Rows per page.
$rows_per_page 50;

//Get current page. If empty set to 1.
$current_page = (empty($_GET['page'])) ? trim($_GET['page']);

//Sync it for database use.
$current_page--;

//Get total rows.
$total_rows $sql->num($sql->query("select null from `demo`"));

//Ge total pages
$total_pages ceil($total_rows $rows_per_page);

//Show nav.
echo '<p>Regular navigation.<br />'.nav1($total_pages$current_page 1).'</p>';

//Show nav v2.
echo '<p>A bit better.<br />'.nav2($total_pages$current_page 1).'</p>';

//Show page if with in range.
if($current_page >= && $current_page <= $total_pages) {
    
    
//Offset start.
    
$limit_start $current_page $rows_per_page;
    
    
//Amount or rows. If on last page, calculate exact amount.
    
$limit_end = ($current_page == $total_pages) ? ($total_rows $limit_start) : $rows_per_page;
    
    
//Select data with offset
    
$result $sql->query("select * from `demo` limit {$limit_start}, {$limit_end} ");
    
    
//Show what user is looking at.
    
echo '<p>Displaying '.($limit_start 1).' to '.($limit_start $limit_end).' of '$total_rows .'</p>';
    
    
//Table header.
    
echo '<table><tr><td>id</td><td>title</td><td>views</td><td>dls</td><td>type</td><td>rating</td></tr>';
    
    
//Show rows of current page.
    
while($row $sql->data($result))
        echo 
'<tr><td>'.$row['id'].'</td><td>'.$row['title'].'</td><td>'.$row['views'].'</td><td>'.$row['downloads'].'</td><td>'.$row['category'].'</td><td>'.$row['rating'].'</td></tr>';

    
//Header footer.
    
echo '</table>';
}

//Nav function. Needs (total pages) and (current page +1). Notice +1 offset for current page.
function nav1($total_pages$current_page) {
     
     
//Save html here.
    
$nav '';
     
     
//Make link to first page if posible.
    
if($current_page == 1)
        
$nav .= '[First]';
    else
        
$nav .= '<a href="paginate.php?page=1">[First]</a>';
     
     
//Make link to prev page if posible.
    
if($current_page 1)
        
$nav .= '<a href="paginate.php?page='.($current_page 1).'">[Prev]</a>';
    else 
        
$nav .= '[Prev]';
 
     
//Make links to all pages. On current do not make link, make fency.
    
for($i 1$i <= $total_pages$i++ )
    {
        if(
$current_page == $i)
            
$nav .= '[-'.$i.'-]';
        else
            
$nav .= '<a href="paginate.php?page='.$i.'">['.$i.']</a>';
    }
     
     
//Make link to next page if posible.
    
if($current_page $total_pages)
        
$nav .= '<a href="paginate.php?page='.($current_page 1).'">[Next]</a>';
    else
        
$nav .= '[Next]';
    
    
//Make link to last page if posible.
    
if($current_page == $total_pages)
        
$nav .= '[Last]';
    else
        
$nav .= '<a href="paginate.php?page='.$total_pages.'">[Last]</a>';
     
     
//Return html to where ever it was requested.
    
return $nav;
 
}

//Slightly altered.
function nav2($total_pages$current_page) {
     
     
//Save html here.
    
$nav '';
    
    
//Page links display amount.
    
$side_links 3;
     
     
//Make link to prev page if posible.
    
if($current_page 1)
        
$nav .= '<a href="paginate.php?page='.($current_page 1).'">[Prev]</a>';
    else 
        
$nav .= '[Prev]';
    
    
//Make link to first page if posible.
    
if($current_page != 1)
        
$nav .= '<a href="paginate.php?page=1">[1]</a>';
     
     
//Make ... if to far away from first page.
     
if(($current_page $side_links 2) >= 1)
        
$nav .= '...';
     
     
//Make links too few prev pages if posible.
     
for($i $side_links$i >= 1$i--)
     {
         if((
$current_page $i) > 1)
            
$nav .= '<a href="paginate.php?page='.($current_page $i).'">['.($current_page $i).']</a>';
    }
     
     
//Make link to current page.
    
$nav .= '[-'.$current_page.'-]';
    
    
//make linsk to few next pages if posible.
     
for($i 1$i <= $side_links$i++)
     {
         if((
$current_page $i) < $total_pages)
            
$nav .= '<a href="paginate.php?page='.($current_page $i).'">['.($current_page $i).']</a>';
    }
     
     
//Make ... if too far away from last page.
     
if(($current_page $side_links 2) <= $total_pages)
        
$nav .= '...';
     
     
//Make link to last page if posible.
    
if($current_page != $total_pages)
        
$nav .= '<a href="paginate.php?page='.$total_pages.'">['.$total_pages.']</a>';
     
     
//Make link to next page if posible.
    
if($current_page $total_pages)
        
$nav .= '<a href="paginate.php?page='.($current_page 1).'">[Next]</a>';
    else
        
$nav .= '[Next]';
     
     
//Return html to where ever it was requested.
    
return $nav;
 
}

?>