侧边栏壁纸

Php+Mysql统计网页总访问次数和实时在线人数

2024年09月05日 210阅读 8评论 7点赞

自己写了一个统计,不错拿出来分享。可以统计当前页面的总访问次数和当前页面的实时在线人数。还可以显示你进入多少次。

样式还有彩色背景盒子鼠标滑过或点击变成彩色直线,其他样式可以自己再改改。废话不多说直接上代码。

废话不多说直接上代码,拿走吱~一声 表情

效果图片

统计网页总访问次数和在线人数效果图片


先来创建数据库表

sql代码

CREATE TABLE `total_visits` (
  `id` int(11) NOT NULL,
  `visit_count` int(11) DEFAULT '1',
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `online_users` (
  `id` int(11) NOT NULL,
  `ip_address` varchar(45) NOT NULL,
  `user_agent` varchar(255) DEFAULT NULL,
  `last_activity` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

接下来是数据库的连接

db.php

<?php
$host = 'localhost';
$dbname = '你的数据库名';
$username = '你的用户名';
$password = '你的密码';
$port = '3306';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Could not connect to the database $dbname :" . $e->getMessage());
}

function getPDO() {
    global $pdo;
    return $pdo;
}
?>

接下来就是主要的index.php文件了,带着前端如下:

index.php

<?php
require_once 'db.php'; //连接数据库文件

// 更新在线人数
function updateOnlineUsers($pdo) {
    $current_time = date('Y-m-d H:i:s');
    // 清除超过 5 分钟未活动的用户
    $pdo->exec("DELETE FROM cb_online_users WHERE last_activity < DATE_SUB('$current_time', INTERVAL 5 MINUTE)");
    
    // 获取 IP 地址和 User Agent
    $ip_address = $_SERVER['REMOTE_ADDR'];
    $user_agent = $_SERVER['HTTP_USER_AGENT'];
    
    // 检查是否已经记录过这个 IP 地址
    $stmt = $pdo->prepare("SELECT * FROM cb_online_users WHERE ip_address = ?");
    $stmt->execute([$ip_address]);
    $user = $stmt->fetch();
    
    if ($user) {
        // 如果已经存在,则更新最后活动时间
        $pdo->exec("UPDATE cb_online_users SET last_activity = '$current_time' WHERE ip_address = '$ip_address'");
    } else {
        // 如果不存在,则插入新记录
        $pdo->exec("INSERT INTO cb_online_users (ip_address, user_agent) VALUES ('$ip_address', '$user_agent')");
    }
}

// 计算在线人数
 function getOnlineCount($pdo) {
    $stmt = $pdo->query("SELECT COUNT(*) AS count FROM cb_online_users");
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    return $result['count'];
}

// 增加总访问次数
function incrementVisitCount($pdo) {
    // 检查是否已经有记录
    $stmt = $pdo->query("SELECT * FROM cb_total_visits ORDER BY id DESC LIMIT 1");
    $visit = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$visit) {
        // 如果没有记录,则添加一条新记录
        $pdo->exec("INSERT INTO cb_total_visits (visit_count) VALUES (1)");
    } else {
        // 如果有记录,则增加访问次数
        $visit_id = $visit['id'];
        $new_count = $visit['visit_count'] + 1;
        $pdo->exec("UPDATE cb_total_visits SET visit_count = $new_count WHERE id = $visit_id");
    }
}

// 获取总访问次数
function getTotalVisits($pdo) {
    $stmt = $pdo->query("SELECT SUM(visit_count) AS total FROM cb_total_visits");
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    return $result['total'];
}

// 执行更新操作
updateOnlineUsers(getPDO());
incrementVisitCount(getPDO());

