Di seguito viene riportato il listato di index.php, il principale script PHP dell'applicazione di esempio, responsabile tra l'altro dell'estrazione dei record dal database. Le prime righe servono a specificare tutti i settaggi del programma necessari alla connessione con il database, alla creazione delle pagine web e dei link di navigazione (modificateli per adattarli alla vostra configurazione). Si noti in particolare la variabile $url_base con la quale viene impostato l'URL necessario a richiamare lo script corrente. Nel nostro esempio viene settato a "index.php" ma potremmo trovarci in situazioni più generiche, con un URL contenente parametri, ad esempio "index.php?nazione=italia". $url_base quindi è l'URL che utilizzeremo per costruire i link di navigazione, al quale pertanto dovremo poi aggiungere un ulteriore parametro "pag" necessario a specificare la pagina richiesta (es.: . index.php?nazione=italia&pag=2). La creazione di questi URL con l'indicazione della pagina richiesta sarà effettuata dalla funzione crea_url() descritta in seguito.
Specificati i parametri dell'applicazione si prosegue poi con la connessione a MySQL e la selezione del DB.
Il calcolo del numero totale di pagine viene fatto attraverso la SELECT COUNT(*) che nel nostro esempio non richiede una clausola WHERE poiché mostreremo tutti i dati contenuti nella tabella. Si noti che per calcolare tale numero viene arrotondato per eccesso con la funzione ceil() il risultato della divisione tra $tot_righe e $righe_per_pagina.
Dall'URL recuperiamo il numero della pagina richiesta dall'utente ($_GET['pag']) e se questo assume un valore illecito, minore di uno o maggiore del numero dell'ultima pagina, eseguiamo un redirect rispettivamente alla prima o all'ultima pagina. Per effettuare il redirect viene utilizzata la funzione crea_url() che, come anticipato, serve a confezionare l'URL di destinazione contenente l'indicazione sulla pagina da mostrare.
Si procede infine con l'esecuzione della query di estrazione dei record e con la fetch dei risultati. La creazione dei link di navigazione viene affidata alla funzione paginazione(), che verrà illustrata nella prossima pagina.
<?php
include 'paginazione.php';
$DB_host = 'localhost';
$DB_user = 'root';
$DB_password = 'secret';
$DB_name = 'test';
$righe_per_pagina = 1;
$url_base = "index.php";
$pagine_vicine = 1;
// ----------------------------------------------------------------
// C O N N E S S I O N E A L D A T A B A S E
$link = mysql_connect($DB_host, $DB_user, $DB_password);
if (!$link) {
die ('Non riesco a connettermi: ' . mysql_error());
}
$db_selected = mysql_select_db($DB_name, $link);
if (!$db_selected) {
die ("Errore nella selezione del database: " . mysql_error());
}
// ----------------------------------------------------------------
// C A L C O L O D E L N U M E R O D I P A G I N E
// ricavo il numero totale di record
$query = "SELECT COUNT(*) FROM comuni";
$result = mysql_query($query);
// record complessivi
$tot_righe = mysql_result($result,0);
// totale pagine
$tot_pagine = ceil($tot_righe / $righe_per_pagina);
// ----------------------------------------------------------------
// P A G I N A C O R R E N T E
$pagina_corrente = isset($_GET['pag']) ? (int)$_GET['pag'] : 1;
// se la pagina corrente è minore di 1
if($pagina_corrente < 1) {
header('location: ' . $url_base);
exit();
}
// se la pagina corrente è maggiore dell'ultima pagina
if($pagina_corrente > $tot_pagine) {
header('location: ' . crea_url($url_base, $tot_pagine));
exit();
}
// ----------------------------------------------------------------
// E S T R A Z I O N E D E I R E C O R D
// calcolo la prima riga da estrarre con la query
$prima_riga = ($pagina_corrente - 1) * $righe_per_pagina;
$query = "SELECT *
FROM comuni
ORDER BY comune, cod_istat
LIMIT $prima_riga, $righe_per_pagina";
$result = mysql_query($query);
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
$elenco_comuni = array();
while ($row = mysql_fetch_assoc($result)) {
$elenco_comuni[] = $row;
}
// creazione dei link di paginazione
$link_paginazione = paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine);
// carico il template HTML
include 'index.html';
?>