当前位置:首页 > 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实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (int…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

php无限分类的实现

php无限分类的实现

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

php无法实现的

php无法实现的

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

php商城 设计与实现

php商城 设计与实现

PHP商城设计与实现的关键步骤 需求分析与规划 明确商城类型(B2B/B2C)、目标用户群体及核心功能模块。基础功能需包含用户注册登录、商品展示、购物车、订单管理、支付接口集成、后台管理。扩展功能可考…