当前位置:首页 > PHP

php实现消息红点

2026-02-16 06:09:12PHP

PHP 实现消息红点功能

在 PHP 中实现消息红点功能通常需要结合前端和后端技术。以下是一种常见的实现方式:

数据库设计

创建一个消息表用于存储用户未读消息的状态

CREATE TABLE user_messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    message TEXT NOT NULL,
    is_read BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

后端实现

创建一个 API 端点来检查未读消息

// get_unread_count.php
header('Content-Type: application/json');

$userId = $_SESSION['user_id'] ?? 0;
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');

$stmt = $pdo->prepare("SELECT COUNT(*) FROM user_messages WHERE user_id = ? AND is_read = FALSE");
$stmt->execute([$userId]);
$unreadCount = $stmt->fetchColumn();

echo json_encode(['unread_count' => $unreadCount]);

前端实现

使用 JavaScript 定期检查未读消息并显示红点

function checkUnreadMessages() {
    fetch('/get_unread_count.php')
        .then(response => response.json())
        .then(data => {
            const badge = document.getElementById('message-badge');
            if (data.unread_count > 0) {
                badge.style.display = 'inline-block';
                badge.textContent = data.unread_count;
            } else {
                badge.style.display = 'none';
            }
        });
}

// 每30秒检查一次
setInterval(checkUnreadMessages, 30000);
// 页面加载时立即检查
window.addEventListener('DOMContentLoaded', checkUnreadMessages);

红点样式

在 HTML 中添加红点元素并使用 CSS 进行样式设置

<div class="message-icon">
    <span id="message-badge" class="badge"></span>
    <i class="fas fa-envelope"></i>
</div>
.badge {
    display: none;
    position: absolute;
    top: -5px;
    right: -5px;
    background-color: red;
    color: white;
    border-radius: 50%;
    width: 18px;
    height: 18px;
    text-align: center;
    font-size: 12px;
    line-height: 18px;
}
.message-icon {
    position: relative;
    display: inline-block;
}

标记消息为已读

当用户查看消息时更新数据库状态

// mark_as_read.php
$messageId = $_POST['message_id'] ?? 0;
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');

$stmt = $pdo->prepare("UPDATE user_messages SET is_read = TRUE WHERE id = ?");
$stmt->execute([$messageId]);

echo json_encode(['success' => true]);

实时更新方案

如果需要更实时的效果,可以考虑使用 WebSocket 或 Server-Sent Events (SSE) 技术

// sse_unread_count.php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

while (true) {
    $userId = $_SESSION['user_id'] ?? 0;
    $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');

    $stmt = $pdo->prepare("SELECT COUNT(*) FROM user_messages WHERE user_id = ? AND is_read = FALSE");
    $stmt->execute([$userId]);
    $unreadCount = $stmt->fetchColumn();

    echo "data: " . json_encode(['unread_count' => $unreadCount]) . "\n\n";
    ob_flush();
    flush();

    sleep(5); // 每5秒检查一次
}

这种方法结合了 PHP 后端处理和前端 JavaScript 定时检查,可以有效地实现消息红点功能。根据实际需求可以选择简单的轮询方式或更高级的实时推送方案。

php实现消息红点

标签: 消息php
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n!…

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…