Qui trovi una lezione della guida che fa al caso

http://php.html.it/guide/lezione/228...-gli-articoli/

Oppure ti posto una classe che ho realizzato io, però è ancora in alpha.

Codice PHP:
###################################################################################

# Classe MakePage



# Utilizzo:

# Configurare le proprietà pubbliche all'inizio della classe come da spiegazioni

#

# Cereare l'istanza:

# $paging = new MakePage($_GET['start']);

# $paging->Result();

# A questo punto abbiamo istanziato la classe con $_GET['start'] come costruttore.

# E' fondamentale mantenere questo costruttore in quanto MakePage accorda all'url

# tramite GET il punto di ingresso della paginazione con la variabile start.

# In seguito, il metodo Result, restituisce l'identificativo per il database

# tramite la proprietà res.

#

# while ($row = mysql_fetch_array($paging->res))

#        {

#            echo $row['titolo'];

#        }

#

# A questo punto abbiamo costruito l'elenco limitato ad un numero definito

# di record; ora mettiamo i link "pagina precedente" e "pagina successiva".

# Semplicemente:

# <td>$paging->previous_link()</td><td>$paging->next_link()</td>

# Quello che verrà stampato da questi due metodi, dipende dalla configurazione

# delle proprietà previous_link_string e next_link_string, come spiegato di seguito

# In opzione possiamo anche aggiungere l'indice delle pagine.

# Semplicemente:

# $paging->IndexLinks() da inserire magari tra il previous e il next link.

######################################################################################







/**

 * MakePage

 *

 * @package lib

 * @author Tarchini Maurizio

 * @copyright 2008

 * @access public

 */

 



class MakePage

{

    

    
/**

    * step indica il numero di records per pagina

    * @var int

    */

    
var $step 5;

    

    
/**

    * db_name, db_host, db_user, db_password

    * sono i parametri di configurazione per

    * l'accesso al database.

    * @var string 

    */

    

    
var $db_name "";

    var 
$db_host "";

    var 
$db_user "";

    var 
$db_password "";

    

    
/**

    * con table si indica la tabella del database nella

    * quale vanno cercati i dati; questo parametro é obbligatorio

    * @var string 

    */

    
var $table "table";

    

    
/**

    * In where vanno indicate le clausule della ricerca. Ad esempio

    * $where = "id > 100 AND id < 1000";

    * In questo caso verranno estratti i record con id superiore a 100

    * ed inferiore a 1000. Questa proprietà non é obbligatoria, se non

    * viene utlizzata nessuna clausula, $where = "";

    * @var string

    */

    
var $where "";

    

    
/**

    * order fa riferimento alla clausula ORDER BY, va indicato

    * rispetto a cosa il risultato della ricerca deve essere

    * ordinato. Ad esempio: $order = "data". I risultati verranno

    * ordinati per data. Il contenuto di order deve essere un 

    * campo valido della tabella, in caso contrario si

    * produrrà un errore. Order non é obbligatorio, se non

    * viene utilizzato: $order = "";

    * @var string 

    */

    
var $order "";

    

    
/**

    * asc_desc è un complemento di order. Inserire ASC se si desiderano

    * i risultati in ordine crescente o DESC se si desiderano i risultati

    * in ordine decrescente. Questa clausula non é obbligatoria ed é inutile

    * se non si utilizza la proprietà order. Se non utilizzata:

    * $asc_desc = "";

    * Se utilizzata accetta solo ASC o DESC, qualunque altro inserimento

    * produrrà un errore.

    * @var string 

    */

    
var $asc_desc "DESC";

    

    
/**

    * next_link_string e previous_link_string contengono la stringa che

    * verrà utilizzata come link per spostarsi tra le pagine ad esempio:

    * $next_link_string = "Successive"  oppure ">" oppure se si 

    * desidera inserire un'immagine:

    * $next_link_string = "[img]next.png[/img]";

    * Questi parametri sono obbligatori

    * @var string 

    */

    
var $next_link_string "Successiva";

    var 
$previous_link_string "Precedente";

    

    
/**

    * Se utilizziamo il metodo IndexLinks é buona cosa limitare

    * la lunghezza dell'indice stesso. Infatti, se dovessero 

    * esserci molte pagine, si rischia di avere un'indice enorme

    * che sfora il layout. MakePage cercherà di distribuire

    * equamente l'indice delle pagine prima e dopo la pagina

    * attuale. Ad esempio se max_index=10:

    * Alla prima pagina mostrerà i link delle pagine da 1 a 10,

    * ma se si troverà a pagina 8, mostrerà i link delle pagine

    * da 3 a 13.

    * @var int  

    */

    
var $max_index 10;

    var 
$page;

