插件窝 干货文章 php如何实现多篇文章点赞

php如何实现多篇文章点赞

article like id count 843    来源:    2025-03-18

在PHP中实现多篇文章点赞功能,通常需要结合数据库和前端交互来完成。以下是一个简单的实现步骤:

1. 数据库设计

首先,你需要在数据库中设计两张表:articles(文章表)和likes(点赞表)。

  • articles 表结构:

    CREATE TABLE articles (
      id INT AUTO_INCREMENT PRIMARY KEY,
      title VARCHAR(255) NOT NULL,
      content TEXT NOT NULL,
      like_count INT DEFAULT 0
    );
    
  • likes 表结构:

    CREATE TABLE likes (
      id INT AUTO_INCREMENT PRIMARY KEY,
      user_id INT NOT NULL,
      article_id INT NOT NULL,
      UNIQUE KEY unique_like (user_id, article_id)
    );
    
    • user_id 是点赞用户的ID。
    • article_id 是被点赞的文章ID。
    • UNIQUE KEY 确保每个用户对每篇文章只能点赞一次。

2. 前端页面

在前端页面中,为每篇文章添加一个点赞按钮,并通过AJAX请求将点赞操作发送到后端。

<button class="like-btn" data-article-id="1">点赞</button>
<span id="like-count-1">0</span> 点赞

3. 后端处理点赞请求

在后端,你需要处理点赞请求并更新数据库。

<?php
// 连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');

// 获取用户ID和文章ID
$user_id = $_POST['user_id'];
$article_id = $_POST['article_id'];

// 检查用户是否已经点赞过
$stmt = $pdo->prepare("SELECT * FROM likes WHERE user_id = ? AND article_id = ?");
$stmt->execute([$user_id, $article_id]);
$like = $stmt->fetch();

if ($like) {
    // 如果已经点赞过,取消点赞
    $pdo->prepare("DELETE FROM likes WHERE id = ?")->execute([$like['id']]);
    $pdo->prepare("UPDATE articles SET like_count = like_count - 1 WHERE id = ?")->execute([$article_id]);
} else {
    // 如果没有点赞过,添加点赞
    $pdo->prepare("INSERT INTO likes (user_id, article_id) VALUES (?, ?)")->execute([$user_id, $article_id]);
    $pdo->prepare("UPDATE articles SET like_count = like_count + 1 WHERE id = ?")->execute([$article_id]);
}

// 返回更新后的点赞数
$stmt = $pdo->prepare("SELECT like_count FROM articles WHERE id = ?");
$stmt->execute([$article_id]);
$like_count = $stmt->fetchColumn();

echo json_encode(['like_count' => $like_count]);
?>

4. 前端AJAX请求

在前端,使用JavaScript发送AJAX请求来处理点赞操作。

document.querySelectorAll('.like-btn').forEach(button => {
    button.addEventListener('click', function() {
        const articleId = this.getAttribute('data-article-id');
        const userId = 1; // 假设用户ID为1

        fetch('/like.php', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({ user_id: userId, article_id: articleId })
        })
        .then(response => response.json())
        .then(data => {
            document.getElementById(`like-count-${articleId}`).textContent = data.like_count;
        });
    });
});

5. 安全性考虑

  • 防止SQL注入:使用预处理语句(如PDO)来防止SQL注入。
  • 用户验证:确保用户已经登录并且user_id是有效的。
  • 防止重复提交:在前端禁用点赞按钮,直到请求完成。

6. 扩展功能

  • 点赞用户列表:可以在likes表中存储更多信息,如点赞时间,并提供一个接口来获取点赞用户列表。
  • 异步加载:使用AJAX异步加载点赞数,避免页面刷新。

通过以上步骤,你可以实现一个简单的多篇文章点赞功能。根据实际需求,你可以进一步扩展和优化这个功能。