php实现关注
实现用户关注功能
在PHP中实现用户关注功能通常涉及数据库设计、前后端交互和逻辑处理。以下是关键实现步骤:
数据库设计
创建用户表和关注关系表,示例SQL:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
-- 其他用户字段
);
CREATE TABLE 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)
);
关注操作处理
创建关注功能的PHP处理脚本(如follow.php):
<?php
session_start();
require 'db_connection.php'; // 数据库连接文件
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$followerId = $_SESSION['user_id']; // 当前登录用户
$followingId = (int)$_POST['following_id'];
// 检查是否已关注
$checkSql = "SELECT * FROM follows WHERE follower_id = ? AND following_id = ?";
$stmt = $pdo->prepare($checkSql);
$stmt->execute([$followerId, $followingId]);
if ($stmt->rowCount() > 0) {
// 已关注则取消关注
$deleteSql = "DELETE FROM follows WHERE follower_id = ? AND following_id = ?";
$pdo->prepare($deleteSql)->execute([$followerId, $followingId]);
echo json_encode(['status' => 'unfollowed']);
} else {
// 未关注则添加关注
$insertSql = "INSERT INTO follows (follower_id, following_id) VALUES (?, ?)";
$pdo->prepare($insertSql)->execute([$followerId, $followingId]);
echo json_encode(['status' => 'followed']);
}
}
?>
前端交互实现
使用AJAX实现无刷新关注操作:
document.querySelector('.follow-btn').addEventListener('click', function() {
const userId = this.dataset.userid;
fetch('follow.php', {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: `following_id=${userId}`
})
.then(response => response.json())
.then(data => {
if (data.status === 'followed') {
this.textContent = '已关注';
this.classList.add('active');
} else {
this.textContent = '关注';
this.classList.remove('active');
}
});
});
关注列表查询
获取用户关注列表的PHP示例:
function getFollowingList($userId) {
global $pdo;
$sql = "SELECT u.id, u.username FROM follows f
JOIN users u ON f.following_id = u.id
WHERE f.follower_id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$userId]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
粉丝列表查询
获取用户粉丝列表的PHP示例:

function getFollowerList($userId) {
global $pdo;
$sql = "SELECT u.id, u.username FROM follows f
JOIN users u ON f.follower_id = u.id
WHERE f.following_id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$userId]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
安全注意事项
- 验证用户登录状态
- 使用预处理语句防止SQL注入
- 对用户ID进行类型验证
- 实现CSRF保护机制
- 添加关注数量限制逻辑
以上实现可根据具体项目需求进行调整,例如添加关注通知、关注时间戳、双向关注关系等扩展功能。






