Paginazione dei dati

Applicazione di esempio

L'applicazione di esempio realizzata, scaricabile a questo link, si occupa di mostrare l'elenco dei comuni italiani, ordinati per nome e codice ISTAT (codice numerico univoco). I dati vengono prelevati da un'unica tabella, che è possibile creare e popolare utilizzando lo script SQL contenuto nell'archivio ZIP dell'applicazione. Nel nostro esempio mostreremo tutti i dati presenti nella tabella dei comuni, pertanto non ci saranno clausole WHERE nelle SELECT.

Il programma è costituito da 3 file: il template HTML, lo script principale che estrae i dati dal database e uno script contenente tre funzioni utili alla creazione dei link di navigazione. Questi saranno nella forma:

« 1...n-2 n-1 [n] n+1 n+2 ... N »

ovvero conterranno sempre un link alla prima e all'ultima pagina (1 e N). Inoltre conterranno l'indicazione della pagina corrente racchiusa tra parentesi quadre [n] e dei link alle pagine che precedono e seguono la pagina corrente. Il numero di questi link a pagine limitrofe sarà configurabile. Infine ci saranno anche dei link alla pagina precedente e successiva, indicati dai simboli « e ».

Iniziamo ad analizzare il codice dell'applicazione, partendo dal template HTML, riportato di seguito:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Elenco Comuni Italiani</title>
</head>
<body>
<h1>Elenco Comuni Italiani</h1>
<p><?php echo $link_paginazione?></p>
<table border="1">
    <tr>
        <th>COMUNE</th>
        <th>PROVINCIA</th>
        <th>REGIONE</th>
        <th>CAP</th>
        <th>PREFISSO TEL.</th>
        <th>CODICE COMUNE</th>
        <th>CODICE ISTAT</th>
    </tr>
    <?php foreach($elenco_comuni as $riga):?>
    <tr>
        <td><?php echo htmlentities($riga['comune'])?></td>
        <td><?php echo $riga['provincia']?></td>
        <td><?php echo $riga['regione']?></td>
        <td><?php echo $riga['cap']?></td>
        <td><?php echo $riga['prefisso']?></td>
        <td><?php echo $riga['cod_comune']?></td>
        <td><?php echo $riga['cod_istat']?></td>
    </tr>
    <?php endforeach ?>
</table>
<p><?php echo $link_paginazione?></p>
</body>
</html>

Come si può notare, il template HTML impiegato è davvero molto semplice. Il riempimento della tabella dei dati è affidato ad un ciclo foreach mentre l'HTML che costituisce i link di paginazione, riportati al di sopra ed al disotto della tabella, viene incluso nel template leggendo la variabile $link_paginazione, creata nello script PHP principale, riportato nella pagina seguente.

Pagine: precedente 1 2 34 5 ... 7

5 commenti

1 Roberta Roberta mercoledì 12 maggio 2010, ore 08:27
Ciao sto usando il tuo codice per fare la paginazione in un mio sito però ho dei problemi, non segnala nessun errore ma non compaiono i numeri linkabili di conseguenza non posso navigare tra le vaie pagine è come se non funzionasse la funzione paginazione eppure io ho fatto copia incolla del codice e l'ho adattato al mio sito cosa sbaglio?
2 Roberta Roberta mercoledì 12 maggio 2010, ore 09:47
nn metevo l'echo alla fine scusa tutto ok il codice è perfetto
3 stefana stefana sabato 15 gennaio 2011, ore 20:13
magnifico...funziona...solo una questione....se voglio limitare la paginazione solo a 30 records su 60 per esempio e che quindi nella visualizzazione vengono conteggiati solo i 30 ( a partire dal primo records...o anche nel caso si debba partire dal 10...a seconda dei dati che ho bisogno di visualizzare nella pagina) come devo fare???? quali parametri sono da correggere?????
4 Lucio domenica 5 marzo 2017, ore 12:13
Scusate volevo farvi una domanda. Anche se l'articolo è datato è fatto bene ed ho utilizzato lo script (convertendo alcune parti in php7) da utilizzare su un mio lavoretto.
Comunque alla fine non mi restituisce il link alla pagina successiva nonostante queste siano due.
Qualcuno può aiutarmi, grazie.
5 Lucio domenica 5 marzo 2017, ore 12:20
Ho già risolto ,grazie mille.
In pratica nel conteggio delle righe della tabella interessata non importa fare il count, bensì mi è bastato estrarre il numero dell'id autoincrement contando poi le righe estratte con la funzione mysqli_num_rows.
Grazie ancora.
Effettua l'accesso o registrati per inserire un commento