Visualizzare Liste di Valori con PHP e MySQL

Vediamo come sia possibile elencare un determinato numero di record in una pagina scritta in PHP con la possibilità di navigazione tra i valori residenti su di un database MySQL. La prima operazione da fare è creare un elenco in un archivio da posizionare su di un server dati, per tale scopo utilizzerò la tabella dei comuni in un database MySQL, precisamente quello di nome vikings su di un mio server di prova, ma la stessa operazione può essere compiuta molto facilmente su qualsiasi altro server. Vediamo quindi il codice della pagina PHP che mostra una lista di 20 valori per pagina con possibilità di muoversi andando avanti ed indietro:

<?php

   // Recuperiamo i valori della pagina
   $page = $_REQUEST['pagina'];
   $valxpage = $_REQUEST['valperpagina'];

   if (strlen($page) <= 0)
      $page = 1;
   if (strlen($valxpage) <= 0)
      $valxpage = 20;

   // Apro la connessione ai comuni nel database vikings
   $my_server = mysql_connect("localhost", "root", "") or
       trigger_error(mysql_error(),E_USER_ERROR);
   mysql_select_db("vikings", $my_server);
   $query = "SELECT * FROM comuni ORDER BY Comune";
   $comuni = mysql_query($query, $my_server) or
       die(mysql_error());
   $row_comuni = mysql_fetch_assoc($comuni);
   $tot_comuni = mysql_num_rows($comuni);

   // Calcolo l'ultima pagina
   $last_page = (int)($tot_comuni / $valxpage);
   if (($tot_comuni % $valxpage) > 0)
      $last_page++;

  // Eseguo il movimento
   if (strlen($_REQUEST['successivo']) > 0)
      $page++;
   else if (strlen($_REQUEST['ultimo']) > 0)
      $page = $last_page;
   else if (strlen($_REQUEST['precedente']) > 0)
      $page--;
   else if (strlen($_REQUEST['primo']) > 0)
      $page = 1;

   // vado avanti fino alla pagina selezionata
   if ($page > 1)
   {
      $numrec = $valxpage * ($page - 1);
      for ($i = 0; $i < $numrec; $i++)
      {
         $row_comuni = mysql_fetch_assoc($comuni);
         if (!$row_comuni)
           break;
      }
   }
?>

<html>
<head><title>Lista Comuni</title></head>
<body>

<table width="800" align="center" cellpadding="0"
        cellspacing="0" border="0">
<tr>
   <td align="center" height="50" valign="middle" colspan="5"
       bgcolor="#bababa" style="font-size:24px;font-weight:bold"
       >Lista dei comuni</td>
</tr>
<tr>
   <td width="200" align="center" height="40" valign="middle"
        bgcolor="#eeeeee" style="font-size:18px;font-weight:normal">
        <i>Comune</i></td>
   <td width="200" align="center" height="40" valign="middle"
        bgcolor="#eeeeee" style="font-size:18px;font-weight:normal">
        <i>C.A.P.</i></td>
   <td width="200" align="center" height="40" valign="middle"
        bgcolor="#eeeeee" style="font-size:18px;font-weight:normal">
        <i>Provincia</i></td>
   <td width="200" align="center" height="40 "valign="middle"
        bgcolor="#eeeeee" style="font-size:18px;font-weight:normal">
        <i>Regione</i></td>
   <td width="200" align="center" height="40" valign="middle"
        bgcolor="#eeeeee" style="font-size:18px;font-weight:normal">
        <i>Cod.Fisc.</i></td>
</tr>

<?php

   for ($i = 0; $i < $valxpage; $i++)
   {
      if (!$row_comuni)
         break;

      echo '<tr>';
      echo '<td width="200" align="center">'.
           $row_comuni['Comune'].'</td>';
      echo '<td width="200" align="center">'.
           $row_comuni['CAP'].'</td>';
      echo '<td width="200" align="center">'.
           $row_comuni['Provincia'].'</td>';
      echo '<td width="200" align="center">'.
           $row_comuni['Regione'].'</td>';
      echo '<td width="200" align="center">'.
           $row_comuni['CF'].'</td>';
      echo '</tr>';

      $row_comuni = mysql_fetch_assoc($comuni);
   }

?>

<tr>
<td align="center" valign="middle" height="100" colspan="5">

   <form action="#" method="POST" name="navigazione">
<?php
   if ($page > 1) echo '<input name="primo"
        type="submit" id="primo" value="<< Prima Pagina">';
   if ($page > 1) echo '<input name="precedente"
        type="submit" id="precedente" value="< Pagina Precedente">';
   echo " Pagina $page di $last_page ";
   if ($page != $last_page) echo '<input name="successivo"
        type="submit" id="successivo" value="Pagina Successiva >">';
   if ($page != $last_page) echo '<input name="ultimo"
        type="submit" id="ultimo" value="Ultima Pagina >>">';

   echo '<input name="pagina" type="hidden" id="pagina"
        value="'.$page.'">';
   echo '<input name="valperpagina" type="hidden"
        id="valperpagina" value="'.$valxpage.'">';
?>
</form>

</td>
</tr>
</table>

</body>
</html>

<?php

   mysql_free_result($comuni);
   mysql_close($my_server);

?>

Dovete scusarmi per essere andato a capo in modo non ortodosso, causa la ristrettezza della pagina, ma sono sicuro che il senso di quello che ho voluto fare si capisca ugualmente, anche perché il vostro compito è quello di capire il codice e riproporlo, non certamente fare il copia ed incolla, così come ho spiegato tante altre volte.
Come faccio sempre recupero i dati degli argomenti nella prima parte della pagina, quindi ho effettuato la connessione alla base dati, processo che dovrebbe esservi familiare se avete seguito il mio corso sul linguaggio PHP. Eseguo la query ordinando i valori per comune e conto il numero complessivo dei record che mi servirà per calcolare il numero totale di pagine risultanti. Ricevendo i valori dai tasti submit, che poi è quello che l’utente ha scelto, procedo ad aumentare o diminuire il conteggio delle pagine che ci consentiranno di avanzare del numero esatto di record in modo da arrivare ai valori da presentare. Il resto del codice si preoccupa di iterare sui record da visualizzare e mostrarli formattati in una tabella, alla fine della quale inserisco i tasti ed il conteggio delle pagine.
Ovviamente tutto è migliorabile, questo approccio l’ho utilizzato solo per mostrare la base di questo procedimento che poi utilizzeremo tutte le volte ci sia la necessità di gestire liste di valori provenienti da un database MySQL.

Informazioni su Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.
Questa voce è stata pubblicata in PHP e contrassegnata con , . Contrassegna il permalink.