php 实现关注
实现用户关注功能
在PHP中实现用户关注功能通常涉及数据库设计和前后端交互。以下是常见的实现方法:
数据库设计
创建用户表和关注关系表是基础步骤。用户表存储用户信息,关注关系表记录用户之间的关注关系。
用户表结构示例:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
关注关系表结构示例:
CREATE TABLE user_follows (
follower_id INT NOT NULL,
following_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (follower_id, following_id),
FOREIGN KEY (follower_id) REFERENCES users(id),
FOREIGN KEY (following_id) REFERENCES users(id)
);
关注操作实现
处理关注操作需要检查是否已关注,然后执行相应操作。
关注功能代码示例:
function followUser($followerId, $followingId) {
// 检查是否已关注
$checkSql = "SELECT * FROM user_follows WHERE follower_id = ? AND following_id = ?";
$stmt = $pdo->prepare($checkSql);
$stmt->execute([$followerId, $followingId]);
if ($stmt->rowCount() > 0) {
return false; // 已关注
}
// 执行关注
$insertSql = "INSERT INTO user_follows (follower_id, following_id) VALUES (?, ?)";
$stmt = $pdo->prepare($insertSql);
return $stmt->execute([$followerId, $followingId]);
}
取消关注实现
取消关注操作与关注类似,但执行的是删除操作。
取消关注代码示例:
function unfollowUser($followerId, $followingId) {
$sql = "DELETE FROM user_follows WHERE follower_id = ? AND following_id = ?";
$stmt = $pdo->prepare($sql);
return $stmt->execute([$followerId, $followingId]);
}
获取关注列表
查询用户关注的人或被关注的人列表是常见需求。
获取关注列表代码示例:
function getFollowingList($userId) {
$sql = "SELECT u.id, u.username FROM user_follows uf
JOIN users u ON uf.following_id = u.id
WHERE uf.follower_id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$userId]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
前端交互实现
前端通常通过AJAX与后端交互,实现无刷新关注/取消关注。
前端AJAX示例:
$('.follow-btn').click(function() {
var userId = $(this).data('user-id');
var isFollowing = $(this).hasClass('following');
$.ajax({
url: isFollowing ? 'unfollow.php' : 'follow.php',
method: 'POST',
data: { user_id: userId },
success: function(response) {
if (response.success) {
$(this).toggleClass('following');
$(this).text(isFollowing ? '关注' : '已关注');
}
}
});
});
安全性考虑
实现关注功能时需要考虑安全性问题,防止CSRF攻击和未授权访问。
安全措施示例:

// 检查用户是否登录
session_start();
if (!isset($_SESSION['user_id'])) {
http_response_code(401);
exit();
}
// 使用CSRF令牌
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
http_response_code(403);
exit();
}
}
这些方法组合起来可以构建一个完整的用户关注系统,根据具体需求可以进一步扩展功能。






