Ciao a tutti,
ho un problema con una funzione per la gestione delle prenotazioni.
La mia funzione riceve come input la data di arrivo e partenza e la tabella corrispondente nel database ha i seguenti campi: id_prenotazione,data arrivo e data partenza.
La mia funzione è la seguente:
public static function ricercaDisponibilità($a,$b)
{
self::$arrivo = $a;
self::$partenza = $b;
$connessione = connessioneDB::getInstance();
$c = $connessione->getConnessione();
//numero totale di ombrelloni
$ombrelloni = array();
for($i=1; $i<=30;$i++)
{
$ombrelloni[] = $i;
}
$sql = "SELECT * FROM prenotazioni WHERE (:arrivo BETWEEN arrivo AND partenza) OR (:partenza BETWEEN arrivo AND partenza)
OR ((arrivo BETWEEN :arrivo AND :partenza) AND (partenza BETWEEN :arrivo AND :partenza))";
$risultato = $c->prepare($sql);
$risultato->bindValue(":arrivo",self::$arrivo);
$risultato->bindValue(":partenza",self::$partenza);
$risultato->execute();
echo "ombrelloni occupati: <br>";
foreach ($risultato as $r)
{
$occupati[]=$r['numero_ombrellone'];
}
print_r($occupati);
echo " <br>";
/*----la funzione array_diff confronta due array e ritorna i valori del primo array
------che non sono presenti nel secondo array------------------------------*/
echo "<br> ombrelloni liberi: <br>";
$liberi = array_diff($ombrelloni,$occupati);
print_r($liberi);
}
Dalle prove effettuate sembra funzionare tranne in un caso: quando la data di arrivo dell'utente è posteriore a tutte le date di partenza presenti nel DB.
Cioè ipotizziamo che nel DB, tra tutte le prenotazioni, l'ultima data di partenza è il 28 agosto(ultima non nel senso di ultima prenotazione inserita, ma di partenza più lontana), oltre questa data tutti gli ombrelloni sono quindi liberi,
però ottengo questo errore:
ombrelloni occupati:
Notice: Undefined variable: occupati in C:\Users\public_html\progetto7\foundation\Fprenotazioni.php on line 217
ombrelloni liberi:
Notice: Undefined variable: occupati in C:\Users\public_html\progetto7\foundation\Fprenotazioni.php on line 228
Warning: array_diff(): Expected parameter 2 to be an array, null given in C:\Users\Kira\public_html\progetto7\foundation\Fprenotazioni.php on line 228
Se invece inserisco una data di arrivo che precede la data di partenza più lontana, come ad esempio il 25 agosto e ipotizzando che il 28 agosto è sempre l'ultima data di partenza nel DB, il sistema funziona e mi restituisce l'elenco degli ombrelloni occupati e di quelli liberi:
ombrelloni occupati:
Array ( [0] => 8 [1] => 3 [2] => 5 )
ombrelloni liberi:
Array ( [0] => 1 [1] => 2 [3] => 4 [5] => 6 [6] => 7 [8] => 9 [9] => 10 [10] => 11 [11] => 12 [12] => 13 [13] => 14 [14] => 15 [15] => 16 [16] => 17 [17] => 18 [18] => 19 [19] => 20 [20] => 21 [21] => 22 [22] => 23 [23] => 24 [24] => 25 [25] => 26 [26] => 27 [27] => 28 [28] => 29 [29] => 30 )
Non riesco a capire dove sbaglio.