[PHP] Creare script di prenotazione con controllo disponibilità.

Gabriele_04

Nuovo Utente
3 Set 2021
9
0
1
Buongiorno a tutta la comunità di mrw. Sono un novellino con PHP, per esercitarmi ho voluto creare una piattaforma dove un cliente può prenotare il proprio posto a sedere e il proprio servizio presso un barbiere. Ho già creato la pagina profilo, la dashboard e tutto, ora sono giunto alla creazione dello script PRENOTAZIONI, ho perciò creato un form con i seguenti campi:

- Data di prenotazione
- Orario di prenotazione
- Servizio richiesto (menù select tra taglio, taglio + barba, barba).

Ora un semplice INSERT INTO non basta perché prima devo controllare se ci sono posti disponibili per ognuno di questi servizi, ad esempio per un semplice taglio servono solo 30 minuti mentre per un taglio+barba ne servono 45.
Adesso poniamo il caso ci siano due clienti, uno prenota alle 9:00 un taglio (ciò significa che ci sarà un nuovo posto alle 9:30) e uno che prenota un taglio + barba sempre alle 9, il sistema dovrebbe avvertire che ci sia un posto disponibile alle 9:30. E così via....

Scusate un po' la richiesta confusionaria, spero che qualcuno possa essermi di aiuto.

Grazie ancora.
 

Rikk73

Utente Attivo
7 Apr 2015
141
6
18
Arezzo
Ciao, la prima cosa che noto (e che secondo me non è corretta, ma ripeto secondo me...) è che gli appuntamenti siano singoli, dovresti prevedere la possibilità di avere almeno 2 appuntamenti contemporanei nella stessa fascia oraria (come verosimilmente viene fatto). Questo aggiunge sicuramente complessità ai controlli che devi fare prima di salvare l'appuntamento, ma d'altra parte se ho capito bene lo fai per studio no?

Dal punto di vista logico puoi seguire diverse strade:

1° opzione:
calcolare prima gli orari disponibili per il giorno scelto, in modo che quando l'utente sceglie l'ora sei sicuro che è libero.
PRO: il processo è guidato e dovrebbe essere più semplice per l'utente la prenotazione
CONTRO: Se 3 utenti scelgono contemporaneamente lo stesso orario si potrebbero generare degli errori. Se l'utente rimane fermo un po' di tempo prima di scegliere l'orario poi potrebbe non essere più disponibile.

2° opzione
prima di salvare la prenotazione fai tutti i controlli del caso, se l'orario scelto è disponibile tutto ok, altrimenti restituirai un messaggio, magari proponendo degli orari alternativi
PRO: la procedura è sicuramente più affidabile, difficilmente si dovrebbero sovrapporre più prenotazioni
CONTRO: probabilmente le performance

Dal punto di vista tecnico devi fare una query che controlla gli appuntamenti, prendendo l'ora di inizio e sommando i tempi dei servizi scelti, poi prendi l'ora richiesta dall'utente, ci sommi i tempi dei servizi e controlli che non ci siano (o ce ne siano meno di x) altri appuntamenti salvati nello slot che impegnerebbe l'utente.

Chiaramente tutto questo implica che tu abbia una tabella di servizi con i relativi tempi.

Io sto facendo la stessa cosa qui https://stage.mko.digitalbubbles.cloud/ se vai nella sezione degli appuntamenti vedi il flusso che ho previsto (se vuoi puoi provare tranquillamente tanto è un ambiente di stage). Non ti posto il mio codice perchè non è php, ma la logica è la stessa. Qui anche io (su richiesta del cliente) ho previsto slot di 15 min, indipendentemente dal resto
 

Gabriele_04

Nuovo Utente
3 Set 2021
9
0
1
Ciao rikk73, io ti ringrazio moltissimo per la tua risposta e i consigli dati... La doppia prenotazione non potrei accettarla perché sto supponendo il caso in cui il dipendente sia solo uno...

Ho capito il concetto da te spiegato, volevo chiederti solo una cosa. A questo punto quante tabelle dovrei avere attive ? Quello per le tempistiche e quello delle prenotazioni?

Grazie ancora per la tua risposta
 

linoma

