在PHP中实现多篇文章点赞功能,通常需要结合数据库和前端交互来完成。以下是一个简单的实现步骤:
首先,你需要在数据库中设计两张表: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
确保每个用户对每篇文章只能点赞一次。在前端页面中,为每篇文章添加一个点赞按钮,并通过AJAX请求将点赞操作发送到后端。
<button class="like-btn" data-article-id="1">点赞</button>
<span id="like-count-1">0</span> 点赞
在后端,你需要处理点赞请求并更新数据库。
<?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]);
?>
在前端,使用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;
});
});
});
PDO
)来防止SQL注入。user_id
是有效的。likes
表中存储更多信息,如点赞时间,并提供一个接口来获取点赞用户列表。通过以上步骤,你可以实现一个简单的多篇文章点赞功能。根据实际需求,你可以进一步扩展和优化这个功能。