Visualizzare una query al database dividendola in pagine

Obiettivo del tutorial: Definizione del codice PHP necessario per Visualizzare una query al database dividendola in pagine.

In questo tutorial vedremo il codice PHP che permette di fare una query al database per prelevare dati, di scegliere quante righe del database visualizzare per pagina, e come fare la navigazioen tra le pagine create.

Preliminari:
Partirò dal presupposto che abbiate un database nel quale avete creato una tabella come la seguente:

$query = 'CREATE TABLE users(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
username VARCHAR(30) NOT NULL,
password VARCHAR(20) NOT NULL,
email VARCHAR(40) NOT NULL)';

Quindi creata la tabella nel database il codice per raggiungere quanto ci si era prefissati è:

Il codice:

<?php
// Connessione al database.
$dbhost='';
$dbusername='';
$dbuserpass='';
$dbname='';

// Connessione al database
mysql_connect ($dbhost, $dbusername, $dbuserpass);

if (!mysql_select_db($dbname)) die(mysql_error());

echo "<h2>Visualizza record</h2>";

$rowsPerPage = 2; // Righe per pagina
$pageNum = 1; // Pagina iniziale di default

// Settaggio pagina corrente
if(isset($_GET['page']))
{
$pageNum = $_GET['page'];
}

// determinazione offset
$offset = ($pageNum - 1) * $rowsPerPage;

$query = " SELECT id,username,email FROM users " .
" ORDER BY id LIMIT $offset, $rowsPerPage"; 
$result = mysql_query($query) or die('Error, query failed');

echo "<table border=1>
<tr><td>ID</td><td>Name</td>
                     <td>Email</td></tr>";
// Visualizzo le informazioni
while($row = mysql_fetch_array($result))
{
echo "<tr><td>".$row['id']."</td><td>
      ".$row['username']."</td>
        <td>".$row['email']."</td></tr>";
}
echo "</table>";

$query = "SELECT COUNT(id) AS numrows FROM users";
$result = mysql_query($query) or die('Error, query failed');
$row = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];

// numero di pagine
$maxPage = ceil($numrows/$rowsPerPage);

$self = $_SERVER['PHP_SELF'];
$nav = '';

for($page = 1; $page <= $maxPage; $page++)
{
if ($page == $pageNum)
{
$nav .= " $page ";
}
else
{
$nav .= " <a href=\"$self?page=$page\">$page</a> ";
}
}
//creazione dei link next e prev  
// e il link per andare direttamente in ultima pagina

if ($pageNum > 1)
{
$page = $pageNum - 1;
$prev = " <a href=\"$self?page=$page\">[Prev]</a> ";

$first = " <a href=\"$self?page=1\">[First Page]</a> ";
}
else
{
$prev = ' ';
$first = ' ';
}

if ($pageNum < $maxPage)
{
$page = $pageNum + 1;
$next = " <a href=\"$self?page=$page\">[Next]</a> ";

$last = " <a href=\"$self?page=$maxPage\">[Last Page]</a> ";
}
else
{
$next = ' ';
$last = ' ';
}

//Stampa i link di navigazione
echo $first . $prev . $nav . $next . $last;
?>

Spiegazione algoritmo di funzionamento

Leggendo i commenti nel codice il funzionamento dovrebbe essere abbastanza chiaro.

Lasciando le impostazioni di default, vengono visualizzate due righe per pagina e la barretta di navigazione.