Wednesday, July 25, 2007

Script User Online


Beberapa teman yang melihat counter user online di AcehCraft.com menanyakan bagaimana cara bikin scriptnya.

Sebenarnya ini script lama yang dulu juga udah sering saya sisipkan di beberapa situs 'proyekan' saya. Sederhana saja sich. Cuman dibutuhkan PHP + MySql, script ini sudah bisa dihasilkan. Script ini juga bukan orisinal buatan pribadi... Untuk apa??? toch di Internet berjibun informasi tentang script untuk segala macam hal. Dulu juga hasil search, trus dimodifikasi sedikit.

Buat table (di MySql) sederhana dengan 2 field saja. Beri nama terserah, disini saya beri nama usersonline.
CREATE TABLE `usersOnline` (
`userIP` varchar(15) NOT NULL default '',
`dateAdded` timestamp NOT NULL default CURRENT_TIMESTAMP
)

Trus, tinggal ditambahin script PHP sederhana.

// Set length of session to twenty minutes and get an IP
define("SESSION_LENGTH", 20);
$userIP = $HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'];
if(trim($userIP)=="")
{
$userIP = $HTTP_SERVER_VARS['REMOTE_ADDR'];
}
$timeMax = time() - (60 * SESSION_LENGTH);
// Find a total record of users online
$result = mysql_query("select count(*) from usersOnline where unix_timestamp(dateAdded) >= '$timeMax' and userIP = '$userIP'");
$recordExists = mysql_result($result, 0, 0) > 0 ? true : false;

if(!$recordExists)
{
// Add a record for this user
@mysql_query("insert into usersOnline(userIP) values('$userIP')");
}
// End of add a new user for counting a users online

// Counting a users online
$result = mysql_query("select count(*) from usersOnline where unix_timestamp(dateAdded) >= '$timeMax'");
$usersOnline = mysql_result($result, 0, 0);
$result = mysql_query("select count(*) from usersOnline where TO_DAYS(dateAdded) = TO_DAYS(NOW())");
$usersVisiteToday = mysql_result($result, 0, 0);
$result = mysql_query("select count(*) from usersOnline where TO_DAYS(dateAdded) = TO_DAYS(NOW())-1");
$usersVisiteYesterday = mysql_result($result, 0, 0);

print 'Your IP: '.$userIP.'
'.'today : '.$usersVisiteToday.'
'.'yesterday : '.$usersVisiteYesterday.'
There are '.$usersOnline.' visitors online';

Selesai Dech.

2 comments:

Anonymous said...

Kalo di hosting kenapa nggak bisa ya? masalahnya pada $recordExists = mysql_result($result, 0, 0) > 0 ? true : false;

Dody Naftali said...

Saya juga di hosting kok. Bisa beritahukan pesan yang muncul seperti apa? Mungkin saja karena versi Mysql, atau tablenya belum dibuat?