当前位置:首页 > 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 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE…

php实现表单

php实现表单

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

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php 实现下载

php 实现下载

PHP 实现文件下载的方法 使用 PHP 实现文件下载可以通过设置 HTTP 头信息,强制浏览器将文件作为附件下载而非直接打开。 基本下载实现 $file_path = 'path/to/your/…

php实现mvc

php实现mvc

PHP 实现 MVC 架构 MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller…

php实现异步图片上传

php实现异步图片上传

异步图片上传的实现方法 在PHP中实现异步图片上传通常需要结合前端JavaScript和后端PHP代码。以下是几种常见的方法: 使用XMLHttpRequest或Fetch API 前端使用Java…