Abbiamo la necessità di gestire le prenotazioni all’interno di una scuola guida. Le persone collegandosi al sito potranno richiedere un appuntamento per un certo servizio (ad esempio: guida, rinnovo patente, ecc…) selezionando la data e l’orario richiesto.
A livello tecnico utilizzeremo: un database MySQL dove inserire e cercare i dati. Una pagina web fatta con php dove compilare la richiesta e alcune funzionalità java script per gestire il controllo dei dati.
Tabelle che compongono il database:
DROP DATABASE IF EXISTS prenotazioni_scuola_guida;
CREATE DATABASE prenotazioni_scuola_guida; USE prenotazioni_scuola_guida;
CREATE TABLE servizi( IdServizio INT AUTO_INCREMENT NOT NULL PRIMARY KEY, descrizione TEXT, durata TIME ); /*tabella servizi che contiene I servizi prenotabili e le relative durate*/
CREATE TABLE persone( IdPersona INT AUTO_INCREMENT NOT NULL PRIMARY KEY, nome VARCHAR(20), cognome VARCHAR(20), telefono INT, email VARCHAR(50) ); /*la tabella persone contiene le persone che richiedono appuntamenti*/
CREATE TABLE appuntamenti( IdAppuntamento INT AUTO_INCREMENT NOT NULL PRIMARY KEY, IdPersona INT, IdServizio INT, data DATE, ora_inizio TIME, ora_fine TIME, FOREIGN KEY persone (IdPersona) REFERENCES persone(IdPersona), FOREIGN KEY servizi (IdServizio) REFERENCES servizi(IdServizio) ) /*la tabella appuntamenti contiene gli appuntamenti già richiesti*/
INSERT INTO servizi (descrizione, durata) VALUES (‘rinnovo patente’,’00:30’); INSERT INTO servizi (descrizione, durata) VALUES (‘lezioni di guida’,’01:00’); INSERT INTO servizi (descrizione, durata) VALUES (‘visita medica’,’01:00’); INSERT INTO servizi (descrizione, durata) VALUES (‘prenotazioni pratiche auto’,’01:00’); |
Pagina di prenotazione servizi scuola guida
In questa schermata inserendo i dati della persona (nome, cognome, email e telefono) e selezionando il servizio (preso direttamente dalla tabella servizi di MySQL), la data e l’ora dell’appuntamento e premendo il bottone PRENOTA, il programma esegue l’inserimento del contatto nella tabella “persone” e la richiesta di prenotazione nella tabella “appuntamenti”.
In particolare viene calcolata l’orario di fine appuntamento eseguendo la somma tra l’orario scelto per l’appuntamento e la durata del servizio richiesto.
Una volta inserito viene mostrato un box con il riepilogo dell’appuntamento.
I file che compongono il progetto:
prenotazioni.php | Questo file genera il codice html per poter creare la pagina web e i componenti per inserire i dati. Per eseguire l’inserimento viene utilizzata la libreria jQuery che esegue un post verso la pagina che si occupa dell’inserimento.
|
salva_prenotazioni.php | Questo file viene richiamato da prenotazioni.php passandogli i dati inseriti. Successivamente inserisce il contatto nella tabella persone, ricerca la durata del servizio richiesto, esegue il calcolo dell’orario di fine appuntamento ed infine inserisce la riga nella tabella appuntamenti. |
File prenotazioni.php
<?php
// connessione a mysql $server_name="localhost"; $username="root"; $password=""; $database_name="prenotazioni_scuola_guida";
$conn=mysqli_connect($server_name,$username,$password,$database_name);
if(!$conn) { die("Errore Collegamento:" . mysqli_connect_error()); } //eseguo query per crearmi la lista dei servizi presa dal database $sql_query="select idServizio,descrizione,durata from servizi order by descrizione";
$result = mysqli_query($conn, $sql_query) or die("errore query: ".$sql_query);
$servizi=array(); $i=0; while ($row = mysqli_fetch_assoc($result)) { $servizi[$i]["idservizio"]=$row["idServizio"]; $servizi[$i]["descrizione"]=$row["descrizione"];
$i++; } mysqli_free_result($result);
mysqli_close($conn);
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script> function EseguiPrenotazione() { //tramite jquery eseguo il post alla pagina di registrazione $.post("salva_prenotazione.php", { nome: $('#nome').val(), cognome: $('#cognome').val(), telefono: $('#telefono').val(), email: $('#email').val(), idServizio: $('#idservizio').find(":selected").val(), data: $('#data').val(), ora: $('#ora').val() }, function(result) { alert(result); });
} </script>
<html> <style> .contenitore { float: left; width: 80%; margin-top: 10px; margin-bottom: 10px; margin-left: 10px; }
.riga { width: 100%; margin-top: 10px; margin-bottom: 10px; margin-left: 10px; }
.testo { border-radius: 4px; border: 1px solid; width: 300px; }
.etichetta { min-width: 100px; }
</style> <center><h2>PRENOTAZIONI AUTOSCUOLA</h2></center>
<div style="width: 100%;" class="contenitore"> <div class="riga"> <label class="etichetta">Nome</label> <input type="text" id="nome" class="testo"> </div>
<div class="riga"> <label class="etichetta">Cognome</label> <input type="text" id="cognome" class="testo"> </div>
<div class="riga"> <label class="etichetta">Tel. Cellulare</label> <input type="text" id="telefono" class="testo"> </div>
<div class="riga"> <labe class="etichetta"l>Email</label> <input type="text" id="email" class="testo"> </div>
<div class="riga"> <label class="etichetta">Servizio da prenotare</label> <select id="idservizio" class="testo"> <?php //tramite ciclo disegno gli elementi selezionabili for ($i=0;$i<count($servizi);$i++) { echo '<option value="'.$servizi[$i]["idservizio"].'">'.$servizi[$i]["descrizione"].'</option>'; }
?> </select> </div>
<div class="riga"> <label class="etichetta">Data appuntamento</label> <input type="date" id="data" class="testo"> </div>
<div class="riga"> <label class="etichetta">Ora appuntamento</label> <input type="time" id="ora" class="testo"> </div>
<div class="riga"> <button id="btnPrenota" onClick="EseguiPrenotazione()">PRENOTA</button> </div> <hr>
</div>
</html> |
File salva_prenotazioni.php
<?php
//per vedere a video le variabili passate //echo print_r($_POST,true);
// connessione a mysql $server_name="localhost"; $username="root"; $password=""; $database_name="prenotazioni_scuola_guida";
$conn=mysqli_connect($server_name,$username,$password,$database_name);
if(!$conn) { die("Errore Collegamento:" . mysqli_connect_error()); }
$idServizio=$_POST["idServizio"]; $data=$_POST["data"]; $ora_inizio=$_POST["ora"]; $nome=$_POST["nome"]; $cognome=$_POST["cognome"]; $telefono=$_POST["telefono"]; $email=$_POST["email"];
// inserimento persona su tabella contatti $sql_query="INSERT INTO persone (nome, cognome, telefono, email) VALUES ('$nome', '$cognome', '$telefono', '$email') "; $result = mysqli_query($conn, $sql_query) or die("errore query: ".$sql_query); $idPersona=mysqli_insert_id($conn);
//ricerca durata del servizio $sql_query="SELECT durata FROM servizi WHERE idServizio=$idServizio"; $result = mysqli_query($conn, $sql_query) or die("errore query: ".$sql_query); $row = mysqli_fetch_assoc($result); $durata=$row["durata"];
// 01:00 // 01234 $a1 = substr($ora_inizio,0,2); //ora inizio $a2 = substr($ora_inizio,3); //min inizio
$b1 = substr($durata,0,2); //ora durata $b2 = substr($durata,3); //min durata $plus = 0;
$minutitotali = $a2 + $b2;
// se la somma dei minuti supera i 60 devo aggiungere 1 ora if ( $minutitotali > 60 ) { $minok = $minutitotali - 60; $plus = 1; } else { $minok = $minutitotali; }
$ora_fine = ($a1 + $b1 + $plus).":".$minok;
echo "ora inizio: ".$ora_inizio." durata:".$durata." ora fine: ".$ora_fine." ";
//inserire su tabella appuntamenti
$sql_query="insert into appuntamenti (idPersona,idServizio, data, ora_inizio, ora_fine) values ($idPersona, $idServizio, '$data', '$ora_inizio', '$ora_fine')";
$result = mysqli_query($conn, $sql_query) or die("errore query: ".$sql_query); echo "prenotazione registrata correttamente, DURATA dalle ".$ora_inizio." alle ".$ora_fine; |