当前位置:首页 > PHP

php实现点赞

2026-02-27 13:13:27PHP

PHP实现点赞功能

点赞功能通常涉及前端交互和后端数据存储。以下是实现点赞功能的详细步骤:

数据库设计 创建存储点赞数据的表结构:

CREATE TABLE likes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    post_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY unique_like (user_id, post_id)
);

后端处理 创建处理点赞的PHP脚本(like.php):

php实现点赞

<?php
header('Content-Type: application/json');
require 'db_connection.php';

$userId = $_POST['user_id'] ?? null;
$postId = $_POST['post_id'] ?? null;

if (!$userId || !$postId) {
    echo json_encode(['success' => false, 'message' => 'Missing parameters']);
    exit;
}

try {
    $pdo->beginTransaction();

    // 检查是否已点赞
    $stmt = $pdo->prepare("SELECT id FROM likes WHERE user_id = ? AND post_id = ?");
    $stmt->execute([$userId, $postId]);

    if ($stmt->rowCount() > 0) {
        // 取消点赞
        $pdo->prepare("DELETE FROM likes WHERE user_id = ? AND post_id = ?")->execute([$userId, $postId]);
        $action = 'unlike';
    } else {
        // 添加点赞
        $pdo->prepare("INSERT INTO likes (user_id, post_id) VALUES (?, ?)")->execute([$userId, $postId]);
        $action = 'like';
    }

    // 获取最新点赞数
    $count = $pdo->query("SELECT COUNT(*) FROM likes WHERE post_id = $postId")->fetchColumn();

    $pdo->commit();
    echo json_encode(['success' => true, 'action' => $action, 'count' => $count]);
} catch (Exception $e) {
    $pdo->rollBack();
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}
?>

前端实现 使用AJAX实现无刷新点赞:

document.querySelectorAll('.like-btn').forEach(btn => {
    btn.addEventListener('click', function() {
        const postId = this.dataset.postId;
        const userId = this.dataset.userId; // 实际应用中应从会话获取

        fetch('like.php', {
            method: 'POST',
            headers: {'Content-Type': 'application/x-www-form-urlencoded'},
            body: `user_id=${userId}&post_id=${postId}`
        })
        .then(response => response.json())
        .then(data => {
            if (data.success) {
                const counter = document.querySelector(`.like-count[data-post-id="${postId}"]`);
                counter.textContent = data.count;
                this.classList.toggle('liked', data.action === 'like');
            }
        });
    });
});

安全考虑

php实现点赞

  • 使用预处理语句防止SQL注入
  • 验证用户身份(实际应用中应使用会话或Token验证)
  • 添加CSRF保护
  • 对频繁请求进行限流

性能优化

  • 使用Redis缓存热门内容的点赞数
  • 批量更新避免频繁数据库操作
  • 考虑使用消息队列处理高并发场景

扩展功能

  • 添加点赞通知系统
  • 实现点赞排行榜
  • 增加点赞动画效果
  • 支持取消点赞功能

以上实现可根据具体需求进行调整,例如添加更多字段记录点赞时间或类型。对于大型应用,建议使用专门的计数服务来处理高频率的点赞操作。

标签: php
分享给朋友:

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (…

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'localh…

php实现定时任务

php实现定时任务

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

php实现websocket

php实现websocket

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

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…