php 实现 好友
实现好友系统的基本功能
在PHP中实现好友系统通常涉及用户关系管理、数据库设计和前后端交互。以下是实现好友功能的核心步骤和代码示例。
数据库设计
创建用户表和好友关系表存储用户信息和好友关系:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
CREATE TABLE friendships (
id INT AUTO_INCREMENT PRIMARY KEY,
user1_id INT NOT NULL,
user2_id INT NOT NULL,
status ENUM('pending', 'accepted', 'rejected') DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user1_id) REFERENCES users(id),
FOREIGN KEY (user2_id) REFERENCES users(id)
);
发送好友请求
处理用户发送好友请求的逻辑:
function sendFriendRequest($senderId, $receiverId) {
global $conn;
$stmt = $conn->prepare("INSERT INTO friendships (user1_id, user2_id, status) VALUES (?, ?, 'pending')");
$stmt->bind_param("ii", $senderId, $receiverId);
return $stmt->execute();
}
接受或拒绝好友请求
处理好友请求的响应:
function respondToFriendRequest($friendshipId, $response) {
global $conn;
$status = $response === 'accept' ? 'accepted' : 'rejected';
$stmt = $conn->prepare("UPDATE friendships SET status = ? WHERE id = ?");
$stmt->bind_param("si", $status, $friendshipId);
return $stmt->execute();
}
获取好友列表
查询用户的好友列表:
function getFriendsList($userId) {
global $conn;
$stmt = $conn->prepare("
SELECT u.id, u.username
FROM users u
JOIN friendships f ON (u.id = f.user1_id OR u.id = f.user2_id)
WHERE (f.user1_id = ? OR f.user2_id = ?)
AND f.status = 'accepted'
AND u.id != ?
");
$stmt->bind_param("iii", $userId, $userId, $userId);
$stmt->execute();
return $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
}
检查好友状态
检查两个用户之间的好友关系状态:
function checkFriendshipStatus($user1Id, $user2Id) {
global $conn;
$stmt = $conn->prepare("
SELECT status
FROM friendships
WHERE (user1_id = ? AND user2_id = ?)
OR (user1_id = ? AND user2_id = ?)
");
$stmt->bind_param("iiii", $user1Id, $user2Id, $user2Id, $user1Id);
$stmt->execute();
$result = $stmt->get_result();
return $result->num_rows > 0 ? $result->fetch_assoc()['status'] : null;
}
删除好友关系
移除好友关系:
function removeFriendship($user1Id, $user2Id) {
global $conn;
$stmt = $conn->prepare("
DELETE FROM friendships
WHERE (user1_id = ? AND user2_id = ?)
OR (user1_id = ? AND user2_id = ?)
");
$stmt->bind_param("iiii", $user1Id, $user2Id, $user2Id, $user1Id);
return $stmt->execute();
}
前端交互示例
使用AJAX处理好友请求的前端交互:
$('#friend-request-btn').click(function() {
$.post('friend_actions.php', {
action: 'send_request',
sender_id: currentUserId,
receiver_id: targetUserId
}, function(response) {
alert('Friend request sent!');
});
});
安全注意事项
实现好友系统时需考虑以下安全措施:
- 验证用户身份和权限
- 防止SQL注入使用预处理语句
- 限制用户只能操作自己的好友关系
- 对敏感操作进行CSRF保护
以上代码示例提供了PHP实现好友系统的基础框架,可根据实际需求进行扩展和优化。







