Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    script per la prenotazione delle stanze

    Buongiorno a tutti
    Sto programmando in php uno script che gestisce la prenotazione di case vacanze con database mysql.
    Tramite un form vengono inserite la data di ingresso ($dayin) e di uscita ($dayout) e tramite queste viene fatto un controllo sul database per vedere se la casa selezionata ($app_id) è libera in quel periodo.
    Ho pensato quindi una query select di questo genere:

    codice:
    $query = "SELECT * FROM prenotazioni WHERE (($dayin BETWEEN data_in AND data_out) AND ($dayout BETWEEN data_in AND data_out) OR ($dayin < data_in) AND ($dayout BETWEEN data_in AND data_out) OR ($dayin BETWEEN data_in AND data_out) AND ($dayout > data_out) OR ($dayin < data_in) AND ($dayout > data_out)) AND id_app=$_POST[app_id]";
    $result = mysql_query($query, $db);
    $num_results = mysql_num_rows($result);
    if ($num_results == "")
    {
    echo "appartamento libero";
    }
    else
    {
    echo "appartamento occupato";
    }
    fin qui non ho incontrato nessun problema.
    Sul sistema che ho pensato, chi vuole bloccare la prenotazione dovrà pagare una caparra entro 24 ore dall'inserimento delle date, quindi ho creato le colonne ora_prenotazione e status sul db.
    A pagamento avvenuto lo status passerà da pending a confirmed ed il periodo sarà bloccato.
    Anche nelle 24 ore di tempo a disposizione per il pagamento della caparra il periodo verrà bloccato. Scaduto tale termine, l'appartamento tornerà libero nel periodo selezionato.
    La query:

    codice:
    $tiempoin = mktime() - 86400;
    $query = "SELECT * FROM prenotazioni WHERE (($dayin BETWEEN data_in AND data_out) AND ($dayout BETWEEN data_in AND data_out) OR ($dayin < data_in) AND ($dayout BETWEEN data_in AND data_out) OR ($dayin BETWEEN data_in AND data_out) AND ($dayout > data_out) OR ($dayin < data_in) AND ($dayout > data_out)) AND id_app=$_POST[app_id] AND status!='pending'";
    $result = mysql_query($query, $db);
    $num_results = mysql_num_rows($result);
    if ($num_results == "")
    {
    echo "appartamento libero";
    }
    else
    {
    echo "appartamento occupato";
    }
    e quest'altra query:

    codice:
    $tiempoin = mktime() - 86400;
    $query = "SELECT * FROM prenotazioni WHERE (($dayin BETWEEN data_in AND data_out) AND ($dayout BETWEEN data_in AND data_out) OR ($dayin < data_in) AND ($dayout BETWEEN data_in AND data_out) OR ($dayin BETWEEN data_in AND data_out) AND ($dayout > data_out) OR ($dayin < data_in) AND ($dayout > data_out)) AND id_app=$_POST[app_id] AND ora_prenotazione>'$tiempoin'";
    $result = mysql_query($query, $db);
    $num_results = mysql_num_rows($result);
    if ($num_results == "")
    {
    echo "appartamento libero";
    }
    else
    {
    echo "appartamento occupato";
    }
    danno i risultati previsti, ma come inserisco due AND nella query principale, la query mi risponde con gli appartamenti tutti liberi.
    Come posso fare per integrare le due condizioni nella query?

  2. #2
    Non ho capito... le 2 AND che ti danno problemi quali sono?
    Pubblicizza, Promuovi e Valuta il tuo sito su WebPortale
    Strategie e Consigli sul Gioco Manageriale di F1 GPRO GPRO STRATEGY
    Sito sulla Borsa con Gioco FantaBorsa Gioco-Borsa

  3. #3
    La query con i due AND è questa:
    codice:
    $tiempoin = mktime() - 86400;
    $query = "SELECT * FROM prenotazioni WHERE (($dayin BETWEEN data_in AND data_out) AND ($dayout BETWEEN data_in AND data_out) OR ($dayin < data_in) AND ($dayout BETWEEN data_in AND data_out) OR ($dayin BETWEEN data_in AND data_out) AND ($dayout > data_out) OR ($dayin < data_in) AND ($dayout > data_out)) AND id_app=$_POST[app_id] AND status!='pending' AND ora_prenotazione>'$tiempoin'"; 
    $result = mysql_query($query, $db);
    $num_results = mysql_num_rows($result);
    if ($num_results == "")
    { 
    echo "appartamento libero"; 
    } 
    else
    {
    echo "appartamento occupato";
    }
    la quale mi risponde, sbagliando, che l'appartamento è libero.

  4. #4
    è una WHERE molto lunga... :-)

    dando per scontato che il problema sia sull'orario ossia l'ultimo pezzo:

    AND ora_prenotazione>'$tiempoin'

    prima della query fatti mettere a video l'orario trovato

    echo 'Orario: '. $tiempoin;

    e vedi se è corretto....

    poi vedi nel DB su ora prenotazione casa cè...

    se ora prenotazione è ad esempio le 8 e tiempoin è 7 sicuramente ti darà tutte le stanze.. :-)
    Pubblicizza, Promuovi e Valuta il tuo sito su WebPortale
    Strategie e Consigli sul Gioco Manageriale di F1 GPRO GPRO STRATEGY
    Sito sulla Borsa con Gioco FantaBorsa Gioco-Borsa

  5. #5
    Il problema è che non riesce proprio a leggere i dati dal db, se gli chiedo la stampa dei risultati non mi da nulla...e non capisco il perchè!

  6. #6
    così sembra risolto ma ho dovuto limitare ad 1 la query:

    codice:
    $tiempoin = mktime() - 86400; 
    $query = "SELECT * FROM prenotazioni WHERE (($dayin BETWEEN data_in AND data_out) AND ($dayout BETWEEN data_in AND data_out) OR ($dayin < data_in) AND ($dayout BETWEEN data_in AND data_out) OR ($dayin BETWEEN data_in AND data_out) AND ($dayout > data_out) OR ($dayin < data_in) AND ($dayout > data_out)) AND id_app=$_POST[app_id] LIMIT 1"; 
    $result = mysql_query($query, $db); 
    $num_results = mysql_num_rows($result); 
    if ($num_results == "") 
    { 
    echo "libero";
    else 
    {
    while($row=mysql_fetch_array($result))
    { 
    if ($row[ora_prenotazione] < $tiempoin AND $row[status] == "pending") 
    { 
    echo "libero";
    } 
    else 
    { 
    echo "occupato";
    }
    }

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.