Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili

Fra_23

Utente Attivo
4 Mag 2021
40
4
8
Salve, come da titolo vorrei chiedervi come potrei stabilire e far rispettare un numero massimo di prenotazioni.
Il database é molto semplice e ogni persona dopo aver inserito i dati personali seleziona il numero di posti.
Io per far vedere quanti posti sono ancora disponibili ho fatto: tot posti evento - somma della colonna posti, però le persone ovviamente possono prenotare anche quando i posti sono esauriti o in negativo.
Vi ringrazio anticipatamente.
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
Ciao,
secondo me dovresti inviare il form, dando la possibilità di prenotare i posti, solo se questi sono disponibili, altrimenti inviare un opportuno messaggio di errore; inoltre inserire nel form, se non presente, una casella indicante il nr di posti disponibili e inserire dei controlli affinché non si possano prenotare più posti di quelli disponibili; per un aiuto concreto (se è quello che vuoi) bisognerebbe sapere come è strutturato il DB e magari anche come hai impostato il form. Ciao
 

Fra_23

Utente Attivo
4 Mag 2021
40
4
8
La tabella é strutturata così:
SQL:
CREATE TABLE IF NOT EXISTS `Evento` (
  `Nome` text NOT NULL,
  `Mail` varchar(50) NOT NULL,
  `Cell` int NOT NULL,
  `Timestamp` timestamp NOT NULL,
  `Posti` int NOT NULL
)
Per controllare se i posti sono disponibili potrei dare una cosa come questa?
PHP:
if ($row['difference'] == '8'){ } echo '<style>section{display: none; .soldout{display: block;} </style>'; echo "I posti sono terminati";

Ho anche un'altra domanda: come posso controllare che ogni valore della select dei posti da prenotare non superi i posti ancora disponibili?(tipo se ci sono ancora 5 posti nella select non deve comparire il 6)
Grazie
 

Fra_23

Utente Attivo
4 Mag 2021
40
4
8
Piccola modifica sql:
SQL:
CREATE TABLE IF NOT EXISTS `Evento` (
  `Nome` text NOT NULL,
  `Mail` varchar(50) NOT NULL,
  `Cell` decimal(10,0) NOT NULL,
  `Timestamp` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `Posti` int NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci AUTO_INCREMENT=1 ;
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
L'HTML5 ha introdotto delle 'novità', in particolare per i form: ha introdotto il type="number" che, come si evince dal nome, permette di selezionare un numero; oltretutto, tra i parametri opzionali, sono previsti anche MIN e MAX per cui potresti impostare min a 1 e max al numero massimo di posti disponibili evitando così di dover inserire dei controlli per verificare se l'utente non abbia prenotato più posti di quelli effettivamente disponibili.
 

Fra_23

Utente Attivo
4 Mag 2021
40
4
8
Andando avanti nella costruzione del sito ho trovato due problemi:
1-Prima di inviare il form volevo effettuare un controllo in modo che i posti disponibili sommati ai posti che una persona vuole prenotare non superino il totale disponibile. Ecco il codice che ho provato che però non funziona:
PHP:
$query = "SELECT (10) - SUM(posti) AS difference FROM Pizzeria"; $result = $conn->query( $query ); $row = $result>fetch_array(MYSQLI_ASSOC)) $total = $row['difference']-$posti; if($total > 0){ $sql = "INSERT INTO Pizzeria VALUES ('$name', '$lname','$cell', '$end', '$posti', '$data')"; }
$posti sono i posti che un utente vuole prenotare, mentre $row['difference'] sono i posti ancora disponibili

2-Vorrei chiedervi come voi strutturereste il db dato che gli utenti possono prenotare per qualsiasi giorno che è a sua volta diviso in due fascie orarie e io ho bisogno di poter controllare che i posti disponibili non vengano superati.

Spero di esser stato chiaro,grazie mille in anticipo!
 

Fra_23

Utente Attivo
4 Mag 2021
40
4
8
Prima di inviare il form volevo effettuare un controllo in modo che i posti disponibili sommati ai posti che una persona vuole prenotare non superino il totale disponibile.
*Prima di inviare il form volevo effettuare un controllo in modo che i posti disponibili sottratti ai posti che una persona vuole prenotare non superi tutti i posti per cui risulti un numero negativo.
non vengano superati
per ogni fascia oraria.
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
Faccio qualche prova e ti faccio sapere; purtroppo in questo periodov sono un po' occupato ma ti faccio sapere il prima possibile. A presto
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
Ciao, ho fatto un po’ di prove ed eccomi qua: sono partito dall’impostazione della tua tabella ma mi sono reso conto che non c’è possibilità di memorizzare (cosa fondamentale) né i posti totali per l’evento né i posti disponibili per cui, dopo parecchie prove, ho deciso di impostare così la tabella (ho inserito solamente i campi strettamente necessari per le prove):
PHP:
ID int autoincrement
POSTI_EVENTO int
POSTI_DISP int
NOMINATIVO varchar(30)
POSTI_PRENOTATI int


