Utilizzando PHP/MySQL, un utente riceve un singolo punto intero sul proprio account membro ogni giorno. I dati che utilizzerò per determinare se un punto deve essere concesso sono questi campi mysql: Data creazione (data/ora) e Ultimo accesso (UNIX TIME).Concedere all'utente un solo punto ogni giorno
La procedura per la concessione di questi punti viene determinata all'accesso dell'utente. La mia domanda è: qual è il modo più efficace per determinare quanti giorni sono trascorsi dall'ultimo accesso? In secondo luogo, se un utente si collega ogni giorno, come faccio a stabilire se sono trascorse 24 ore e un punto deve essere concesso? I giorni passati equivalgono ai punti indicati (1 al giorno).
Attualmente sto usando questo codice:
/*
** Updates Points based on days since last visit
*/
static function UpdatePoints($username)
{
$getlog = System::$mySQL->Select("lastLog, creation FROM users WHERE username='$username'");
$log = System::$mySQL->Fetch($getlog);
$offset = (TIME() - $log['lastLog'])/86400; // 24hrs
$lastlog = round($offset); // in days
if($lastlog > 0)
{
System::$mySQL->Update("users SET points=points+".$lastlog." WHERE username='$username'");
}
}
Markup a parte, è ovvio il mio codice è miope. Se l'utente effettua l'accesso una volta al giorno, non ottiene alcun punto. Pertanto, devo determinare il metodo corretto per farlo utilizzando anche il campo Data creazione. Non riesco proprio a capirlo oggi, qualche suggerimento? Grazie.
Potrebbe essere più facile se hai appena concesso i punti in un punto fisso nel tempo, diciamo a mezzanotte. Ogni così lievemente ingiusto verso coloro che si registrano alle 12:01 contro qualcuno che si registra alle 23:59, ma dopo alcuni mesi di affiliazione, questo tipo di differenza è un errore di arrotondamento. –
MAI fare matematica di data come hai fatto qui (aka, dividendo per 86400). In ogni anno, c'è un giorno di 23 ore e un giorno di 25 ore. Usa sempre un oggetto datetime intelligente. Fare altrimenti è programmare bug nascosti nel tuo programma. – riwalk
@ Stargazer712 Grazie per il suggerimento, non l'ho mai considerato. – mrtwidget