PHP/mySQL kullanarak, kullanıcılara her gün üye hesaplarına tek bir tamsayı verilir. Bir noktanın verilmesinin gerekip gerekmediğini belirlemek için kullanacağım veriler şu mysql alanlarıdır: Oluşturulma Tarihi (zaman damgası) ve Son Giriş (UNIX TIME).Herkese Bir Nokta Verme Her Gün
Bu noktaları verme prosedürü, kullanıcı oturum açtığında belirlenir. Sorum şu: Son girişten bu yana kaç gün geçtiğini belirlemenin en etkili yolu nedir? İkinci olarak, eğer bir kullanıcı her gün günlüğe girerse, 24 saat geçip geçmediğini ve bir puan verilip verilmeyeceğini nasıl belirleyebilirim? Günler geçmiş verilen noktalara eşittir (günde 1).
Şu anda bu kodu kullanıyorum:/*
** 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'");
}
}
Biçimlendirme kenara, benim kod öngörüsüzlüktür açıktır. Kullanıcı hergün bir kez giriş yaparsa, puan kazanmazlar. Bu nedenle, Oluşturulma Tarihi alanını kullanarak bunu yapmak için doğru yöntemi belirlemeliyim. Kafamı bugün etrafta dolamıyorum, herhangi bir öneri? Teşekkürler.
Puanları sadece sabit bir noktada verdiyseniz, gece yarısında söylerseniz daha kolay olabilir. Her biri, saat 12: 1'de kayıt yaptıranlara karşı çok az haksızlık ediyor, 11:59 saatte kayıt yaptıran bir kişi, ancak birkaç aylık üyelikten sonra, bu tür bir farklılık bir yuvarlama hatasıdır. –
ASLA burada yaptığınız gibi matematik yapmayın (aka, 86400'e bölerek). Herhangi bir yılda, bir 23 saat ve bir 25 saat var. Her zaman bir akıllı datetime nesnesi kullanın. Aksi halde programınızda gizli hataları programlamaktır. – riwalk
@ Stargazer712 Bahşiş için teşekkürler, bunu hiç düşünmedim. – mrtwidget