Code đếm số người đang online

Bookmark and Share
Mình đang định làm một ứng dụng nhỏ bằng Php. Trong đó có 1 phần là đếm số người đang online grin . Cái này thì không rành, nên lên mạng search, Giờ làm được rồi nên share cách làm cho mọi người . hamarneh

1. Create table để lưu lại IP và thời gian hết hạn .


CREATE TABLE users_online (
id int(10) NOT NULL auto_increment,
ip varchar(15) NOT NULL default '',
timestamp varchar(15) NOT NULL default '',
PRIMARY KEY (id),
UNIQUE KEY id (id)
) TYPE=MyISAM;


Tạo kết nối database ở đây 

2. Tiếp theo ta phải kiểm tra xem có IP đang vào website của mình


if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
$IP_ADDR = getenv( 'HTTP_X_FORWARDED_FOR' );
}
else if ( getenv( 'HTTP_CLIENT_IP' ) ) {
$IP_ADDR = getenv( 'HTTP_CLIENT_IP' );
}
else {
$IP_ADDR = getenv( 'REMOTE_ADDR' );
}
list($currentip, $temp) = explode(",",$IP_ADDR);


Đên đây bạn đã có được IP vào trang web mình rồi . ex : 127.0.0.1 
Bây giờ bạn xoá trong DB của mình nếu IP này đã xuất hiện rồi


$n_now = time ();
$sql = "delete from users_online where ip = '$currentip' ";
mysql_query ( $sql );


Sau đó check lại lần nữa xem Ip này đã vào trang web mình chưa


$logged = 0 ;
$sql = "select * from users_online where ip = '" . $currentip . "'";
if ( mysql_num_rows ( mysql_query ( $sql, $db_link ) ) > 0 ) {
logged = 1;
}
else {
logged = 0;
}


Lúc này nếu logged = 1 tức là người này đã online vào website của mình rồi . Nếu vậy thì xoá ip nầy đi nếu IP này đã quá date 


if (logged ){
$n_now = time ();
$sql = "delete from users_online where timestamp < ( $n_now - $n_secs ) and ip = '$currentip' ";
mysql_query ( $sql );
}


Đến đây nhiều bạn sẽ hỏi biến $n_secs là gì?ở đâu ra?và làm gì với nó .trước tiên tui xin giải thích $n_secs dùng để thiết lập giá trị thời gian quá date cho một IP . vì vậy bạn phải set value trước đoạn code lại cho $n_secs nhé 


var $n_secs = 86400; // Ở đây là 1 ngày đó bạn.


Còn ngược lại(logged = 0) IP này chưa có trong DB thì sao?thì thêm vô chứ còn gì nữa .


else{
$timestamp = time ();
$sql = "insert into users_online ( id, ip, timestamp ) values ( '', '$currentip', '$timestamp' )";
mysql_query ( $sql, $db_link );
}


Và sẳn tiện đây tại sao mình không dọn dẹp luôn mấy IP đã quá date trước đó nhỉ?


$n_now = time ();
$sql = "delete from users_online where timestamp < ( $n_now - $n_secs ) ";
mysql_query ( $sql );


Ok . Đến đây rồi thì những IP nào còn nằm trong database thì những IP đó đang online trong khoảng 1 ngày trở lại mà thôi. vây còn chờ gì nữa mà không lấy ra để biết chứ .


$sql = "select * from users_online ";
$count = mysql_num_rows ( mysql_query ( $sql, $db_link ) );


Vậy biết được số người rồi thì làm sao. Show ra chứ sao 


<table border="0" width="100%"><tr><SUP><b>Users online:</b> <?= $count; ?></SUP></td><td><SUP><b>Your IP:</b> <?= $curentip; ?></SUP></td></tr></table>


Chúc bạn thành công !
Photobucket