Ed ho inserito un record, parzialmente vuoto, dove ho registrato solamente POSTI_EVENTO e POSTI_DISP che, non essendoci state ancora prenotazioni, coincideranno, lasciando momentaneamente vuoti gli altri due. Quando un utente si vorrà prenotare gli apparirà un form che riporterà i posti-evento e i posti disponibili e chiederà quanti posti intende prenotare e il nominativo; a questo punto ci sarà un primo controllo: se i posti prenotati eccederanno i posti disponibili verrà emesso un messaggio d’errore, altrimenti verranno aggiornati i campi NOMINATIVO e POSTI_PREN e, contemporaneamente, inserito un nuovo record, anch’esso parzialmente vuoto, dove i POSTI_DISP stavolta saranno la differenza tra i posti precedentemente disponibili meno i posti prenotati; e così avanti fino al totale esaurimento dei posti; in questo caso, quando un nuovo utente proverà a prenotarsi verrà informato del completo esaurimento dei posti disponibili

Se, intanto, vuoi fare qualche prova ti mando il link e, nei prossimi giorni, ti mando tutti gli script, a presto
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
penso che siano passate 11 prenotazioni, oppure ha perso qualcosa per strada ...., prova a controllare

1657628608020.png


1657628638906.png
 

Fra_23

Utente Attivo
4 Mag 2021
40
4
8
Ciao, ho fatto un po’ di prove ed eccomi qua: sono partito dall’impostazione della tua tabella ma mi sono reso conto che non c’è possibilità di memorizzare (cosa fondamentale) né i posti totali per l’evento né i posti disponibili per cui, dopo parecchie prove, ho deciso di impostare così la tabella (ho inserito solamente i campi strettamente necessari per le prove):
PHP:
ID int autoincrement
POSTI_EVENTO int
POSTI_DISP int
NOMINATIVO varchar(30)
POSTI_PRENOTATI int


Ed ho inserito un record, parzialmente vuoto, dove ho registrato solamente POSTI_EVENTO e POSTI_DISP che, non essendoci state ancora prenotazioni, coincideranno, lasciando momentaneamente vuoti gli altri due. Quando un utente si vorrà prenotare gli apparirà un form che riporterà i posti-evento e i posti disponibili e chiederà quanti posti intende prenotare e il nominativo; a questo punto ci sarà un primo controllo: se i posti prenotati eccederanno i posti disponibili verrà emesso un messaggio d’errore, altrimenti verranno aggiornati i campi NOMINATIVO e POSTI_PREN e, contemporaneamente, inserito un nuovo record, anch’esso parzialmente vuoto, dove i POSTI_DISP stavolta saranno la differenza tra i posti precedentemente disponibili meno i posti prenotati; e così avanti fino al totale esaurimento dei posti; in questo caso, quando un nuovo utente proverà a prenotarsi verrà informato del completo esaurimento dei posti disponibili

Se, intanto, vuoi fare qualche prova ti mando il link e, nei prossimi giorni, ti mando tutti gli script, a presto
Grazie mille, aspetto gli script quando avrai tempo!
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
Hai ragione, Marino.....Dopo aver aggiunto l'ultimo record il progrmma rilegge l'intera tabella e ne memorizza l'ID, che gli serve poi per l'aggiornamento; a volte invece, e non capico perchè, ho fatto diverse prove ed era tutto ok, non leggeva correttamente e memorizzava l'ID del penultimo record invece dell'ultimo. Ora l'ho modificato, aggiungendo la clausola WHERE, ho fatto diverse prove e funziona
 
