当前位置:首页 > PHP

php实现人脉

2026-01-29 19:43:00PHP

PHP实现人脉系统的基本思路

人脉系统通常涉及用户关系管理、社交网络功能和数据交互。PHP作为后端语言可以结合数据库实现这些功能。

数据库设计

创建用户表和关系表是基础。用户表存储用户信息,关系表记录用户间的关系类型和状态。

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

CREATE TABLE relationships (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    friend_id INT NOT NULL,
    status ENUM('pending', 'accepted', 'blocked') DEFAULT 'pending',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

建立好友关系

实现好友请求发送功能需要处理表单提交并将数据插入关系表。

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['send_request'])) {
    $userId = $_SESSION['user_id'];
    $friendId = $_POST['friend_id'];

    $stmt = $pdo->prepare("INSERT INTO relationships (user_id, friend_id, status) VALUES (?, ?, 'pending')");
    $stmt->execute([$userId, $friendId]);
}

处理好友请求

提供接受或拒绝好友请求的接口,更新关系表中的状态字段。

php实现人脉

if (isset($_GET['action']) && isset($_GET['relationship_id'])) {
    $relationshipId = $_GET['relationship_id'];
    $action = $_GET['action'];

    if ($action === 'accept') {
        $stmt = $pdo->prepare("UPDATE relationships SET status = 'accepted' WHERE id = ?");
        $stmt->execute([$relationshipId]);
    } elseif ($action === 'reject') {
        $stmt = $pdo->prepare("DELETE FROM relationships WHERE id = ?");
        $stmt->execute([$relationshipId]);
    }
}

显示人脉列表

查询已建立的好友关系并展示给用户。

$userId = $_SESSION['user_id'];
$stmt = $pdo->prepare("
    SELECT u.id, u.username 
    FROM relationships r
    JOIN users u ON (r.friend_id = u.id OR r.user_id = u.id) AND u.id != ?
    WHERE (r.user_id = ? OR r.friend_id = ?) AND r.status = 'accepted'
");
$stmt->execute([$userId, $userId, $userId]);
$friends = $stmt->fetchAll(PDO::FETCH_ASSOC);

人脉搜索功能

实现按用户名搜索潜在人脉的功能。

php实现人脉

if (isset($_GET['search'])) {
    $searchTerm = '%' . $_GET['search'] . '%';
    $userId = $_SESSION['user_id'];

    $stmt = $pdo->prepare("
        SELECT id, username 
        FROM users 
        WHERE username LIKE ? AND id != ?
        AND id NOT IN (
            SELECT friend_id FROM relationships WHERE user_id = ?
            UNION
            SELECT user_id FROM relationships WHERE friend_id = ?
        )
    ");
    $stmt->execute([$searchTerm, $userId, $userId, $userId]);
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
}

安全性考虑

实施参数化查询防止SQL注入,验证用户权限确保用户只能操作自己的关系数据。

// 检查用户是否有权操作这条关系记录
$stmt = $pdo->prepare("SELECT * FROM relationships WHERE id = ? AND (friend_id = ? OR user_id = ?)");
$stmt->execute([$relationshipId, $userId, $userId]);
$relationship = $stmt->fetch();

if (!$relationship) {
    die('无权操作此记录');
}

性能优化

为频繁查询的字段添加索引,考虑分页加载大量人脉数据。

ALTER TABLE relationships ADD INDEX (user_id);
ALTER TABLE relationships ADD INDEX (friend_id);
ALTER TABLE relationships ADD INDEX (status);

通知系统

实现好友请求通知功能,可以通过数据库或实时推送技术。

// 查询待处理的好友请求
$stmt = $pdo->prepare("
    SELECT r.id, u.username 
    FROM relationships r
    JOIN users u ON r.user_id = u.id
    WHERE r.friend_id = ? AND r.status = 'pending'
");
$stmt->execute([$_SESSION['user_id']]);
$pendingRequests = $stmt->fetchAll(PDO::FETCH_ASSOC);

标签: 人脉php
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

文件上传的基本实现 在PHP中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。…

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (…

php实现搜索功能

php实现搜索功能

实现基础搜索功能 使用PHP和MySQL实现基础的搜索功能需要结合表单提交与数据库查询。创建一个HTML表单用于接收用户输入的搜索关键词,通过PHP处理表单数据并查询数据库。 // 搜索表单 (H…

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class Tr…

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…