Trước hết,
chúng ta khởi tạo cở sở dữ liệu như sau.
1. mysql> create table
useronline(tgtmp INT(15) DEFAULT "0" NOT NULL ,
2. ip VARCHAR(50) NOT NULL ,
3. local VARCHAR(100) NOT NULL,
4. PRIMARY KEY(tgtmp),
5. KEY ip(ip),
6. KEY local(local));
tgtmp là
thời gian mà họ truy cập được tính khi họ truy vào trang web đó.
IP là dãy
số lưu thông tin IP của họ khi viếng thăm website của chúng ta.
local là
nơi lưu đường dẫn mà họ đang truy cập.
Khi người
dùng truy cập vào trang web, chúng ta sẽ tiến hành insert thông tin của họ vào
cơ sở dữ liệu với các tham số cơ bản nhưng trong database.
tgtmp được
tính ra bằng hàm time(). Hàm này sẽ lấy ra thời gian hiện tại của người truy
cập. Tiếp tục ta lại tính thời gian mới của họ, được tính bằng việc quy ước
thời gian quy định. Cụ thể ở đây tôi cho là 900 giây tương đương với 15 phút
truy cập của họ.
1. <?php
2. $tg=time();
3. $tgout=900;
4. $tgnew=$tg - $tgout;
5. ?>
như vậy nếu
thời gian lưu trong database mà nhỏ hơn thời gian new này thì chúng ta có thể
hiểu rằng vị khách ấy đã rời khỏi website của chúng ta. Cụ thể hơn.
Ví dụ: tôi
viếng thăm website đó là 7h.
như vậy hệ
thống sẽ ghi thông tin lúc đó là 7h.
Nếu sau 1
thời gian tôi không làm gì, hoặc tôi không truy cập website đó nữa thì hệ thống
sẽ không ghi nhận thông tin mới. Như thế nếu bây giờ 8h và trừ đi 15 phút tôi
quy ước, rõ ràng là thời gian mới hiện tại là 7h45, Thời gian này vẫn lớn hơn thời
điểm lưu thông tin 7h (7h45 > 7h). Do vậy, nếu chúng thỏa điều kiện đó thì
chúng ta chỉ việc xóa đi các record trong cơ sở dữ liệu là xong.
Vậy ta có
code kết nối CSDL như sau:(xem lại bài 10: kết hợp PHP và MYSQL trong ứng dụng)
1. <?php
2. $conn=mysql_connect("localhost","root","root")
or die("can't connect");
3. mysql_select_db("online",$conn);
4. ?>
Sau đó ta
tiến hành ghi nhận thông tin người dùng vào CSDL.
1. <?php
2. $sql="insert into
useronline(tgtmp,ip,local) values('$tg','$REMOTE_ADDR','$PHP_SELF')";
3. $query=mysql_query($sql);
4. ?>
$REMOTE_ADDR
là biến môi trường dùng để lấy ra IP của người truy cập.
$PHP_SELF
là biến môi trường dùng để lấy ra đường dẫn mà người dùng đang truy cập.
Tiếp đến ta
tiến hành xóa record khi thời gian thực lớn hơn thời gian trong cơ sở dữ liệu.
1. <?php
2. $sql="delete from useronline
where tgtmp < $tgnew";
3. $query=mysql_query($sql);
4. ?>
Tiếp tục là
công việc hiển thị thông tin ra bên ngoài bằng cách liệt kệ các record có trong
database.
1. <?php
2. $sql="SELECT DISTINCT ip FROM
useronline WHERE local='$PHP_SELF'";
3. $query=mysql_query($sql);
4. $user = mysql_num_rows($query);
5. ?>
DISTINCT là
cú pháp cho phép liệt kệ các dòng record mà không cho phép chúng có dữ liệu
trùng lặp như cú pháp select bình thường.
Vậy chúng
ta sẽ liệt kê tất cả những ip của những ai đang truy cập trên trang
useronline.php.
Phần việc
cuối cùng còn lại là chúng ta sẽ xuất thông tin ấy ra trình duyệt.
Và sau đây
là toàn bộ nội dung code của trang useronline.php
1. <?php
2. $tg=time();
3. $tgout=900;
4. $tgnew=$tg - $tgout;
5. $conn=mysql_connect("localhost","root","root")
or die("can't connect");
6. mysql_select_db("online",$conn);
7. $sql="insert into
useronline(tgtmp,ip,local) values('$tg','$REMOTE_ADDR','$PHP_SELF')";
8. $query=mysql_query($sql);
9. $sql="delete from useronline
where tgtmp < $tgnew";
10. $query=mysql_query($sql);
11. $sql="SELECT DISTINCT ip FROM
useronline WHERE local='$PHP_SELF'";
12. $query=mysql_query($sql);
13. $user = mysql_num_rows($query);
14. echo "user online :$user";
15. ?>
Tin khác:
Không có nhận xét nào:
Đăng nhận xét