php实现主动关注
实现用户主动关注功能的 PHP 方法
数据库设计
创建关注关系表(例如 user_follows),包含以下字段:
follower_id:关注者用户IDfollowed_id:被关注者用户IDcreated_at:关注时间戳
CREATE TABLE user_follows (
follower_id INT NOT NULL,
followed_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (follower_id, followed_id),
FOREIGN KEY (follower_id) REFERENCES users(id),
FOREIGN KEY (followed_id) REFERENCES users(id)
);
关注操作处理 在PHP中处理关注请求的代码示例:
// 假设已获取当前用户ID和被关注用户ID
$followerId = $_SESSION['user_id'];
$followedId = $_POST['user_to_follow'];
// 检查是否已关注
$checkStmt = $pdo->prepare("SELECT COUNT(*) FROM user_follows WHERE follower_id = ? AND followed_id = ?");
$checkStmt->execute([$followerId, $followedId]);
$alreadyFollowing = $checkStmt->fetchColumn();
if (!$alreadyFollowing) {
// 执行关注操作
$insertStmt = $pdo->prepare("INSERT INTO user_follows (follower_id, followed_id) VALUES (?, ?)");
$success = $insertStmt->execute([$followerId, $followedId]);
if ($success) {
// 关注成功处理
echo json_encode(['status' => 'success']);
} else {
// 错误处理
echo json_encode(['status' => 'error', 'message' => '关注失败']);
}
} else {
// 已关注处理
echo json_encode(['status' => 'info', 'message' => '已关注该用户']);
}
取消关注实现 添加取消关注功能的PHP代码:
$deleteStmt = $pdo->prepare("DELETE FROM user_follows WHERE follower_id = ? AND followed_id = ?");
$success = $deleteStmt->execute([$followerId, $followedId]);
if ($success && $deleteStmt->rowCount() > 0) {
echo json_encode(['status' => 'success']);
} else {
echo json_encode(['status' => 'error', 'message' => '取消关注失败']);
}
前端交互实现 使用AJAX处理关注按钮点击:
$('.follow-btn').click(function() {
const userId = $(this).data('user-id');
const isFollowing = $(this).hasClass('following');
$.post(isFollowing ? 'unfollow.php' : 'follow.php',
{ user_to_follow: userId },
function(response) {
if (response.status === 'success') {
$(this).toggleClass('following');
$(this).text(isFollowing ? '关注' : '已关注');
}
}
);
});
安全性考虑
- 验证用户登录状态
- 防止SQL注入(使用预处理语句)
- 检查用户是否存在
- 限制用户不能关注自己
// 验证示例
if ($followerId == $followedId) {
http_response_code(400);
echo json_encode(['status' => 'error', 'message' => '不能关注自己']);
exit;
}
if (!isset($_SESSION['user_id'])) {
http_response_code(401);
echo json_encode(['status' => 'error', 'message' => '请先登录']);
exit;
}
性能优化
- 为关注关系表创建适当的索引
- 考虑使用缓存存储关注关系
- 批量查询关注状态以减少数据库查询
CREATE INDEX idx_follower ON user_follows(follower_id);
CREATE INDEX idx_followed ON user_follows(followed_id);






