Ho creato questa classe che gestisce in modo COMPLETO la paginazione, con record successivo, precedente ultimo primo e numeri di pagina. inoltre recupera le variabili GET della vostra pagina, dovete solo coopiarla in qualsiasi punto della pagina o include e
per utilizzarla dovete mettere in prossimità del vostro ciclo WHILE IL SEGUENTE CODICE (in grassetto):

$pageObj=new makePage;
$pageObj->setVars(mysql_num_rows($query),10);
while ($rigo=mysql_fetch_array($query)){
if ($pageObj->init < $pageObj->limit && $pageObj->recCount >= $pageObj->init){
// QUI SCRIVETE LA VOSTRA PAGINA
$pageObj->init++;
}
$pageObj->recCount++;

}
// menù navigazione
$pageObj->showNavigator();
mysql_free_result($query);

Codice PHP:
class makePage{

        
// setta le variabili necessarie a gestire la 
        // paginazione, come argomenti vuole il numero
        // di record totali e i record per pagina (arbitrario)
        
function setVars($num,$perPage){
            
// ultimo record da visualizzare
            
$limit=$perPage
            
// pagine totali
            
$totPages=ceil($num/$perPage); 
            
// pagina corrente effettiva
            
$currentPage=1
            
// pagina richiesta
            
$page=1
            
// detrmina da che punto in poi del ciclo
            //  devono essere visulizzati i record
            
$init 0;  
            if(isset(
$_GET['page']) && $_GET['page']!="" ){
                
$page $_GET['page'];
            }
            
$recCount 0;
            
$currentPage=$page;
            
$nextPage=$page+1;
            
$previousPage=$page-1;
            
$firstPage=1;
            
$lastPage=$totPages;
            
// se è stata scelta una pagina
            // particolare il limite corrisponde
            // alla pagina moltiplicata per i record per pagina
            
$limit=$page*$perPage;
            
// l'inizio invece corrisponde al
            // limite meno i record per pagina
            
$init = ($limit-$perPage);
            
// setto le proprietà della pagina
            
$this->page=$page;
            
$this->recCount 0;
            
$this->currentPage=$page;
            
$this->nextPage=$page+1;
            
$this->previousPage=$page-1;
            
$this->firstPage=1;
            
$this->lastPage=$totPages;
            
$this->limit=$limit;
            
$this->init=$init;
        }
        
        
        function 
getOthers(){    
            
// funzione che preleva le altre variabili http
            // con i rispettivi valori per aggiungerli al link 
            // della barra di navigazione in luogo di $params
            
$params "";
            foreach (
$_GET as $value) {
                if ((
key($_GET))!="page"){ // prelevo le altre variabili http ECCETTO page
                    
$params.=(key($_GET))."=".$value."&";
                    
next($_GET);
                }
            }
            
$this->params $params;

        }
        
// mostra la barra di navigazione tra i record
        
function showNavigator(){
                
// mi assicuro che i record trovati siano != 0 e la 
                // pagina non sia 1
                
if ($this->lastPage!=&& $this->lastPage!=1){ 
                
$this->getOthers(); 
                
// costruisco la barra di navigazione
                    
echo "
                    


                    <table width='100%' cellspacing='5'>
                        <tr>
                        <td align='center' width='20%'>"
;
                        if (
$this->page!=1){
                            echo 
"[url='?".$this->params."page=".$this->firstPage."']&lt;&lt;[/url]";
                        }
                        echo 
"</td><td align='center' width='20%'>";
                        if (
$this->page!=1){
                            echo 
"[url='?".$this->params."page=".$this->previousPage."']&lt;[/url]";
                        }
                        echo 
"</td><td align='center' width='20%'>";
                        
// gestione numeri di pagina
                            
$pageInterval=10// corrisponde all'intervallo di pagine visualizzato
                            
                            
$from = ((ceil($this->currentPage/10)-1)*10)+1
                            
$to $from $pageInterval;
                            for (
$numPage=$from;$numPage<=$to;$numPage++){
                                if (
$numPage<=$this->lastPage){
                                    echo 
"
                                    <a href='?"
.$this->params."page=".$numPage."'>";
                                    if (
$this->currentPage==$numPage){ 
                                    
// se la pagina corrente è uguale a $numPage la visualizzo in grassetto
                                        
echo "[b]$numPage[/b]</a>";
                                    }
                                    else {
                                        echo 
"$numPage</a>";
                                    }
                                }
                            }
                        
// fine gestione numeri di pagina
                        
echo "</td><td align='center' width='20%'>";
                        if (
$this->lastPage!=$this->currentPage){
                            echo 
"[url='?".$this->params."page=".$this->nextPage."']&gt;[/url]";
                        }
                        echo 
"</td><td align='center' width='20%'>";
                        if (
$this->lastPage!=$this->currentPage){
                            echo 
"[url='?".$this->params."page=".$this->lastPage."']&gt;&gt;[/url]";
                        }
                        
                        echo 
"</td>
                        </tr>
                        <tr>
                            <td align='center' colspan='5'>"
;
                        echo 
"Pagina [b]".$this->currentPage."[/b] di [b]".$this->lastPage."[/b]
                            </td>
                        </tr>
                    </table>
                    </p>
                    "
;
                }    
        }