Utente Attivo
1 Mar 2017
93
4
8
Fai una tabella x le prenotazioni e in fase di richieste nei fai il count ovviamente considerando i ranges temporali etc etc.
 

Gabriele_04

Nuovo Utente
3 Set 2021
9
0
1
Buon pomeriggio a tutti, come dicevo prima sono un novellino e sto cercando di imparare, tuttavia ho cominciato a scrivere il codice e ho inserito direttamente nel codice le tempistiche, sono arrivato a questo punto ma non so come continuare... Ho inoltre creato una tabella che dovrebbe raccogliere le prenotazioni. Il form è composto da un datapicker e due campi select, per il servizio da scegliere e per l'orario.
PHP:
<?php

//Eseguo connessione



$db_host = 'localhost';
$db_user = 'root';
$db_pass = '';
$db_name = 'barber';



// connessione al DB utilizzando MySQLi
$cn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (mysqli_connect_errno()) {
    // If there is an error with the connection, stop the script and display the error.
    exit('Failed to connect to MySQL: ' . mysqli_connect_error());
}





if(isset($_POST['submit'])){
    $servizio=$_POST['servizio'];
    $data=$_POST['data'];
    $orario_richiesta=$_POST['orario'];
    
    $tempo_taglio = 30 ;

    $tempo_tagliobarba = 45;

    $tempo_barba = 15;
    
    
?>
 

Tommy03

Utente Attivo
6 Giu 2018
616
58
28
20
Vicenza
Ciao, hai già creato la tabella per le prenotazioni? Se sì, puoi mandare la struttura?

In generale secondo me potresti fare così: innanzitutto essendo che i tempi richiesti sono 15,30,45 (multipli di 15) la soluzione più veloce può essere "splittare" tutta la giornata in sezioni da 15 minuti, ad esempio quello che va da 00:00 a 00:15 è sezione1, da 00:15 a 00:30 sezione2 ecc. A questo punto nella tabella prenotazioni, quando salvi una prenotazione inserisci il giorno e il numero di sezione d'inizio e di fine (ad esempio se va dalle 10:15 alle 10:45 quella d'inizio sarà la sezione 42 (10:15-10:30), quella di fine sezione 43 (10:30-10:45)). Poi nel sito mostri una lista di tutte le sezioni ancora disponibili, ovviamente se nel primo campo il cliente sceglie il servizio da 45', gli mostrerai solo le opzioni in cui ci sono 3 sezioni consecutivi disponibili ecc.

Forse in generale ti complica un po' la vita ma dato che gli orari sono tutti multipli di 15 può essere utile fare una cosa del genere
 

Gabriele_04

Nuovo Utente
3 Set 2021
9
0
1
Ciao, hai già creato la tabella per le prenotazioni? Se sì, puoi mandare la struttura?

In generale secondo me potresti fare così: innanzitutto essendo che i tempi richiesti sono 15,30,45 (multipli di 15) la soluzione più veloce può essere "splittare" tutta la giornata in sezioni da 15 minuti, ad esempio quello che va da 00:00 a 00:15 è sezione1, da 00:15 a 00:30 sezione2 ecc. A questo punto nella tabella prenotazioni, quando salvi una prenotazione inserisci il giorno e il numero di sezione d'inizio e di fine (ad esempio se va dalle 10:15 alle 10:45 quella d'inizio sarà la sezione 42 (10:15-10:30), quella di fine sezione 43 (10:30-10:45)). Poi nel sito mostri una lista di tutte le sezioni ancora disponibili, ovviamente se nel primo campo il cliente sceglie il servizio da 45', gli mostrerai solo le opzioni in cui ci sono 3 sezioni consecutivi disponibili ecc.

Forse in generale ti complica un po' la vita ma dato che gli orari sono tutti multipli di 15 può essere utile fare una cosa del genere
In realtà avevo pensato di avere una lista slots liberi con delle classi datetime che calcolano start time e end time, dato che tutti i servizi hanno durate diverse... Anche se non ho ancora capito bene come strutturarlo in codice
 

Rikk73

