当前位置:首页 > 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实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…

php实现域名

php实现域名

PHP实现域名操作的方法 获取当前域名 使用$_SERVER['HTTP_HOST']可以获取当前访问的域名: $currentDomain = $_SERVER['HTTP_HOST']; ech…