di: Giancarlo Moschitta 12 Dicembre 2002
Per poter paginare i risultati di un'interrogazione, abbiamo quindi bisogno di conoscere poche semplici cose:
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.
Guida Yii FrameworkCome creare applicazioni Web in modo semplice e veloce con il... |
Guida Zend FrameworkDiventate professionisti dello sviluppo Web. Zend Framework è lo... |
Guida Applicazioni Facebook con PHPCome realizzare un'applicazione per Facebook. Dalle basi della... |
Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.
Iscriviti alla newsletter
|
|
Corso PHP per Webmaster11 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |