Ciao a tutti,
sto cercando di creare un sistema che possa tenere traccia se un utente effettua il login tutti i giorni. Una sorta di "daily login bonus".
In pratica all'interno di una tabella giocatori, ho salvato (per ogni utente) un campo "datetime" che salva al suo interno la data e l'ora dell'ultimo accesso verificato dell'utente.
In pratica quando l'utente effettua l'accesso ho pensato di fare questo:
- Viene salvata la data e l'ora attuale
- Viene salvata l'ora di reset (cioè l'ora in cui il giorno "finisce" e la data di accesso del giocatore è valida per essere verificata come nuovo accesso giornaliero)
- Viene recuperato dal db l'ultima data/ora di accesso dell'utente registrata
- Effettuo i controlli per vedere se l'utente rientra nel bonus di accesso giornaliero
- Se necessario aggiorno il campo dell'accesso giornaliero nel db
- Stampo su echo il risultato
Adesso vi posto il codice che ho provato a scrivere, anticipandovi però che sto riscontrando errori di confronto tra le date visto che alcune risultano stringhe e altre no:
codice:
$now = date('Y-m-d H:i:s'); $resetTimeObject = new DateTime();
date_time_set($resetTimeObject, 12, 00, 00);
$resetTime = $resetTimeObject->format('Y-m-d H:i:s');
$lastLogin = $mysqli->query('SELECT ultimoaccesso FROM giocatori WHERE idgiocatore = "'.$_GET["idgiocatore"].'"');
$lastDay = date('Y-m-d H:i:s',strtotime($resetTime ."-1 days"));
if ($lastLogin < $lastDay && $now < $resetTime) {
$bonus = array('bonus'=> 'true', 'prossimo' => date('Y-m-d', strtotime($resetTime .'+1 days'. - $now)));
echo json_encode($bonus);
}
// Altrimenti se il tempo di reset è passato
else if ($resetTime < $now) {
// Se il tempo di reset è passato e l'utente effettua il login perdendo il giorno passato non riceve il bonus della streak
if ($resetTime > $lastLogin) {
$loginStreak = $mysqli->query('SELECT idgiocatore FROM giocatori WHERE idgiocatore = "'.$_GET["idgiocatore"].'"');
echo $loginStreak;
$bonus = array('bonus'=> 'false', 'loginStreak' => $loginStreak, 'prossimo' => date('Y-m-d', strtotime($resetTime .'+1 days')));
echo json_encode($bonus);
} else {
//Altrimenti il giocatore è il login streak e riceve il bonus
$loginStreak = $mysqli->query('SELECT idgiocatore FROM giocatori WHERE idgiocatore = "'.$_GET["idgiocatore"].'"');
echo $loginStreak;
$bonus = array('bonus'=> 'true', 'loginStreak' => $loginStreak, 'prossimo' => date('Y-m-d', strtotime($resetTime .'+1 days')));
echo json_encode($bonus);
}
}
Sapete aiutarmi a correggere il mio errore? Inoltre se notate che il mio sistema è troppo "macchinoso" e è possibile ottenere lo stesso risultato più facilmente, fatemi sapere!