Utente Attivo
7 Apr 2015
141
6
18
Arezzo
La cosa migliore sarebbe quella di avere una tabella servizi, che ha sia il prezzo che il tempo previsto, nella tabella delle prenotazioni, poi metti il riferimento a questa tabella.
Questo tipo di struttura ti permetterebbe, oltre che soddisfare la tua esigenza, di poter estendere la tabella delle prenotazioni mettendo ad esempio un prezzo/tempo per servizio diverso da quello di default.

Ti allego uno screenshot dello schema della parte del db che riguarda questa discussione del sito che ti avevo postato, il db è SQL ma comunque può servirti per dei concetti
 

Allegati

  • db.png
    db.png
    50,2 KB · Visite: 271
Discussioni simili
Autore Titolo Forum Risposte Data
B [PHP] hp script creare un utente diminuendo -1 e cosi via PHP 1
R [PHP] [HTML] Creare script invio modulo contatti PHP 2
romeocharly Creare un script/codice in php per collegare un id mysql con un file PHP 0
F Script PHP + MySql - immettere dati e creare un documento Word o PDF PHP 4
K creare uno script in php , per generare in modo automatico query PHP 2
R Creare pagina HTML da script PHP PHP 2
S Script per creare Email in PHP PHP 1
U PHP creare un file excel dopo ricerca nel DB PHP 0
S Libreria PHP per creare file dwg o dxf PHP 0
J creare pagina php di prenotazione PHP 5
F [PHP] creare tabella e tasto cerca PHP 3
B [PHP] Creare PDF dopo inserimento dati form PHP 4
R [PHP] Creare sistema random PHP 3
D [PHP] Consigli su come creare form PHP 1
T [PHP] Creare Honeypot per form contatti PHP 10
S [PHP] Creare collegamento filtri di ricerca al database PHP 6
Z Creare VirtualHost Apache2 con PHP? Programmazione 0
T con oop creare un ciclo per una pagina dinamica html con php PHP 3
E [PHP] creare temporary table per dati da xml PHP 2
R [PHP] creare pagina profilo per ogni utente PHP 4
M [PHP] Creare un menu a tendina con pdo PHP 18
G [PHP] Creare mail con allegato nascosto e bottone di richiamo PHP 0
C [PHP] Creare un Pulsante che ricopia valori di un campo in altro record PHP 4
Shyson [WordPress] [PHP] Creare codice che evidenzia nuovi articoli WordPress 0
ANDREA20 creare sito in php PHP 6
G [PHP] Creare appuntamento ed inviarlo tramite mail (Outlook e Gmail) PHP 0
F [PHP] Creare un'area web riservata PHP 13
S [PHP] [HTML] Come creare un grafico dinamico PHP 4
V Creare tabella mysql con php non funziona PHP 1
M Creare tabella da pagina php popolata con valori passati con POST PHP 5
AntoCastro [PHP] Creare un sito di quiz a catena PHP 17
V Creare funzioni PHP per agevolare bootstrap PHP 1
B funzioni per creare file e inserirli dentro una certa cartella in php? PHP 1
F Creare pagina PHP come quella di phpMyadmin PHP 12
M Creare tabella da pulsante php PHP 6
M Creare un exe da un listato php PHP 5
P [PHP] Creare un elenco completo con tabella PHP 3
Zea [PHP] RISOLTO - creare link con il risultato dell'interrogazione db PHP 1
utente è possibile creare una pagina php che copia interamente il contenuto di un'altra pagina ? PHP 10
A [PHP] Creare numero ticket casuale PHP 5
giannit [PHP] Creare pagina con collegamenti ipertestuali da file txt PHP 6
B [PHP] Creare un'interfaccia di inserimento testo in varie posizioni PHP 1
sandropochi [PHP] Form per creare filtro di ricerca su DB PHP 8
L [PHP] Creare un uploader di file csv xls e ricercare i risultati PHP 0
Zayciho [PHP] Creare sito web dinamico PHP 5
P [PHP] Creare elenco immagini PHP 2
L [php e xml] per creare una galleria fotografica con diversi file xml PHP 0
M [PHP] Creare chart con highchart PHP 6
T [PHP]Creare cookie PHP 5
Monital [PHP] Creare un array da stringa con diversi spazi PHP 3

Discussioni simili