PROGRAMMIAMO
PHP - File: Prenotazioni

Prenotazione posti su un aereo

Si supponga di voler gestire la prenotazione di posti su un aereo. Supponiamo per semplicità che sull'aereo ci siano 100 posti e che le prenotazioni vengano salvate su un file di testo contenente il nome del viaggiatore e il numero del posto prenotato, in questo modo:

Gianni Luporini
22
Alberto Galassi
13
Romeo Virgili
56
Ada Liguori
4

La pagina php per gestire le prenotazioni visualizza un form con l'elenco dei posti non ancora prenotati:

L'elenco dei posti liberi è realizzato mediante un tag <select>.

 

Visualizzazione dell'elenco a discesa dei posti ancora liberi

All'avvio la pagina legge il file contenente le prenotazioni e memorizza i posti prenotati in un vettore di 100 elementi. L'indice del vettore è il numero del posto: 0 significa che il posto è libero, 1 vuol dire invece che il posto è stato prenotato:

//il vettore delle prenotazioni viene inizializzato a zero
for ($i=0;$i<100;$i++)
{
$prenotati[$i] = 0;
}

//se esiste il file delle prenotazioni, viene aperto in lettura
if (file_exists("prenotazioni"))
{
$p = fopen("prenotazioni","r");

//ciclo di lettura fino alla fine del file delle prenotazioni
while (1)
{

//lettura del nome della persona che ha fatto la prenotazione
$nome = fgets($p);

//se si è arrivati alla fine del file, il ciclo è interrotto col break
if (feof($p))
break;

//lettura del numero di posto prenotato
$posto = fgets($p);

//questa istruzione è un trucco per convertire $posto in integer
$posto = $posto + 0;

//l'elemento $posto del vettore viene settato a 1 (posto già prenotato)
$prenotati[$posto] = 1;
}
fclose($p);

Il ciclo seguente consente di generare la casella a discesa del form con l'elenco di tutti i posti ancora liberi (vengono visualizzati solo i posti il cui numero corrisponde a un elemento del vettore $prenotati che ha valore zero):

<select name="liberi">
<?php
for ($i=0; $i<100;$i++)
{
//se il posto $i non è stato ancora prenotato...
if ($prenotati[$i]== 0)
//... viene visualizzato il numero del posto nell'elenco a discesa del form
echo "<option>".$i."</option>";
}
?>
</select>

 

Prenotazione del posto

Occupiamoci ora del problema di gestire la prenotazione di un nuovo posto. Questa avviene quando l'utente seleziona un posto ancora libero dall'elenco a discesa, inserisce il proprio nome e cognome nella casella di testo e quindi fa click sul pulsante Prenota.

Il click sul pulsante Prenota invia alla pagina stessa il numero del posto prenotato (elemento select con nome 'liberi') e il nome di chi ha effettuato la prenotazione (input text con nome 'nome'). Tali informazioni dovranno essere importate all'inizio della pagina php e quindi memorizzate nel file. Il codice è il seguente:

//il test serve per verificare se esiste la variabile 'liberi'
if (isset($_REQUEST['liberi']))
{

//i valori vengono importati nella pagina
$nuova = $_REQUEST['liberi'];
$nome = $_REQUEST['nome'];

//il file delle prenotazioni viene aperto in modalità append
$p = fopen("prenotazioni","a");

//il file viene bloccato per prevenire eventuali concorrenze
flock($p,LOCK_EX);

//scrittura dati sul file (il \n serve per andare a capo)
fwrite($p,$nome."\n");
fwrite($p,$nuova."\n");

//il file viene sbloccato
flock($p,LOCK_UN);
fclose($p);

echo "<p align='center'><strong>Posto ".$nuova." prenotato da ".$nome."</strong></p>";
}

Il risultato finale è il seguente:

 

precedente - successiva

Sito realizzato in base al template offerto da
Graphixmania.it - Grafica e non solo
http://www.graphixmania.it