Categories: PHP

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.

Share
Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.

Published by
Giampaolo Rossi
Tags: MySQLSQL

Recent Posts

MerciGest: il gestionale di magazzino semplice e gratuito

MerciGest è il software gestionale gratuito per Windows che semplifica la gestione del magazzino: giacenze,…

2 giorni ago

Software gestionali con SQL Server: un archivio unico, accessibile ovunque

Tutti i nostri software gestionali possono essere collegati a un database SQL Server, consentendo l’accesso…

4 giorni ago

Come iniziare ad usare MerciGest in 5 minuti

MerciGest è semplice e immediato: basta scaricare e installare il programma per iniziare subito. Al…

6 giorni ago

Cos’è MerciGest e a chi serve

MerciGest è un gestionale di magazzino per Windows pensato per negozi, piccole imprese e artigiani…

1 settimana ago

Introduzione alla Standard Template Library (STL)

La Standard Template Library (STL) è una delle componenti più potenti del C++. Fornisce una…

7 mesi ago

Un Abbonamento per Tutti i Software

Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…

2 anni ago