当前位置:首页 > PHP

php实现点赞

2026-04-02 22:02:18PHP

实现点赞功能的基本思路

点赞功能通常涉及前端交互和后端数据处理。前端负责用户点击触发,后端处理数据存储和更新。以下是实现点赞功能的常见方法。

数据库设计

创建数据表存储点赞信息,例如:

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 (user_id, post_id)
);

user_idpost_id组合唯一约束防止重复点赞。

后端PHP处理

创建点赞接口处理请求:

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

// 假设已连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

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

// 验证输入
if (!$userId || !$postId) {
    echo json_encode(['success' => false, 'message' => 'Invalid input']);
    exit;
}

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

    if ($stmt->fetch()) {
        // 已点赞,执行取消
        $pdo->prepare("DELETE FROM likes WHERE user_id = ? AND post_id = ?")->execute([$userId, $postId]);
        echo json_encode(['success' => true, 'action' => 'unlike']);
    } else {
        // 未点赞,执行点赞
        $pdo->prepare("INSERT INTO likes (user_id, post_id) VALUES (?, ?)")->execute([$userId, $postId]);
        echo json_encode(['success' => true, 'action' => 'like']);
    }
} catch (PDOException $e) {
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}

前端实现

使用AJAX发送点赞请求:

function toggleLike(postId, 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 button = document.querySelector(`.like-btn[data-post="${postId}"]`);
            if (data.action === 'like') {
                button.classList.add('liked');
                button.textContent = 'Unlike';
            } else {
                button.classList.remove('liked');
                button.textContent = 'Like';
            }
        }
    });
}

获取点赞数量

添加获取点赞数量的接口:

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

$postId = $_GET['post_id'] ?? 0;

if (!$postId) {
    echo json_encode(['success' => false]);
    exit;
}

try {
    $stmt = $pdo->prepare("SELECT COUNT(*) as count FROM likes WHERE post_id = ?");
    $stmt->execute([$postId]);
    $result = $stmt->fetch();
    echo json_encode(['success' => true, 'count' => $result['count']]);
} catch (PDOException $e) {
    echo json_encode(['success' => false]);
}

性能优化考虑

对于高流量场景,可以考虑以下优化:

php实现点赞

  • 使用Redis等缓存系统存储点赞数据
  • 批量更新数据库而非每次操作都写入
  • 实现乐观锁防止并发问题

安全注意事项

  • 验证用户身份防止伪造请求
  • 对输入参数进行严格过滤
  • 使用CSRF令牌保护表单
  • 限制频繁操作防止滥用

以上实现提供了点赞功能的基本框架,可根据具体需求进行调整和扩展。

标签: php
分享给朋友:

相关文章

php实现websocket

php实现websocket

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

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUEST_…

php 实现队列

php 实现队列

PHP 实现队列的方法 PHP 可以通过多种方式实现队列功能,以下是几种常见的实现方法: 使用数组实现队列 PHP 数组可以通过 array_push 和 array_shift 函数模拟队列的先进…

php 实现面包屑导航

php 实现面包屑导航

实现面包屑导航的方法 面包屑导航(Breadcrumb Navigation)是一种常见的网站导航方式,用于显示用户当前页面的路径。以下是几种在 PHP 中实现面包屑导航的方法。 基于 URL 路径…