Paginazione di dati

20 marzo 2006

Esempio concreto

Per poter paginare i risultati di un’interrogazione, abbiamo quindi bisogno di conoscere poche semplici cose:

  • il numero totale di risultati restituiti dalla query (cosa che otteniamo con la prima query)
  • il numero di risultati da visualizzare per pagina (il secondo parametro di LIMIT)
  • il numero totale di pagine (da determinare in funzione dei due precedenti parametri, peraltro non indispensabile)

Sulla base di questa considerazione, possiamo cominciare a costruire uno schema base di paginazione, con l’avvertenza che, come vedremo meglio in seguito, l’essenziale è capirne il meccanismo perchè, una volta colto questo, l’unico limite è dettato dalla fantasia del programmatore.

Il codice della pagina che esegue l’interrogazione al database e mostra i risultati, ridotto all’essenziale, potrebbe essere questo:

<?php

// connessione al database
mysql_connect(“host”, “user”, “password”) or die(“Connessione fallita !”);

// selezione del DB
mysql_select_db(“nome_db”) or die(“Selezione del DB fallita !”);

// esecuzione prima query
$count = mysql_query(“SELECT COUNT(id) FROM nome_tabella”);
$res_count = mysql_fetch_row($count);

// numero totale di records
$tot_records = $res_count[0];

// risultati per pagina(secondo parametro di LIMIT)
$per_page = 10;

// numero totale di pagine
$tot_pages = ceil($tot_records / $per_page);

// pagina corrente
$current_page = (!$_GET[‘page’]) ? 1 : (int)$_GET[‘page’];

// primo parametro di LIMIT
$primo = ($current_page – 1) * $per_page;

echo “<div align=\”center\”>\n<table>\n”;

// esecuzione seconda query con LIMIT
$query_limit = mysql_query(“SELECT id, nome FROM nome_tabella LIMIT $primo, $per_page”);
while($results = mysql_fetch_array($query_limit)) {
echo ” <tr>\n <td>”;
echo “<a href=\”page.php?id=” . $results[‘id’] . “\”>” . $results[‘nome’] . “</a>
“;
echo “</td>\n </tr>\n”;
}

// includiamo uno dei files contenenti la paginazione, commentate l’altro ovviamente
include(“paginazione_1.php”);
//include(“paginazione_2.php”);

// in questa cella inseriamo la paginazione
echo ” <tr>\n <td height=\”50\” valign=\”bottom\” align=\”center\”>$paginazione</td>\n”;

echo ” </tr>\n</table>\n</div>”;

mysql_close();

?>

Al di là della connessione, della selezione del DB, e delle query in sè (le quali, ripetiamo, devono contenere la medesima clausola WHERE, se questa è prevista dallo script), la cui spiegazione esula dagli scopi di questo articolo, voglio rimarcare poche semplici cose su cui la paginazione si basa.

Anzitutto, memorizziamo nella variabile $tot_pages il numero totale di risultati e nella variabile $per_page il numero di records che vogliamo mostrare per pagina (il secondo parametro di LIMIT). In base a queste due variabili (ed alla funzione ceil() che arrotonda la divisione all’intero superiore), determiniamo quante saranno le pagine totali in cui suddividere il risultato dell’interrogazione (variabile $tot_pages).

Settiamo quindi la variabile $current_page, ossia la pagina corrente che, all’inizio sarà uguale a 1 e, successivamente avrà il valore di $_GET[‘page’] (che passeremo via GET con il metodo di paginazione scelto), ed infine la variabile $primo (il primo parametro di MySql), la più importante a ben vedere, che sarà uguale a ($current_page – 1) * $per_page; nella prima pagina avrà valore zero, nella seconda dieci e così via (come spiegato nell’esempio iniziale).

Un’ultima cosa da rimarcare riguarda il fatto che il codice che materialmente esegue la paginazione, si trova in un file esterno, o meglio in due files (paginazione_1.php o paginazione_2.php) perchè è mia intenzione illustrarvi due dei possibili metodi per paginare i record, ribadendo ulteriormente che potete inventarvene di altri molto più complessi o aderenti a specifiche necessità, basta capire il metodo e lavorare un pò di fantasia.

Se vuoi aggiornamenti su Paginazione di dati inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Paginazione di dati

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy