Vấn đề là chúng ta muốn đếm số người truy cập trang web của mình trong ngày, tuần, khách đang online thì làm sao ? Có 2 cách: 1 đang ký free account ở trang web cung cấp modun đếm người .; 2. tự code . Mình có Demo tự code đếm số người truy cập web , thực hiện trình tự như sau:
1. Tạo file"connect.php", file này sẽ kết nối CSDL với MySQL, tự tạo ra CSDL "online", bảng DL "counter" ,nội dung file như sau:
4. Demo:
1. Tạo file"connect.php", file này sẽ kết nối CSDL với MySQL, tự tạo ra CSDL "online", bảng DL "counter" ,nội dung file như sau:
<?php$db_host = '127.0.0.1'; // localhost / ip/ domain$db_user = 'root';// tài khoản Admin$db_pass = ''; // pass đăng nhập$db_data = 'online'; // tên database2. Tạo file "counter.php", file có nhiệm vụ lấy IP máy khách rồi gửi về Server , lấy CSDL in ra trình duyệt, nội dung file như sau:
// thực hiện kết nối và kiểm tra có thành công hay khôngif ($conn = @mysql_connect($db_host, $db_user, $db_pass)) { // nếu thành công, thực hiện chọn CSDL if (!@mysql_select_db($db_data)) { // nếu chọn thất bại, tiến hành tạo CSDL và tạo bảng. mysql_query('CREATE DATABASE `' . $db_data . '` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci'); mysql_select_db($db_data); mysql_query('CREATE TABLE IF NOT EXISTS `counter` ( `ip_address` varchar(15) NOT NULL, `last_visit` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, KEY `ip_address` (`ip_address`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;'); }} else { // thông báo lỗi nếu không kết nối CSDL được. die(mysql_error());}?>
<?php$time_now = time(); // lưu thời gian hiện tại$time_out = 60; // khoảng thời gian chờ để tính một kết nối mới (tính bằng giây)$ip_address = $_SERVER['REMOTE_ADDR']; // lưu lại IP của kết nối3. Tạo file"index.php" , file này có nhiệm vụ include file counter ( nếu muốn kết quả đếm hiện ở đâu thì đặt " <?php include("counter.php"); ?> ở đó ), nội dung file như sau:
require_once('connect.php'); // nhúng file kết nối CSDL vào
// kiểm tra xem thời gian hiện tại so với lần truy cập cuối có lớn hơn khoảng thời gian chờ không //- nếu không thì thôi //- nếu có thì thêm vào như là một kết nối mớiif (!mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE UNIX_TIMESTAMP(`last_visit`) + $time_out > $time_now AND `ip_address` = '$ip_address'"))) mysql_query("INSERT INTO `counter` VALUES ('$ip_address', NOW())");
// đếm số người đang online$online = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE UNIX_TIMESTAMP(`last_visit`) + $time_out > $time_now"));
// đếm số người ghé thăm trong ngày (từ 0h ngày hôm đó đến thời điểm hiện tại)// z- là số thứ tự ngày trong năm, năm đây là năm có 365 ngày$day = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE DAYOFYEAR(`last_visit`) = " . (date('z') + 1) . " AND YEAR(`last_visit`) = " . date('Y')));
// đếm số người ghé thăm ngày hôm qua// . (date('z') +1+ 0) . = . (date('z') + 1 ) . => . (date('z') + 1 - 1 ) . = . (date('z') + 0) .// lùi lại 1 ngày nên trừ đi 1$yesterday = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE DAYOFYEAR(`last_visit`) = " . (date('z') + 0) . " AND YEAR(`last_visit`) = " . date('Y')));
// đếm số người ghé thăm trong tuần (từ 0h ngày thứ 2 đến thời điểm hiện tại)$week = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE WEEKOFYEAR(`last_visit`) = " . date('W') . " AND YEAR(`last_visit`) = " . date('Y')));
// đếm số người ghé thăm tuần rồi//. date('W') . =. (date('W') ). =. (date('W') + 0 ). => . (date('W') + 0 -1 ). . (date('W') -1 ). // lùi lại 1 tuần nên trừ 1$lastweek = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE WEEKOFYEAR(`last_visit`) = " . (date('W') -1 ) . " AND YEAR(`last_visit`) = " . date('Y')));
// đếm số người ghé thăm trong tháng$month = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE MONTH(`last_visit`) = " . date('n') . " AND YEAR(`last_visit`) = " . date('Y')));
// đếm số người ghé thăm trong năm$year = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE YEAR(`last_visit`) = " . date('Y')));
// đếm tổng số người đã ghé thăm$visit = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter`"));
echo '<pre>' . ' Đang online : ' . $online . '<br />' . ' Hôm nay : ' . $day . '<br />' . ' Hôm qua : ' . $yesterday . '<br />' . ' Tuần này : ' . $week . '<br />' . ' Tuần rồi : ' . $lastweek . '<br />' . ' Tháng này : ' . $month . '<br />' . ' Năm nay : ' . $year . '<br />' . ' Lượt truy cập : ' . $visit . '</pre>';?>
<?phpinclude("counter.php"); ?>
4. Demo:
Hình minh họa :
0 nhận xét:
Đăng nhận xét