Sử dụng PHP và MySQL để biết người dùng có trực tuyến hay không, số lượng người dùng hiện đang trực tuyến, trực tuyến cao nhất từ trước đến nay, số lượng người dùng trực tuyến hôm nay và Thời gian nhìn thấy lần cuối của người dùng Show
Giới thiệuBiết thống kê trang web của bạn là một yếu tố rất quan trọng trong việc theo dõi sự phát triển của trang web của bạn. Việc sử dụng thông tin thống kê như vậy rõ ràng hơn là trong các diễn đàn, cộng đồng và mạng xã hội, nơi cần phải biết
Bài viết này giới thiệu cách đạt được những điều này bằng cách sử dụng PHP và MySQL. Việc triển khai điều này bằng PHP và MySQL khá dễ dàng và đơn giản (hãy tin tôi về điều này ). Bạn có thể lấy các tệp nguồn được đính kèm với bài viết này chứa hai trình kiểm tra tệp. php (mã phụ trợ) và kiểm tra. php (chứa HTML, PHP và AJAX để ping không đồng bộ máy chủ cho trình kiểm tra. php).Kiểm tra điều này trên các trình duyệt và tab khác nhau để mô phỏng nhiều người dùng. Đóng một vài tab và trình duyệt để thấy hiệu quả thiết lậpCần có cơ sở dữ liệu online_users trên máy chủ MySQL của bạn. Hai bảng là cần thiết trong cơ sở dữ liệu này. trực tuyến và cao nhất. Bảng trực tuyến nên chứa hai cột. id cột có thể là . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .7 hoặc . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .8 tùy thuộc vào cách ID của người dùng được xử lý trên trang web của bạn nhưng với mục đích minh họa này, nó sẽ là . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .9. Cột thứ hai trong bảng trực tuyến phải là thời gian sẽ là một . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .0. Bảng thứ hai cao nhất phải chứa hai cột; Bạn có thể thiết lập những thứ này theo cách thủ công bằng cách sử dụng phpMyAdmin của mình hoặc bằng cách sử dụng mã bên dưới giả sử tên cơ sở dữ liệu của bạn là “online_user” và bạn đã kết nối với máy chủ MySQL bằng biến . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .2 PHP <?php . . . //already connected to MySQL using $connection //To create database $sql = "CREATE DATABASE online_users"; mysql_query($sql, $connection); //To create tables $sql = "CREATE TABLE online_users.online (id VARCHAR( 10 ) NOT NULL , time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE = InnoDB"; mysql_query($sql, $connection); $sql = "CREATE TABLE online_users.highest (time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , num INT NOT NULL ) ENGINE = InnoDB"; mysql_query($sql, $connection); . . . ?> Xin lưu ý rằng bạn phải tạo các cơ sở dữ liệu và bảng này trước khi các tệp nguồn đi kèm với bài viết này có thể hoạt động. Phần tạo cơ sở dữ liệu và bảng này đã được loại bỏ khỏi mã nguồn để giữ cho nó sạch sẽ, rõ ràng và đi thẳng vào vấn đề. Người kiểm trangười kiểm tra. php chứa mã phụ trợ nhưng trước khi sử dụng, bạn phải thay đổi các biến . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .3, . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .4, . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .5, . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .6 thành máy chủ MySQL, tên người dùng, mật khẩu và tên cơ sở dữ liệu tương ứng. thử thách 1Bước đầu tiên để đạt được mục tiêu của chúng tôi là ghi ID và thời gian hiện tại của mọi người dùng có mặt trên trang web vào bảng “trực tuyến” của cơ sở dữ liệu và để đảm bảo thông tin này được cập nhật miễn là người dùng vẫn mở trang web trong . Nếu đạt được điều này, các vấn đề sau sẽ được giải quyết ngay lập tức Giải pháp 1.
thử thách 2Thách thức thứ hai (và cuối cùng kể từ Giải pháp 1 đã giải quyết được 4 trên 5) là làm thế nào để đạt được kết quả trực tuyến cao nhất từ trước đến nay. Tất nhiên đây sẽ là một “thời điểm”. Điều này thoạt nghe có vẻ đáng sợ khi bạn nghĩ rằng một tập lệnh có thể phải tiếp tục chạy trên máy chủ của bạn mọi lúc để có được số lượng người dùng trực tuyến mỗi mili giây. Dù sao đó cũng không phải là giải pháp nên hãy thư giãn Giải pháp 2.
Khi người dùng báo cáo sự hiện diện của mình, số lượng người dùng trực tuyến sẽ được kiểm tra và so sánh với cột “số” của bảng “cao nhất”. Nếu số lớn hơn hoặc bằng “num” thì thời điểm hiện tại và số là . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .7 hoặc . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .8d vào bảng kiểm tra pingKiểm tra. tệp php chứa mã PHP, tập lệnh AJAX và HTML chạy trên giao diện người dùng. Điều này cũng giống như trang web của bạn, tôi. e. , những gì người dùng sẽ thấy. AJAX được sử dụng để giao tiếp không đồng bộ với máy chủ cứ sau 30 giây để báo cáo sự hiện diện của người dùng giữa những người khác Mã và giải thíchBốn trong số năm thách thức của chúng tôi có thể được giải quyết bằng cách trang chỉ cần báo cáo sự hiện diện của nó cho máy chủ, cứ sau 30 giây và máy chủ cập nhật hàng trong bảng “trực tuyến” một cách thích hợp
PHP . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . . Đoạn mã này nằm ở phần phụ trợ (trình kiểm tra. php) và kiểm tra xem . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .9 có phải là <?php . . . //already connected to MySQL using $connection //To create database $sql = "CREATE DATABASE online_users"; mysql_query($sql, $connection); //To create tables $sql = "CREATE TABLE online_users.online (id VARCHAR( 10 ) NOT NULL , time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE = InnoDB"; mysql_query($sql, $connection); $sql = "CREATE TABLE online_users.highest (time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , num INT NOT NULL ) ENGINE = InnoDB"; mysql_query($sql, $connection); . . . ?>00 không. Nếu đúng, điều đó cho biết một trang đang báo cáo sự hiện diện của người dùng. Sau đó, mã này sẽ kiểm tra xem người dùng đã được đăng ký vào bảng “trực tuyến” trước đó chưa. Nếu đúng (tôi. e. , số hàng được trả về trong truy vấn lớn hơn 0) hàng là . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .8d nếu không thì thông tin là . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .7 bảng Hãy nhớ rằng trong Giải pháp 2, người ta đã nói rằng bất cứ khi nào có sự hiện diện của người dùng được báo cáo, số lượng người dùng trực tuyến phải được kiểm tra và xử lý thích hợp, đó là lý do cho chức năng <?php . . . //already connected to MySQL using $connection //To create database $sql = "CREATE DATABASE online_users"; mysql_query($sql, $connection); //To create tables $sql = "CREATE TABLE online_users.online (id VARCHAR( 10 ) NOT NULL , time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE = InnoDB"; mysql_query($sql, $connection); $sql = "CREATE TABLE online_users.highest (time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , num INT NOT NULL ) ENGINE = InnoDB"; mysql_query($sql, $connection); . . . ?>03. Chức năng sẽ được thảo luận sau Người dùng báo cáo sự hiện diện từ kiểm tra. php với đoạn mã AJAX này JavaScript <?php . . . //already connected to MySQL using $connection //To create database $sql = "CREATE DATABASE online_users"; mysql_query($sql, $connection); //To create tables $sql = "CREATE TABLE online_users.online (id VARCHAR( 10 ) NOT NULL , time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE = InnoDB"; mysql_query($sql, $connection); $sql = "CREATE TABLE online_users.highest (time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , num INT NOT NULL ) ENGINE = InnoDB"; mysql_query($sql, $connection); . . . ?>0 Đây chỉ là một mã AJAX đơn giản nhưng lưu ý rằng “POST” đã được sử dụng trong phương thức mở nhưng các tham số được truyền bằng phương thức GET (i. e. , nối các tham số vào URL). <?php . . . //already connected to MySQL using $connection //To create database $sql = "CREATE DATABASE online_users"; mysql_query($sql, $connection); //To create tables $sql = "CREATE TABLE online_users.online (id VARCHAR( 10 ) NOT NULL , time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE = InnoDB"; mysql_query($sql, $connection); $sql = "CREATE TABLE online_users.highest (time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , num INT NOT NULL ) ENGINE = InnoDB"; mysql_query($sql, $connection); . . . ?>04 cũng được sử dụng trên mã phụ trợ. Mục đích của việc sử dụng POST trong phương thức mở là để ngăn bộ nhớ đệm, GET sẽ luôn lưu vào bộ đệm nếu được sử dụng trong phương thức mở và điều này là không mong muốn trong tình huống này do đó POST. Tất cả các mã AJAX khác chỉ cần làm theo mẫu này. Tham số id trong biến URL ở trên phải là UserID của người dùng. Trong ví dụ này, ID được tạo ngẫu nhiên và được lưu trữ trong trường nhập ẩn PHP <?php . . . //already connected to MySQL using $connection //To create database $sql = "CREATE DATABASE online_users"; mysql_query($sql, $connection); //To create tables $sql = "CREATE TABLE online_users.online (id VARCHAR( 10 ) NOT NULL , time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE = InnoDB"; mysql_query($sql, $connection); $sql = "CREATE TABLE online_users.highest (time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , num INT NOT NULL ) ENGINE = InnoDB"; mysql_query($sql, $connection); . . . ?>6 Trong mã của riêng bạn, hãy sử dụng UserID thực PHP <?php . . . //already connected to MySQL using $connection //To create database $sql = "CREATE DATABASE online_users"; mysql_query($sql, $connection); //To create tables $sql = "CREATE TABLE online_users.online (id VARCHAR( 10 ) NOT NULL , time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE = InnoDB"; mysql_query($sql, $connection); $sql = "CREATE TABLE online_users.highest (time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , num INT NOT NULL ) ENGINE = InnoDB"; mysql_query($sql, $connection); . . . ?>7 Thao tác này sẽ chỉ kiểm tra số lượng người dùng trực tuyến từ bảng “trực tuyến” và so sánh kết quả với bản ghi trong bảng “cao nhất”. Bảng “cao nhất” là . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .8d hoặc . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .7 một cách thích hợp. Chức năng khác chỉ tuân theo mẫu kiểm tra, cập nhật và chèn vào cơ sở dữ liệu MySQL này và khá đơn giản để hiểu. Hàm <?php . . . //already connected to MySQL using $connection //To create database $sql = "CREATE DATABASE online_users"; mysql_query($sql, $connection); //To create tables $sql = "CREATE TABLE online_users.online (id VARCHAR( 10 ) NOT NULL , time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE = InnoDB"; mysql_query($sql, $connection); $sql = "CREATE TABLE online_users.highest (time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , num INT NOT NULL ) ENGINE = InnoDB"; mysql_query($sql, $connection); . . . ?>07 trong JavaScript được sử dụng để chạy tất cả các hàm AJAX trong một khoảng thời gian xác định JavaScript . . . //Report your presence if(isset($_GET[report])) { $query = "SELECT * FROM ". $db_name .".online WHERE id = '%s'"; $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id]))); if(mysql_num_rows(mysql_query($query, $con)) > 0) { $query = "UPDATE ". $db_name .".online SET time = '%s' WHERE id = '%s'"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, $now, mysql_real_escape_string(stripslashes($_GET[id]))); mysql_query($query, $con);echo $query; } else { $query = "INSERT INTO ". $db_name .".online (id, time) VALUES ('%s', '%s')"; $now = date('Y-m-d H:i:s', strtotime('now')); $query = sprintf($query, mysql_real_escape_string(stripslashes($_GET[id])), $now); mysql_query($query, $con); } //Set highest online info setHighestOnline($con, $db_name); } . . .1 Các nhu yếu phẩm khác
Ảnh chụp màn hìnhSửa đổi lần thứ nhất. ngày 9 tháng 4 năm 2013Thuật toán cơ bản vẫn còn nhưng mã ban đầu đã được thay đổi một chút để khắc phục sự giám sát
Giấy phépBài viết này, cùng với bất kỳ mã nguồn và tệp liên quan nào, được cấp phép theo Giấy phép Mở Dự án Mã (CPOL) Được viết bởi Oso Oluwafemi Ebenezer Người phát triển phần mềm Ni-giê-ri-a Tốt nghiệp ngành Kỹ sư Nông nghiệp tại Đại học Công nghệ Ladoke Akintola, Ogbomoso nhưng lập trình máy tính và web là mối tình đầu của anh ấy. Bạn có thể gặp anh ấy trên Facebook Osofem Inc Làm cách nào để có được người dùng trực tuyến trong PHP?Lưu trữ thông tin đăng nhập của người dùng trong bảng. Đầu tiên, khi người dùng đăng nhập vào hệ thống của chúng tôi thì chúng tôi phải lưu thông tin đăng nhập của anh ấy như id, thời gian đăng nhập vào cơ sở dữ liệu chi tiết đăng nhập của chúng tôi. . Cập nhật Hoạt động cuối cùng của người dùng Đăng nhập vào thông tin đăng nhập của anh ấy. . Lấy dữ liệu người dùng trực tuyến từ bảng Làm cách nào để kiểm tra xem người dùng có trực tuyến trong PHP không?Bất cứ khi nào người dùng truy cập một trang, đặt/cập nhật trường LastActiveTime trong bản ghi bảng Người dùng của họ. Sau đó, hãy đếm tất cả người dùng có Thời gian hoạt động cuối cùng trong vòng 5 phút qua . Bất cứ điều gì hơn thế này, và chúng có thể được coi là "ngoại tuyến. "
Làm cách nào để hiển thị trạng thái trong PHP?Hàm stat() / mysqli_stat() trả về trạng thái hệ thống hiện tại. |