首页 > 数据库 >Php+Mysql统计网页总访问次数和实时在线人数-海云博客

Php+Mysql统计网页总访问次数和实时在线人数-海云博客

时间:2025-01-15 14:57:18浏览次数:3  
标签:count background cb visit stmt pdo 海云 Mysql Php

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

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

海云博客 此文章链接:http://lgnb.asia/index.php/archives/26/

演示图片

dd394bac2c2b46ea8ad22cc120aa2ce7.png


1.先来创建数据库表

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;

2.接下来是数据库的链接 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文件了,带着前端如下:

<?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>

就是这些了,一个简单实用的web程序,喜欢就点个赞吧

标签:count,background,cb,visit,stmt,pdo,海云,Mysql,Php
From: https://blog.csdn.net/2301_80066325/article/details/145126310

相关文章

  • 代码审计-PHP原生开发&SQL注入&数据库监控&正则搜索&文件定位&静态分析
    知识点1、PHP审计-原生态开发-SQL注入&数据库语句监控2、PHP审计-原生态开发-SQL注入&正则匹配搜索3、PHP审计-原生态开发-SQL注入&功能追踪代码审计分类:1、原生态开发-代码审计源码案例2、框架类开发-代码审计源码案例3、组件类开发-代码审计源码案例4、前端类开发-代码......
  • PHP语法进阶
    PHP语法进阶数组数组能够在单个变量中存储多个值,并且可以根据键访问其中的值PHP有两种数组:数值数组、关联数组。数值和关联两个词都是针对数组的键而言的。先介绍下数值数组,数值数组是指数组的键是整数的数组,并且键的整数顺序是从0开始,依次类推。数值数组$maoshu=ar......
  • MYSQL多版本并发控制(MVCC)
    MYSQL支持并发事务,事务的有四个特性(ACID):原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节,而且事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样;一致性(Consistency):数据库只会从一个一致的状态转换到另......
  • 基于PHP+Mysql 论坛信息系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • 基于PHP+Mysql人员信息管理(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • 基于PHP+Mysql购物管理系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • PHP语法基础
    PHP语法基础php文档拓展名是.phpphp文件通常包含html标签以及一些php脚本运行代码,注意:htmljscss可以在php文件执行但是,php不能在htmljscss在php文件执行php语法用;结尾<!DOCTYPEhtml><html><body><h1>我的第一张php页面><h1><?phpecho"hellomaoshu";?>......
  • MySQL(高级特性篇) 07 章——InnoDB数据存储结构
    一、数据库的存储结构:页索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切地说是存储在页结构中。另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责对表中数据的读取和写入工作。不同存储引擎中存放的格式一般是不同的,甚至有的......
  • 主机PHP版本过低导致网页无法正常运行的解决办法
    问题描述:用户发现其主机上的PHP版本过低,导致某些功能无法正常使用,影响了网站的整体性能。此外,用户询问是否可以通过升级主机获得免费域名赠品,以及数据库空间不足的问题。解决方案:针对您遇到的主机PHP版本过低的问题,这里提供一些解决方案和建议,帮助您顺利升级PHP版本并优化网站......
  • MySQL 8.0 如何禁用 ONLY_FULL_GROUP_BY
    在MySQL8中,ONLY_FULL_GROUP_BY​是默认启用的SQL模式之一。如果你希望禁用ONLY_FULL_GROUP_BY​,可以通过以下几种方式实现:方法1:临时禁用(仅对当前会话有效)你可以通过修改当前会话的sql_mode​来临时禁用ONLY_FULL_GROUP_BY​。步骤:查看当前的sql_mode​......