Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Progettazione database MYSQL + PHP (delucidazioni)

    Salve a tutti ragazzi, vi espongo subito il mio problema. Sto creando un database con interfaccia web, che si occupa di prenotazioni ad un ristorante. La tabella relativa ai dati da inserire contiene il campo relativo al nome e al cognome del cliente, quello della data e dell'ora della prenotazione (sono due campi separati) e quello relativo al numero di posti da prenotare. Ho due problemi:
    Il primo è quello di impedire la prenotazione durante la giornata di chiusura e il secondo riguarda il limite di posti presente nel ristorante. Spiego meglio quest'ultimo passaggio. Mi piacerebbe implementare un controllo che mi blocchi le prenotazioni oltre un certo limite di posti, ad esempio se ho 50 posti a sedere prenotati, vorrei impedire all'utente di inserire ulteriori prenotazioni. Calcolare il numero totale di posti prenotati lo fatto tuttavia trovo complesso associare questi posti sia alla data e sia all'ora. Faccio un altro esempio: ho ricevuto prenotazione di 50 posti a sedere alle ore 21:30 del 01/01/2001, il 51° cliente non può prenotarsi a quell'ora ma lo potrà fare alle ore 21:30 del giorno dopo. Quindi ricapitolo:
    1) Impedire la prenotazione durante un giorno di chiusura del locale.
    2) Impedire la prenotazione oltre un certo limite di posti occupati alle ore tot del giorno tot.
    Forse sbaglio proprio il ragionamento, però non riesco ad uscirne più. Spero di essere stato chiaro nell'esposizione del mio problema.

  2. #2
    Embè la domanda sarebbe? Come si fà? Mi pare un pò troppo vaga come domanda non ti pare? Intanto

    1) Se è giorno di chiusura, non devi accettare prenotazioni. E mi sembra abbastanza semplice come task no? da qualche parte nel database avrai una tabella che riporta i giorni di chiusura (che non sono solo il classico giorno della settimana, ma anche le festività in cui il locale è chiuso). Quindi immagino che lato web ci sia una parte del pannello di controllo dedicata a riempire questa tabella. Quando inserisci la prenotazione, se la data della prenotazione ricade in un o di questi giorni, non la inserisci e dai un "errore" a video (oppure meglio non dai proprio la possibilità lato client di effettuare la prenotazione in quel giorno)

    2) Avrai impostato da qualche parte nel db il numero massimo di prenotazioni via web accettabili (conta che un ristorante riceve prenotazioni anche e soprattutto telefoniche. Ora, o anche dal ristorante usano il tuo pannello web per registrare la prenotazione telefonica, oppure il gestore imposterà un limite massimo di prenotazioni accettabili in maniera da avere/non avere overbooking). Quando inserisci una prenotazione fai un check di quante prenotazioni ci sono in quella giornata e in quella fascia oraria ( una select count con un pò di where e group by sulla data della prenotazione), e se hai raggiunto quella soglia non registri la prenotazione.

    Insomma, ti rimando allo studio dell'sql poi magari se cerchi in giro trovi qualcosa di già pronto magari da cui prendere spunto. Sistemi di prenotazione di vario tipo vanno/sono andati molto di moda
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Ciao innanzitutto ti ringrazio per avermi risposto , comunque tornando al mio problema, si era proprio questo che volevo sapere, cioè volevo capire come costruire i controlli per fare ciò che ho descritto prima. Allora sulla prima domanda sei stato chiaro e penso di aver compreso come fare, mentre sulla seconda sono rimasto un po' confuso. Potresti gentilmente spiegarti un po' meglio, magari facendomi anche qualche esempio ?

  4. #4
    com'è struttura la tabella delle prenotazioni? intendo nome_campo -> tipo_campo
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    codice:
    CREATE TABLE    PRENOTAZIONE
        (   Id_prenotazione             integer          NOT NULL AUTO_INCREMENT,
            Nome_cliente                varchar(30)      NOT NULL,
            Cognome_cliente             varchar(30)      NOT NULL,
            Data_prenotazione           varchar(30)      NOT NULL,
            Ora_prenotazione            time             NOT NULL,
            Num_persone                 integer          NOT NULL,
        PRIMARY KEY(Id_prenotazione));

  6. #6
    case:

    1) Devo eseguire una prenotazione

    2) scelgo il giorno e l'ora

    3) spingo "invia" sul forum

    4) lo script fà una query del tipo select count(*) from prenotazioni where Data_prenotazione = $dataPrenotazione

    5) if query_result > XX then die("Numero massimo di prenotazioni raggiunto") else record_prenotazione; die("prenotazione salvata"); endif

    na cosa rozza così più o meno

    ps: oddio, se il campo Data_prenotazione lo converti in DATE aiuti l'umanità

    NOTA: faccio poi presente che non puoi accettare prenotazioni con troppe persone, nel senso che non è che io faccio una prenotazione per 2000 persone e il sistema me l'accetta
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    se stai utilizando delle date perche non usi il formato date invece di varchar e poi fai dei controlli fra date .

    alcuni link :
    http://stackoverflow.com/questions/1...y-between-date

    http://stackoverflow.com/questions/1...ime-in-a-range

    non sono entrato nel merito approfonditamente comunque penso sia questa la strada,
    spero di esserti stato utile .

  8. #8
    Grazie nuovamente ad entrambi, comunque si, sono riuscito a fare i giusti controlli per le prenotazioni . Per quanto riguarda l'attributo varchar sulle date, inizialmente avevo utilizzato il tipo date ma quando dovevo inserire i vari dati, l'utente(ovviamente) era vincolato ad inserire la data nel formato americano, visto che mysql non accetta il formato italiano. Spulciando nel forum ho trovato questa funzione:
    Codice PHP:
    function data_it($data

      
    // Creo una array dividendo la data YYYY-MM-DD sulla base del trattino 
      
    $array explode("-"$data);  

      
    // Riorganizzo gli elementi in stile DD/MM/YYYY 
      
    $data_it $array[2]."/".$array[1]."/".$array[0];  

      
    // Restituisco il valore della data in formato italiano 
      
    return $data_it;  

    ma alcuni utenti sconsigliavano l'utilizzo della funzione explode, invece consigliavano l'utilizzo della classe "date"; ma nonostante abbiano linkato alcune pagine dove venivano spiegate, io non ci ho capito nulla, perciò chiedo a voi, cosa è meglio utilizzare la funzione che ho riportato oppure la classe "date" ?
    ps: se volete vi metto il link della discussione

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Attenzione. Se vuoi fare dei confronti tra date o ordinare i records devi per forza utilizzare un formato YYYYMMGG che poi tra YYYY MM e GG vi sia un - o un / o nulla non è importante.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Sorry ragazzi, ma ho sbagliato funzione, questa è quella giusta :
    Codice PHP:
    function conv_date ($data) {    
       list (
    $d$m$y) = explode ("/"$data);    
       return 
    "$y-$m-$d";  

    Naturalmente bisogna solo adattarla alla data in formato ita, scambiando di posizione le variabili. Secondo voi è utilizzabile ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.