Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    69

    problema script controllo disponibilita camere B&B

    ciao a tutti

    sto uscendo di testa con uno script in php che è fondamentale per un lavoro che sto svolgendo. Devo realizzare uno script che controlla la disponibilità di 3 camere di un B&B. Il database e strutturato cosi:

    Ho 2 tabelle..una si chiama camere e contiene l' IDCamera (PK), Nomecamera,descrizione,foto e stato disponibilità... l' altra tabella si chiama prenotazioni e contiene l' IDPrenotazione(PK), la data arrivo, la data di partenza, l' id della camera prenotata(cioe la chiave primaria della tabella camere), il nome e il cognome del prenotante e un campo Archiviata che chiude la prenotazione(liberando cosi le date legate a essa). Il tutto inizia con l' inserimento da parte dell' utente della data di arrivo e della data di partenza. Vorrei che lo script, una volta inserite le date, controlli che in quest intervallo ci sia una o più camere libere(ricordo che le camere sono 3). Nel caso fossero tutte occupate per l' intervallo scelto, deve essere restituito un messaggio di tutto occupato, ma vorrei allo stesso tempo che si proceda con la prenotazione se trova qualche camera libera, anche se le date coincidono con una prenotazione gia esistente, in maniera quindi che le prenotazioni vengano gestite oltre che per intervallo di date anche per camera. Ci sto sbattendo la testa da settimane ma senza risultato.....chi mi puo aiutare? aspetto risposte



    grazie a tutti

  2. #2
    Quote Originariamente inviata da serrafra Visualizza il messaggio
    ciao a tutti

    sto uscendo di testa con uno script in php che è fondamentale per un lavoro che sto svolgendo. Devo realizzare uno script che controlla la disponibilità di 3 camere di un B&B. Il database e strutturato cosi:

    Ho 2 tabelle..una si chiama camere e contiene l' IDCamera (PK), Nomecamera,descrizione,foto e stato disponibilità... l' altra tabella si chiama prenotazioni e contiene l' IDPrenotazione(PK), la data arrivo, la data di partenza, l' id della camera prenotata(cioe la chiave primaria della tabella camere), il nome e il cognome del prenotante e un campo Archiviata che chiude la prenotazione(liberando cosi le date legate a essa). Il tutto inizia con l' inserimento da parte dell' utente della data di arrivo e della data di partenza. Vorrei che lo script, una volta inserite le date, controlli che in quest intervallo ci sia una o più camere libere(ricordo che le camere sono 3). Nel caso fossero tutte occupate per l' intervallo scelto, deve essere restituito un messaggio di tutto occupato, ma vorrei allo stesso tempo che si proceda con la prenotazione se trova qualche camera libera, anche se le date coincidono con una prenotazione gia esistente, in maniera quindi che le prenotazioni vengano gestite oltre che per intervallo di date anche per camera. Ci sto sbattendo la testa da settimane ma senza risultato.....chi mi puo aiutare? aspetto risposte



    grazie a tutti
    hai gia le query che controllano la disponibilità?
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    69
    ciao

    ho ragionato cosi:

    la prima query e questa:

    select * from prenotazioni WHERE Archiviata = NO;

    e mi seleziona tutte le prenotazioni attive , cioe quelle dove poi eseguirò il controllo

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Puoi anche aggiungere direttamente con "AND...." le clausole che metteresti nelle query seguenti, così fai tutto in un colpo solo.
    Non c'è bisogno di filtrare una cosa alla volta, anzi, è controproducente.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    69
    ok...la query finita è questa

    SELECT * FROM prenotazioni WHERE Archiviata='NO' AND DataArrivo>='$dac' AND DataPartenza<='$dpc'"...
    dove $dac e $dpc sono rispettivamente la data di arrivo e la data di partenza inserita dall' utente. Attualmente ho 2 prenotazioni fittizie inventate da me per le prove: una che inizia il 03.07.2014 e finisce il 06.07.2014 e l' altra che inizia il 07.07.2014 e finisce il 11.07.2014....entrambe le prenotazioni sono sulla camera numero 1.... non funziona come vorrei (io infatti vorrei che anche se esiste una prenotazione gia eseguita sulla camera 1 vorrei che rimanessero disponibili per la prenotazione le camere 2 e 3)...inoltre non riesco a gestire le date comprese nell' intervallo fra arrivo e partenza....

  6. #6
    Quote Originariamente inviata da serrafra Visualizza il messaggio
    ok...la query finita è questa

    SELECT * FROM prenotazioni WHERE Archiviata='NO' AND DataArrivo>='$dac' AND DataPartenza<='$dpc'"...
    dove $dac e $dpc sono rispettivamente la data di arrivo e la data di partenza inserita dall' utente. Attualmente ho 2 prenotazioni fittizie inventate da me per le prove: una che inizia il 03.07.2014 e finisce il 06.07.2014 e l' altra che inizia il 07.07.2014 e finisce il 11.07.2014....entrambe le prenotazioni sono sulla camera numero 1.... non funziona come vorrei (io infatti vorrei che anche se esiste una prenotazione gia eseguita sulla camera 1 vorrei che rimanessero disponibili per la prenotazione le camere 2 e 3)...inoltre non riesco a gestire le date comprese nell' intervallo fra arrivo e partenza....
    questa query ti restituisce i dati delle prenotazioni in una determinata data.

    Tu non hai bisogno di questo.

    Devi scrivere una query che ti dice se in un determinato periodo hai camere vuote. Quindi se ci sono camere che in un determinato periodo non hanno un record nella tabella prenotazione
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    69
    ok va bene su questo ci sono.....ma come faccio a fare questo che mi dici??

  8. #8
    Quote Originariamente inviata da serrafra Visualizza il messaggio
    ok va bene su questo ci sono.....ma come faccio a fare questo che mi dici??
    vediti i seguenti concetti : left/right join e ifnull
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  9. #9
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Comincia a dare un'occhiata qui, magari qualche lampadina ti si accende

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    69
    forse ci sono...allora.....ho creato la query giusta...eccola qua:

    SELECT * FROM prenotazioni WHERE Archiviata='NO' AND (DataArrivo='$dac') || (DataPartenza='$dpc') || (DataArrivo BETWEEN '$dac' AND '$dpc') || (DataPartenza BETWEEN '$dac' AND '$dpc')"

    dove in una tabella prenotazioni controllo tutte le prenotazioni attive (NON archiviate) sulla base dell' inserimento da parte dell' utente di due date. Una volta inserite le date, la query controlla l' esistenza di prenotazioni in quel range di date, e restituisce se ci sono prenotazioni oppure no. La logica è questa: se non ci sono prenotazioni, fai procedere l' utente alla scelta delle camere da prenotare (che in questa struttura alberghiera sono 3), nel caso invece che esistano prenotazioni in questo range, eseguo subito dopo una query di count che conta quante camere sono state prenotate nel suddetto range di date. Se il valore restituito è uguale a 3(il totale delle camere disponibili), non sarà permesso all' utente di prenotare in queste date, se invece il valore restituito è minore di 3, conto quante camere sono state prenotate (per esempio 2) e restituisco all' utente il messaggio che può continuare con la prenotazione ma potendo prenotare soltanto una camera (che è quella che rimane libera in quelle date, perché 2 sono gia prenotate). Fino a qua funziona benissimo e non fa una piega, il problema sorge adesso:

    nel mio database, nella tabella prenotazioni, ho inserito 2 prenotazioni. Una con data arrivo al 03.07.2014 e data partenza al 06.07.2014, e un altra con data arrivo al 07.07.2014 e data partenza al 11.07.2014. Se da form inserisco come data di arrivo il 03.07.2014 e data partenza il 05.07.2014, la query funziona bene dicendo che ci sono prenotazioni, e cosi vale se scelgo una data di partenza presente nel DB. Il problema sorge quando inserisco una data che va dal 04.07.2014 al 05.07.2014, che in realtà è contenuta in una prenotazione, ma la query mi dice che non ci sono prenotazioni, nonostante invece ci siano...... secondo voi dove sta l' errore nella query??



    aspetto risposte


    grazie

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.