Mit PHP/mySQL wird einem Benutzer jeden Tag ein einzelner ganzzahliger Punkt für sein Mitgliedskonto gewährt. Die Daten, die ich verwenden werde, um festzustellen, ob ein Punkt erteilt werden sollte, sind diese mysql-Felder: Erstellungsdatum (Zeitstempel) und Letzte Anmeldung (UNIX TIME).Einem Benutzer jeden Tag einen Punkt zuweisen
Das Verfahren zum Gewähren dieser Punkte wird bestimmt, wenn sich der Benutzer anmeldet. Meine Frage ist, was ist die effizienteste Art zu bestimmen, wie viele Tage seit der letzten Anmeldung vergangen sind? Zweitens, wenn sich ein Benutzer jeden Tag anmeldet, wie stelle ich fest, ob 24 Stunden vergangen sind und ein Punkt gewährt werden soll? Vorübergehende Tage entsprechen den angegebenen Punkten (1 pro Tag).
Derzeit bin ich mit diesem Code:
/*
** 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 beiseite, es offensichtlich ist mein Code kurzsichtig ist. Wenn sich der Benutzer einmal täglich anmeldet, erhält er keinen Punkt. Daher muss ich die richtige Methode dafür ermitteln, indem Sie das Feld Erstellungsdatum ebenfalls verwenden. Ich kann es heute einfach nicht umdrehen, irgendwelche Vorschläge? Vielen Dank.
Könnte einfacher sein, wenn Sie die Punkte zu einem festen Zeitpunkt, zum Beispiel um Mitternacht, vergeben haben. Jeder ist so unfair gegenüber denen, die sich um 12:01 Uhr gegen jemanden anmelden, der sich um 23:59 Uhr registriert, aber nach ein paar Monaten Mitgliedschaft ist dieser Unterschied ein Rundungsfehler. –
NIEMALS date Mathematik wie Sie hier getan haben (aka, durch Division durch 86400). In jedem Jahr gibt es einen 23-Stunden-Tag und einen 25-Stunden-Tag. Verwenden Sie immer ein intelligentes Datetime-Objekt. Andernfalls müssen Sie versteckte Fehler in Ihrem Programm programmieren. – riwalk
@ Stargazer712 Danke für den Tipp, das habe ich nie gedacht. – mrtwidget