Ultima modifica:

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
Ciao, il primo script che ti mando (l'ho testato e funziona), e che deve essere eseguito per primo, è resetta.php

PHP:
<?php
//---------------leggo il DB---------------

include('conn.php');
$connessione = new mysqli($host, $user, $password, $db);

// verifica su eventuali errori di connessione
if ($connessione->connect_errno) {
    echo "Connessione fallita: ". $connessione->connect_error . ".";
    exit();
}

if (!$result = $connessione->query("SELECT * FROM PRENOTA order by ID asc")) {
    echo "Errore della query: " . $connessione->error . ".";
}else{
    // conteggio dei record
    if($result->num_rows > 0) {
       // conteggio dei record restituiti dalla query
       while($row = $result->fetch_array(MYSQLI_ASSOC)) {
             $id = $row['ID'];
             $postievento = $row['POSTI_EVENTO'];
             $postidisp = $row['POSTI_DISP'];
             $postiprenot = $row['POSTI_PREN'];
       }
       // liberazione delle risorse occupate dal risultato
       $result->close();
    }
}
session_start();
$_SESSION['posti_evento'] = $postievento;
$_SESSION['posti_disp'] = $postidisp;
$_SESSION['nominat'] = '';
$_SESSION['posti_prenotati'] = '';
$_SESSION['messaggio'] = '';
$_SESSION['ID'] = $id;

include('FORM2.php');
?>

il quale, come dice il nome, si occuperà di resettare le variabili di sessione, non prima, però, di aver letto l'intera tabella per memorizzare l'ID dell'ultimo record immesso, che servirà in seguito quando un utente vorrà prenotarsi e da dove recupererà il nr di posti ancora disponibili dopodiché richiamerà (include) il form vero e proprio FORM2.php
PHP:
<style>
green {
    color:green;
}
red {
    color:red;
}
</style>
<?php
session_start();
$postievento=$_SESSION['posti_evento'];
$postidisp=$_SESSION['posti_disp'];
$messaggio=$_SESSION['messaggio'];
$nrprenot=$_SESSION['posti_prenotati'];
$id=$_SESSION['ID'];

if ($postidisp<=0) {
    echo '<h3><red>Spiacenti. I posti disponibili per questo evento sono esauriti</red></h3>';
}else{
    echo 'ultimo ID inserito: '.$id;
    //----------------imposto il FORM-----------------
    echo '<form action="controlla.php" method="get">';
    echo '<br>Posti evento: '.$postievento.'<br>';
    echo '<br>Posti disponibili rimasti: '.$postidisp.'<br>';
    echo '<br>Immetti numero di posti che intendi prenotare: ';
    echo '<input type="text" name="nrposti" value="'.$nrprenot.'" size="5"><br><br>';
    echo '<br>Immetti il nomilnativo: ';
    echo '<input type="text" name="nominat" value="'.$nominat.'"><br><br>';
    if (substr($messaggio,0,2)=='Ok') {
        echo '<green>'.$messaggio.'</green><br><br>';
    }else{
        echo '<red>'.$messaggio.'</red><br><br>';
    }
    echo '<input type="submit" name="submit" value="Invia dati">';
    echo '</form>';
    if (substr($messaggio,0,2)=='Ok') {
        include('aggiorna.php');
    }
}
?>

Come puoi vedere sia in questo che negli altri script ho inserito parecchi echo che mi sono serviti solo per vedere la/le variabili effettivamente passate ma che tu puoi tranquillamente omettere. Nei prossimi giorni ti mando gli ultimi due script. In conn.php sono contenute le variabili di connessione. A presto
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
Ho visto che avevi fatto qualche prova col link che ti avevo mandato; ora l'ho sistemato, aggiungendo ORDER BY: in pratica, e non capisco perché, quando inseriva un nuovo record in realtà non lo inseriva in fondo alla tabella, come ci si aspetterebbe, ma magari tra il primo e il secondo per cui, quando chiedevo l'id dell'ultimo record mi dava, in realtà correttamente, il record in fondo alla tabella che però non era l'ultimo; questo infatti riporta il numero dei posti ancora disponibili e quindi, non leggendo corrrettamente il dato, dava continuamente la possibilità di prenotarsi anche quando i posti erano finiti. Ora, come ti ho detto, l'ho sistemato e ho fatto anche diverse prove e funziona; prima di mandarti gli altri script però preferirei, per qualsiasi evenienza, magari un piccolo cambiamento, che lo ritestassi. Ti rimando il link, fammi sapere. Ciao
 
Ultima modifica:

Fra_23

Utente Attivo
4 Mag 2021
40
4
8
Ciao, intanto grazie dal link mi sembra che funzioni, l'unica cosa é che forse nel riepilogo non ti fa vedere il tuo ID ma l'ultimo inserito
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
Ciao, l'id è servito solo a me per controllare che effettivamente leggesse l'ultimo record, ma tu puoi anche toglierlo, tanto all'utente non interessa; oppure, se vuoi che venga visualizzato anche l'id derll'utente che si è appna prenotato, lo posso modificare, fammi sapeere. Al più presto ti mando gli altri due script. A presto
 
Discussioni simili
Autore Titolo Forum Risposte Data
B Sito php+mysql da web ad applicazione PHP 3
D [PHP] [RETRIBUITO] cercasi esperto programmatore per realizzare applicazione in html e codice iframe PHP 0
F [PHP] Organizzare le directories sul server per un'applicazione web PHP 9
S Come distribuire una applicazione PHP in Cloud Cloud Computing e Cloud Server 0
D Applicazione Database (php,html) PHP 0
M Problema avvio applicazione PHP PHP 8
M esecuzione comando shell da applicazione php su client PHP 5
A Sviluppo applicazione php PHP 0
neo996sps Applicazione complessa in PHP: quale framework utilizzare? PHP 3
H Piccola applicazione per News con Php, Xml e Flash: problema ordinamento. XML 0
A Configurare una applicazione PHP in Joomla Joomla 2
D [Vendo] Applicazione professionale per gestione agenzia immobiliare / php Offerte e Richieste di Lavoro e/o Collaborazione 0
felino Lubuntu 18.04 Requisiti per applicazione console .net core 7.0 Linux e Software 0
felino Applicazione CRUD su hosting condiviso PHP 0
R [c#] Proteggere il codice dell'applicazione C/C++ 0
D [RETRIBUITO] cercasi esperto programmatore per realizzare applicazione in html e codice iframe Offerte e Richieste di Lavoro e/o Collaborazione 2
G [Javascript] Intercettare cambio applicazione Javascript 0
M [SI CERCA] Grafico per rinnovare applicazione My Shopping List Offerte e Richieste di Lavoro e/o Collaborazione 0
C [RETRIBUITO] Sviluppo applicazione web gestione fantacalcio Offerte e Richieste di Lavoro e/o Collaborazione 0
A [CERCO] cerco esperto di codici HTML e JavaScript per lavorare ad 1 applicazione Offerte e Richieste di Lavoro e/o Collaborazione 1
A APP per scaricare documento XML e visualizzarlo all'interno dell'applicazione Sviluppo app per Android 1
felino [Windows XP] Errore Icone Programmi e Lancio Applicazione Windows e Software 5
H Selezionare la versione di Access Runtime in base all' applicazione MS Access 0
H Selezionare la versione di Access Runtime in base all' applicazione MS Access 0
voldemort [Java] Connettere MySQL con applicazione j2ee Java 1
G Io ho finito la mia prima applicazione web con MVC ed ho bisogno di metterla in linea ma non so come ASP.NET 2
A Semplice applicazione con le facebook api PHP 1
jacobous Applicazione Sviluppo app per Android 3
A Modulo custom Drupal e applicazione java CMS (Content Management System) 0
I 4 aiuti per un'applicazione intranet PHP 16
E [VB.NET] pagine htm da applicazione .NET Framework 1
A Ricerca interna in una applicazione Sviluppo app per Android 1
L Realizzare applicazione per hotel con camere disponibili PHP 2
onweb Vendo applicazione asp.net - block notes Altri Annunci 0
F documentazione tecnica di un applicazione web PHP 6
I Applicazione Offerte e Richieste di Lavoro e/o Collaborazione 1
L [Java] Consigli progettuali per una semplice applicazione Java 6
E Creare DataBase in applicazione Android con Phonegap Database 12
E Come creare e inserire un database in un'applicazione in fase di sviluppo Sviluppo app per Android 1
giamma tool o applicazione per html css HTML e CSS 0
C Applicazione per bambini HTML e CSS 0
S Vendo applicazione (sviluppata privatamente) che prende altre pagine di facebook e le rende vostre! Annunci servizi di Social Media Marketing 0
E Richiesta fattibilità sviluppo applicazione ios Sviluppo app per iOS 0
A Primi passi applicazione con Javaswing Java 2
M Come fare il debug di una applicazione web su Internet Explorer 8 jQuery 1
R Cerco programmatore per applicazione Windows Offerte e Richieste di Lavoro e/o Collaborazione 0
M Organizzare applicazione in moduli PHP 1
I [VENDO] App viral Facebook, scopri quando morirai, Applicazione Virale. Annunci servizi di Social Media Marketing 0
M Una dritta su come organizzare un'applicazione PHP 2
S [offro lavoro] cerco sviluppatore per tramutare sito web in applicazione per iphone e android Offerte e Richieste di Lavoro e/o Collaborazione 0

Discussioni simili