La prima operazione che compiamo è quella che permette la visualizzazione degli articoli. Creiamo la nostra pagina PHP, poi procederò con i commenti e l'analisi:
<?php
$limit = 5; // articoli per pagina
$mysql = new mysqli('localhost', 'root', '', 'html_it_articles');
if(!$mysql)
{
die("Errore di connessione al database, impossibile procedere");
}
$result = $mysql->query("SELECT COUNT(*) AS tot FROM articles")->fetch_assoc();
$page = isset($_GET['p']) ? $_GET['p'] : 1;
$totals = $result['tot'];
$totals_pages = ceil($totals / $limit);
$articles = $mysql->query("
SELECT
AR.id AS id,
AR.title AS title,
CONCAT(SUBSTR(AR.article, 1, 200), ' ...') AS content,
CONCAT(AU.surname, ' ', AU.name) AS author
FROM
articles AR,
authors AU
WHERE
AR.author_id = AU.id
ORDER BY id DESC
LIMIT ".(($page - 1) * $limit).",".$limit);
?>
<html>
<head>
<title>Articoli</title>
</head>
<body>
<ul>
<li><a href="index.php">Lista articoli</a></li>
<li><a href="insert.php">Inserisci un articolo</a></li>
</ul>
<p>Articoli totali: <?php echo $totals; ?></p>
<table width="500px">
<?php
while($article = $articles->fetch_assoc())
{
printf('<tr>
<td>%d. <a href="show.php?id=%d">%s</a> (%s) </td>
</tr>
<tr>
<td><p>%s</p></td>
</tr>
<tr>
<td><hr /></td>
</tr>',
$article['id'],
$article['id'],
$article['title'],
$article['author'],
$article['content']
);
}
?>
</table>
<p>Pagina <?php echo $page; ?> di <?php echo $totals_pages; ?> <br />
<?php
if($page - 1 > 0)
{
echo '<a href="?p='.($page - 1).'">< prev</a> | ';
}else
{
echo '< prev | ';
}
if($page + 1 <= $totals_pages)
{
echo '<a href="?p='.($page + 1).'">next ></a>';
}else
{
echo 'next >';
}
?>
</p>
</body>
</html>
Il codice è volutamente semplice e lineare: per prima cosa ci connettiamo al database mysql e ci assicuriamo che la connessione sia andata a buon fine. Poi recuperiamo il numero totale degli articoli presenti nel database e calcoliamo il numero di pagine da visualizzare in base al limite impostato all'inizio dello script.
Successivamente recuperiamo la lista di articoli che devono essere visualizzati nella pagina corrente, limitando la selezione in base alla pagina nella quale si sta navigando. Una volta effettuata la selezione procediamo con la produzione di codice HTML: per prima cosa stampiamo il totale degli articoli trovati, poi iteriamo sui risultati al fine di poter stampare le righe della tabella contenenti le informazioni richieste.
Infine, a tabella terminata, costruiamo una semplicissima barra di navigazione che permette di muoverci tra le pagine.