当前位置:首页 > 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]);
}

处理好友请求

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

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);

人脉搜索功能

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

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);

通知系统

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

php实现人脉

// 查询待处理的好友请求
$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实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $image…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…