当前位置:首页 > PHP

php 实现 好友

2026-03-12 21:52:10PHP

PHP 实现好友系统

数据库设计

创建必要的数据库表来存储用户和好友关系。通常需要 users 表和 friends 表。

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL
);

CREATE TABLE friends (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    friend_id INT NOT NULL,
    status ENUM('pending', 'accepted', 'rejected') DEFAULT 'pending',
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (friend_id) REFERENCES users(id)
);

发送好友请求

使用 PHP 处理发送好友请求的逻辑。确保用户不能重复发送请求。

function sendFriendRequest($userId, $friendId) {
    global $pdo;
    $stmt = $pdo->prepare("INSERT INTO friends (user_id, friend_id, status) VALUES (?, ?, 'pending')");
    $stmt->execute([$userId, $friendId]);
    return $stmt->rowCount() > 0;
}

接受或拒绝好友请求

提供接口让用户处理收到的请求。

function respondToFriendRequest($userId, $friendId, $status) {
    global $pdo;
    $stmt = $pdo->prepare("UPDATE friends SET status = ? WHERE user_id = ? AND friend_id = ?");
    $stmt->execute([$status, $friendId, $userId]);
    return $stmt->rowCount() > 0;
}

获取好友列表

查询已接受的好友关系,返回用户的好友列表。

function getFriendsList($userId) {
    global $pdo;
    $stmt = $pdo->prepare("
        SELECT u.id, u.username 
        FROM friends f 
        JOIN users u ON u.id = f.friend_id 
        WHERE f.user_id = ? AND f.status = 'accepted'
        UNION
        SELECT u.id, u.username 
        FROM friends f 
        JOIN users u ON u.id = f.user_id 
        WHERE f.friend_id = ? AND f.status = 'accepted'
    ");
    $stmt->execute([$userId, $userId]);
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

检查好友状态

验证两个用户之间是否存在好友关系及其状态。

function checkFriendStatus($userId, $friendId) {
    global $pdo;
    $stmt = $pdo->prepare("SELECT status FROM friends WHERE user_id = ? AND friend_id = ?");
    $stmt->execute([$userId, $friendId]);
    return $stmt->fetchColumn();
}

删除好友

允许用户移除好友关系。

function removeFriend($userId, $friendId) {
    global $pdo;
    $stmt = $pdo->prepare("DELETE FROM friends WHERE (user_id = ? AND friend_id = ?) OR (user_id = ? AND friend_id = ?)");
    $stmt->execute([$userId, $friendId, $friendId, $userId]);
    return $stmt->rowCount() > 0;
}

实现注意事项

确保所有数据库操作使用预处理语句防止 SQL 注入。 验证用户权限,确保用户只能操作自己的好友关系。 考虑添加索引优化查询性能,特别是在 friends 表的 user_idfriend_id 字段。

php 实现 好友

扩展功能

添加好友请求通知系统。 实现好友推荐算法基于共同好友或兴趣。 支持好友分组或标签管理。

标签: 好友php
分享给朋友:

相关文章

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE TAB…

php实现注册登录

php实现注册登录

PHP 注册功能实现 创建数据库表(以 MySQL 为例) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…

php session 实现购物车

php session 实现购物车

PHP Session 实现购物车的方法 初始化 Session 在 PHP 脚本的最开始调用 session_start() 函数,确保会话已启用。这通常在页面的顶部完成。 session_sta…

php实现秒杀

php实现秒杀

PHP实现秒杀功能的关键技术 秒杀系统需要解决高并发、数据一致性、系统稳定性等问题。以下是PHP实现秒杀功能的核心技术方案: 数据库优化 使用InnoDB引擎的行级锁和事务特性,确保数据一致性。商品…

php无法实现的

php无法实现的

PHP 的局限性 PHP 是一种广泛使用的服务器端脚本语言,主要用于 Web 开发。尽管功能强大,但在某些场景下存在局限性。 操作系统级开发 PHP 不适合编写操作系统内核或底层驱动程序。这类任务通…