php实现好友列表
实现好友列表功能
在PHP中实现好友列表功能通常涉及数据库设计、用户关系管理以及前端展示。以下是实现好友列表的关键步骤和代码示例。
数据库设计
创建两个表:users存储用户信息,friendships存储好友关系。
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,
user_id INT NOT NULL,
friend_id INT NOT NULL,
status ENUM('pending', 'accepted') DEFAULT 'pending',
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (friend_id) REFERENCES users(id)
);
添加好友
使用PHP处理好友请求,插入数据到friendships表。
<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
// 添加好友
$userId = 1; // 当前用户ID
$friendId = 2; // 好友用户ID
$stmt = $db->prepare("INSERT INTO friendships (user_id, friend_id, status) VALUES (?, ?, 'pending')");
$stmt->execute([$userId, $friendId]);
?>
查询好友列表
查询当前用户的好友列表,包括已接受的好友请求。
<?php
// 查询好友列表
$userId = 1; // 当前用户ID
$stmt = $db->prepare("
SELECT u.id, u.username
FROM users u
JOIN friendships f ON u.id = f.friend_id
WHERE f.user_id = ? AND f.status = 'accepted'
UNION
SELECT u.id, u.username
FROM users u
JOIN friendships f ON u.id = f.user_id
WHERE f.friend_id = ? AND f.status = 'accepted'
");
$stmt->execute([$userId, $userId]);
$friends = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 输出好友列表
foreach ($friends as $friend) {
echo $friend['username'] . "<br>";
}
?>
处理好友请求
更新好友请求状态为accepted。
<?php
// 接受好友请求
$friendshipId = 1; // 好友关系ID
$stmt = $db->prepare("UPDATE friendships SET status = 'accepted' WHERE id = ?");
$stmt->execute([$friendshipId]);
?>
删除好友
从friendships表中删除好友关系。
<?php
// 删除好友
$friendshipId = 1; // 好友关系ID
$stmt = $db->prepare("DELETE FROM friendships WHERE id = ?");
$stmt->execute([$friendshipId]);
?>
前端展示
使用HTML和PHP结合展示好友列表。
<!DOCTYPE html>
<html>
<head>
<title>好友列表</title>
</head>
<body>
<h1>好友列表</h1>
<ul>
<?php foreach ($friends as $friend): ?>
<li><?php echo $friend['username']; ?></li>
<?php endforeach; ?>
</ul>
</body>
</html>
安全性考虑
确保所有数据库操作使用预处理语句防止SQL注入。对于用户输入的数据,进行验证和过滤。
// 示例:过滤用户输入
$friendId = filter_input(INPUT_POST, 'friend_id', FILTER_VALIDATE_INT);
if ($friendId === false) {
die('无效的用户ID');
}
性能优化
对于大型用户系统,考虑使用索引优化查询性能。
CREATE INDEX idx_friendships_user_id ON friendships(user_id);
CREATE INDEX idx_friendships_friend_id ON friendships(friend_id);
通过以上步骤,可以实现一个基本的好友列表功能,包括添加、查询、接受和删除好友。根据实际需求,可以进一步扩展功能,如分页显示好友列表或添加好友搜索功能。