// 获取在线人数和总访问次数
$onlineCount = getOnlineCount(getPDO());
$totalVisits = getTotalVisits(getPDO());
?>
<!-- 显示结果 -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Website Statistics</title>
<style>
body { font-family: Arial, sans-serif; }
.container { max-width: 600px; margin: 0 auto; padding: 20px; }
.stat-box { background-color: #f9f9f9; padding: 10px; border-radius: 5px; margin-bottom: 20px; }
h2 { color: #333; }
p { color: #555; }
</style>
</head>
<body><!-- 显示结果 -->
        <style>
            .container { max-width: 600px; margin: 0 auto; padding: 20px; }
            .stat-box { background-color: #f9f9f9; padding: 10px; border-radius: 5px; margin-bottom: 20px; }
            .stat-box∷before{
            content: "";
            position: absolute;
            width: 100%;
            height: 50%;
            background: linear-gradient(#00ccff,#d500f9);
            }
        </style>
            <style>
        .text-bg {
             color: #ffffff;
             padding: 0 2vmin;
             background: linear-gradient(30deg, #2cd8d5, #c5c1ff, #ffbac3) center;
             background-size: 100% 90%;
             background-repeat: no-repeat;
             transition: all 0.4s
         }
        
         .text-bg:hover {
             background-size: 100% 10%;
             background-position-y: 88%;
             color: #2c2c2c;
             text-shadow: 0.05em 0.05em 0 #fcfcfc, -0.05em 0.05em 0 #fcfcfc, 0 0.05em 0 #fcfcfc
         }
    </style>
            <div class="container">
                <div class="stat-box text-bg">
                    <h4>当前网站在线人数</h4>
                    <h2 style="color:#FF3333"><?php echo $onlineCount; ?></h2>
                </div>
                <div class="stat-box text-bg">
                    <h4>网站当前总访问次数</h4>
                    <h2 style="color:#FF3333"> <?php echo $totalVisits; ?></h2>
                </div>
                      <div class="stat-box text-bg">
                    <h4>你已经访问了</h4>
                    <h2 style="color:#FF3333" class="fangw"><span id="count">0</span>次</h2>
                </div>
            <script>
                // 获取当前访问次数
                let count = localStorage.getItem("pageCount");
                
                // 如果没有访问过该网页,则设置访问次数为1
                if (!count) {
                    localStorage.setItem("pageCount", 1);
                    count = 1;
                } else {
                    // 否则,将访问次数加1
                    count++;
                    localStorage.setItem("pageCount", count);
                }
                
                // 将访问次数显示到页面上
                document.getElementById("count").textContent = count;
            </script>
            </div>
            </body>
            </html>

就是这些了喜欢点个赞,拿走吱~一声
邮箱bh_lg-01@outlook.com

7
打赏

—— 评论区 ——

昵称
邮箱
网址
取消
  1. 头像
    629401918
    Android 10   Microsoft Edge 127
    回复

    ???

  2. 头像
    _北海彡 博主
    Android 10   Microsoft Edge 127
    回复

    画图

    1. 头像
      1876438710
      Android 14   小米浏览器 18
      回复
      @_北海彡

      测试回复邮箱发送

  3. 头像
    _北海彡 博主
    Android 10   Microsoft Edge 127
    回复

    (☆ω☆)QQQQ表情表情

    1. 头像
      _北海彡 博主
      Android 10   Microsoft Edge 127
      回复
      @_北海彡

      QQ

      1. 头像
        _北海彡 博主
        Android 10   Microsoft Edge 127
        回复
        @_北海彡

        画图

  4. 头像
    yvcoqpnapp
    Windows 10 x64 Edition   搜狗高速浏览器
    回复

    技术伦理的探讨体现人文科技平衡意识。

  5. 头像
    eybnfmxfvk
    Windows 10 x64 Edition   搜狗高速浏览器
    回复

    对权力结构的解构充满勇气与智慧。

人生倒计时
舔狗日记

海云博客公告

海云博客、云服务、API、霹雳霹雳、百宝箱、LGZ、影视、卡密网等由于特殊原因将于2025年3月-6月末暂时停更停维护



博客先这样吧,在搞子比很快就好了
欢迎!
一天只弹一次
朕已阅

Warning: Invalid argument supplied for foreach() in /www/wwwroot/mnbt.20739403/usr/plugins/Clogin/Plugin.php on line 158