La query e' anche giusta, ma non viene mai eseguita.
http://it2.php.net/manual/en/function.mysql-query.php
La query e' anche giusta, ma non viene mai eseguita.
http://it2.php.net/manual/en/function.mysql-query.php
Ah il result !
Si scusate, era pure una mia dimenticanza, nella fretta di risolvere il problema delle date mi era completamente passata di mente !!
Aggiungo e modifico, caso mai funzionasse ..
In effetti non mi visualizzava niente : ho provato a fare cosi inserendo un echo per verificare:
Ed ora il valore data apertura lo visualizzo.Codice PHP:
$apertura = "SELECT dataapertura FROM alloggi WHERE id_hotel='$id_hotel'";
$result = mysql_query($apertura,$db_conn) or die(mysql_error());
$rows = mysql_num_rows($result);
while($row = mysql_fetch_assoc($result)){
echo "$row[dataapertura]";
}
Ora, se ho ben capito, invece di fare l'echo ( che era messo li per esempio ) devo :
assegnare $dataapertura = $row[apertura] ; cosi assegno il valore alla variabile.
confrontarla con la data che prendo ( che e' gia in formato anno, mese, giorno ).
Posso provare a fare come mi ha detto cubalibre ? In effetti hanno lo stesso identico formato ... data arrivo infatti e' gia messa come :
codice:$dataarrivo = (date("$annoarrivo-$mesearrivo-$giornoarrivo"));
Se ti aspetti un risultato solo dalla query non ti serve il ciclo while, se vuoi fare il confronto come ti ho suggerito io date() non ti serve a nulla
Si puoi confrontarle anche in formato stringa "yyyy-mm-dd", ma prima di tutto leva quel date() che non serve a niente.
Accertati pero' che il formato sia veramente yyyy-mm-dd con gli zeri se i mesi o i giorni sono minori di 10: se hai stringhe tipo "2008-6-2", allora questo semplice controllo su stringhe non funziona (motivo per cui e' sempre meglio confrontare i dati nel loro vero formato).
Funziona finalmente, ringrazio tutti per la pazienza.
Sicuramente ho messo qualche cosa in piu, ma devo consegnare tutto questo progetto venerdi mattina, e sto andando un po' a tirar via...
Intanto posto il codice completo ( praticamente, in un form di prenotazioni, vede se l'intervallo scelto e' compreso tra l'intervallo in cui la struttura e' aperta ) : se trovate qualche cosa da eliminare e me lo dite mi fate un grosso favore, altrimenti avete gia fatto tanto cosi![]()
Codice PHP:
<?php
include ("config.php");
session_start();
$id_hotel = ($_POST['id_hotel']);
$giornoarrivo = $_POST['giornoarrivo'];
$mesearrivo = $_POST['mesearrivo'];
$annoarrivo = $_POST['annoarrivo'];
$giornopartenza = $_POST['giornopartenza'];
$mesepartenza = $_POST['mesepartenza'];
$annopartenza = $_POST['annopartenza'];
$numeropersone = $_POST['numeropersone'];
$richiedente_id = $_POST['richiedente_id'];
$dataarrivo = ("$annoarrivo-$mesearrivo-$giornoarrivo");
$datapartenza = ("$annopartenza-$mesepartenza-$giornopartenza");
//Recupero la data di apertura e chiusura dell'alloggio
$aperturachiusura = "SELECT dataapertura,datachiusura FROM alloggi WHERE id_hotel='$id_hotel'";
$result = mysql_query($aperturachiusura,$db_conn) or die(mysql_error());
$rows = mysql_num_rows($result);
while($row = mysql_fetch_assoc($result)) {
$dataapertura = "$row[dataapertura]";
$datachiusura = "$row[datachiusura]";
}
//Se la data di arrivo e' precedente a quella di apertura segnalo l'errore
if ($dataarrivo < $dataapertura || $dataarrivo > $datachiusura || $datapartenza < $dataapertura || $datapartenza > $datachiusura) {
$_SESSION['id_hotel'] = $id_hotel;
header ("location: ../conferma_prenotazione.php?er=3");
exit;
}
// Se i dati sono mancanti, indirizzo l'utente e stampo l'errore
if ($numeropersone=='' || $giornoarrivo =='' || $annoarrivo =='' || $mesearrivo ==''|| $giornopartenza=='' || $mesepartenza =='' || $annopartenza =='') {
$_SESSION['id_hotel'] = $id_hotel;
header ("location: ../conferma_prenotazione.php?er=1");
exit;
}
// Se la data di arrivo e' dopo la data di partenza posto l'errore
if ($dataarrivo > $datapartenza) {
$_SESSION['id_hotel'] = $id_hotel;
header ("location: ../conferma_prenotazione.php?er=2");
exit;
}
// Query inserimento alloggi
$query = "INSERT INTO prenotazioni (richiedente_id, struttura_id, dataarrivo, datapartenza, personetotali) VALUES ('$richiedente_id', '$id_hotel', '$annoarrivo-$mesearrivo-$giornoarrivo','$annopartenza-$mesepartenza-$giornopartenza', '$numeropersone')";
$result = mysql_query($query, $db_conn) or die ("Errore connessione:" . mysql_error());
mysql_close();
$_SESSION['id_hotel'] = $id_hotel;
header ("location: ../conferma_prenotazione.php?check=ok");
?>
Originariamente inviato da k.b
Accertati pero' che il formato sia veramente yyyy-mm-dd con gli zeri se i mesi o i giorni sono minori di 10: se hai stringhe tipo "2008-6-2", allora questo semplice controllo su stringhe non funziona (motivo per cui e' sempre meglio confrontare i dati nel loro vero formato).
Si, infatti avevo scelto di far inserire i valori con dei menu a tendina per evitare questo problema, dovrebbe andare cosi !!
ci può essere un caso in cui la data di arrivo sia successiva alla chiusura, un'altra dove la data di partenza sia successiva alla chiusura ed un ultimo in cui la data di arrivo è precedente alla chiusura, le devi aggiungere.
P.S:ma qui a che ti servono le parentesi?
Codice PHP:
$dataarrivo = ("$annoarrivo-$mesearrivo-$giornoarrivo");
$datapartenza = ("$annopartenza-$mesepartenza-$giornopartenza");
I primi 2 casi li ha già inseriti, il terzo non mi sembra un errore.Originariamente inviato da dararag
ci può essere un caso in cui la data di arrivo sia successiva alla chiusura, un'altra dove la data di partenza sia successiva alla chiusura ed un ultimo in cui la data di arrivo è precedente alla chiusura, le devi aggiungere.
@ezechiele: Secondo me la logica più adatta è questa
Con questi semplici controlli dovresti escludere tutte le possibilitàCodice PHP:
if($dataarrivo >= $datapartenza)
{
// Errore, la data di arrivo è successiva a quella di partenza (o lo stesso giorno)
}
if($dataarrivo < $dataapertura || $datapartenza > $datachiusura)
{
// Errore, arrivo o partenza fuori dal periodo di apertura
}
![]()
scusa, data di arrivo PRECEDENTE all'apertura