    var 
$next_link;

    var 
$previous_link;

    var 
$conn;

    var 
$start;

    var 
$max;

    var 
$res;

    var 
$select;

    var 
$count;

    

    

  
/**

   * MakePage::MakePage()

   *

   * @param mixed $start

   * Costruttore della classe

   * @return void

   */

        
function MakePage ($start)

        {

            if (!isset(
$start) OR $start 0)

            {

                
$start 0;

            }

            
$this->start $start;    

            
$this->page basename($_SERVER['PHP_SELF']);

        }

        



        function 
DbConnectAndSelect ()

        {

            
$this->conn = @mysql_connect($this->db_host,$this->db_user,$this->db_password) or die("Impossibile connettersi a MySql");

            @
mysql_select_db($this->db_name,$this->conn) or die ("Impossibile selezionare il database $this->db_name");

        }

        



        function 
DefineQuerys ()

        {

            if (
$this->where != "")

            {

                
$this->where " WHERE " $this->where;

                

            }

            if (
$this->order != "")

            {

                
$this->order " ORDER BY " $this->order;

                

                if (
$this->asc_desc != "")

                {

                    
$this->asc_desc " " $this->asc_desc;

                }

                else

                {

                    
$this->asc_desc " ";

                }

            }

            
$this->select "SELECT * FROM " $this->table $this->where $this->order $this->asc_desc " LIMIT " $this->start "," $this->step;

            

            
$aa " WHERE rif='general'";

            
$this->count "SELECT COUNT(*) AS tot FROM " $this->table $this->where;

            

        }

        



        function 
DefineMax ()

        {

            
$this->DbConnectAndSelect();

            
$resM mysql_query($this->count$this->conn);

            
$row mysql_fetch_array($resM);

            
$this->max $row['tot'];

            
mysql_close($this->conn);

        }

        

  
/**

   * MakePage::Result()

   *

   * @return resource

   */

        
function Result ()

        {

            
$this->DbConnectAndSelect();

            
$this->DefineQuerys();

            
$this->res mysql_query($this->select$this->conn);    

        }

        

  
/**

   * MakePage::NextLink()

   *

   * @return string

   */

        
function NextLink ()

        {

            
$this->DefineMax();

            if (
$this->start $this->step $this->max)

            {

                
$next $this->start $this->step;

                echo 
"<a href=\"$this->page?start=$next\">$this->next_link_string</a>";

            }

        }

        

  
/**

   * MakePage::PreviousLink()

   *

   * @return string

   */

        
function PreviousLink ()

        {

            if (
$this->start 0)

            {

                
$back $this->start $this->step;

                echo 
"<a href=\"$this->page?start=$back\">$this->previous_link_string</a>";

            }

        }

        

  
/**

   * MakePage::IndexLinks()

   *

   * @return string

   */

        
function IndexLinks ()

        {

            
$this->DefineMax();

            
$pages intval(($this->max 1) / $this->step) + 1;

            if (
$pages 1)

            {

                if (
$this->start == 0)

                {

                    
$now 1;

                }

                if (
$this->start 0)

                {

                    
$now = ($this->start $this->step) + 1;

                }



            
$si $now - (intval($this->max_index 2));

            
$ei $now + (intval($this->max_index 2));

            

            if (
$si <= 0)

            {

                
$ei $ei abs($si);

                
$si 0;

                    for (
$i $si$i $pages AND $i $this->max_index $si$i++)

                    { 

                        
$start_page $i $this->step;

                            

                            if (
$now == $i 1)

                                {

                                    
$n $i 1;

                                    echo 
$n ";

                                }

                                else

                                {

                                    echo 
"<a href=$this->page?start=$start_page>" . ($i 1) . "</a> ";

                                }

                    }

            }

            else

            {

                if (
$ei >= $pages)

                {

                    
$x $ei $pages;

                    
$si $si $x;

                    
$ei $pages;

                        for (
$i $si$i $pages$i++)

                        { 

                            
$start_page $i $this->step;

                            

                                if (
$now == $i 1)

                                {

                                    
$n $i 1;

                                    echo 
$n ";

                                }

                                else

                                {

                                    echo 
"<a href=$this->page?start=$start_page>" . ($i 1) . "</a> ";

                                }

                        }                

                }

                else

                {    

                    for (
$i $si 1$i <= $ei$i++)

                    { 

                        
$start_page $i $this->step;

                            if (
$now == $i 1)

                            {

                                
$n $i 1;

                                echo 
$n ";

                            }

                            else

                            {

                                echo 
" <a href=$this->page?start=$start_page>" . ($i 1) . "</a> ";                            

                            }

                        

                    }

                }

            }

            



            }

        }