Sử dụng PHP/mySQL, người dùng được cấp một điểm nguyên duy nhất cho tài khoản thành viên của họ mỗi ngày. Dữ liệu tôi sẽ sử dụng để xác định xem một điểm có nên được cấp là các trường mysql này không: Ngày tạo (dấu thời gian) và Lần đăng nhập gần nhất (UNIX TIME).Cấp cho người dùng một điểm mỗi ngày
Quy trình cấp các điểm này được xác định khi người dùng đăng nhập. Câu hỏi của tôi là, cách hiệu quả nhất để xác định số ngày đã trôi qua kể từ lần đăng nhập cuối cùng? Thứ hai, nếu người dùng đăng nhập mỗi ngày, làm thế nào để tôi xác định xem đã qua 24 giờ và một điểm sẽ được cấp không? Ngày qua tương đương với các điểm được đưa ra (1 mỗi ngày).
Hiện nay tôi đang sử dụng mã này:
/*
** 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 sang một bên, nó rõ ràng mã của tôi là thiển cận. Nếu người dùng đăng nhập một lần mỗi ngày, họ không đạt được một điểm. Vì vậy, tôi phải xác định phương pháp chính xác để làm như vậy bằng cách sử dụng trường ngày tạo. Tôi chỉ không thể quấn đầu của tôi xung quanh nó ngày hôm nay, bất cứ đề nghị? Cảm ơn.
Có thể dễ dàng hơn nếu bạn chỉ được cấp điểm tại một điểm cố định đúng lúc, vào lúc nửa đêm. Mọi thứ hơi không công bằng với những người đăng ký lúc 12:01 sáng với một người đăng ký lúc 11:59 tối, nhưng sau một vài tháng thành viên, sự khác biệt đó là một lỗi làm tròn. –
KHÔNG BAO GIỜ làm toán ngày như bạn đã làm ở đây (aka, bằng cách chia cho 86400). Trong bất kỳ năm nào, có một ngày 23 giờ và một ngày 25 giờ. Luôn sử dụng một đối tượng datetime thông minh. Để làm khác là để chương trình lỗi ẩn trong chương trình của bạn. – riwalk
@ Stargazer712 Cảm ơn lời khuyên, tôi chưa bao giờ nghĩ đến điều đó. – mrtwidget