Ciao ragazzi, sto iniziando ad avere dei problemi con un codice che fino a settimana scorsa ha sempre funzionato alla perfezione e che non ho più toccato.
Passo qui di seguito a spiegare sommariamente.
Il mio sito è composto di diverse chat, le quali hanno uno specifico ID. Il sistema deve prendere tutti i dati raccolti di uno specifico user e, se superiori a 4 in quella specifica chat, viene assegnato un premio. Il premio può essere dato una sola volta al giorno (dunque se dopo aver ricevuto il premio cambio chat e scrivo altre 4 volte, il premio non viene dato, ma bisognerà aspettare il giorno dopo).
2) La prima cosa che faccio è valorizare la data ultima di quando un utente ha ricevuto il premio:
Codice PHP:
$result_premio = query("SELECT last_date_premio FROM user WHERE nome = '".$_SESSION['login']."'");
$last_date_premio = $result_premio['last_date_premio'];
2) La seconda cosa che ho fatto, è stabilire il range temporale. Il sistema deve calcolare tutti i risultati che partono dalle 6:00 AM alle 5:59 AM del giorno dopo (e non dalle 00:00 alle 23:59).
Codice PHP:
//setto gli estremi temporali//
$now = time();
$this_morning = strtotime('today 6:00');
$last_action = strtotime($last_date_premio);
3) Da qui parto con il conteggio:
Codice PHP:
$check_actions = query("SELECT * FROM windows WHERE id_chat = ". $_SESSION['id_chat'] ." && user = '". $_SESSION['login'] ."' && DATE_ADD(ora, INTERVAL 12 HOUR) >= NOW()", 'result');
if(query($check_actions, 'num_rows') => 4) {
//vedi spiegazione sotto
}
Se i risultati sono superiori o uguali a 4, vedo se il premio non è stato assegnato nel range 6:00-5:59:
Codice PHP:
if ($now - $last_action >= (24 * 60 * 60) || ($last_action < $this_morning && $now >= $this_morning))
{
//assegno il premio e modifico il campo $last_date_premio a NOW()
} else {
//Non assegno nulla perché il premio è già stato dato
}
Qui nasce il problema, perché credo non mi riconosca più il range temporale stabilito (6:00-5:59). Siccome non saprei spiegare precisamente il problema, lo illustro fornendo degli esempi:
28/11/2022
Inizio conversazione: 22:00
Quarto risultato: 00:30
-> Premio assegnato
29/11/2022
Inizio conversazione: 21:00
Quarto risultato: 23:30
-> Premio NON assegnato (e dovrebbe invece assegnarlo perché rientra nel nuovo giorno (6:00-5:59)
30/11/2022
Inizio conversazione: 15:00
Quarto risultato: 16:30
-> Premio assegnato (E questo mi fa capire che il problema del 29/11 credo nasca dal premio assegnato dopo la mezzanotte del 28/11)
C'è per caso un errore nel calcolo del range?