LINGUAGGI DI PROGRAMMAZIONE: SISTEMA DI PRENOTAZIONE APPUNTAMENTI SCUOLA GUIDA

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.

 

https://jquery.com/

 

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;

Giulia_Prenotazioni.zip (69 download)