当前位置:首页 > PHP

php实现关注

2026-02-14 12:18:46PHP

实现用户关注功能

在PHP中实现用户关注功能通常涉及数据库设计、前后端交互和逻辑处理。以下是关键实现步骤:

数据库设计

创建用户表和关注关系表,示例SQL:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    -- 其他用户字段
);

CREATE TABLE follows (
    follower_id INT NOT NULL,
    following_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (follower_id, following_id),
    FOREIGN KEY (follower_id) REFERENCES users(id),
    FOREIGN KEY (following_id) REFERENCES users(id)
);

关注操作处理

创建关注功能的PHP处理脚本(如follow.php):

<?php
session_start();
require 'db_connection.php'; // 数据库连接文件

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $followerId = $_SESSION['user_id']; // 当前登录用户
    $followingId = (int)$_POST['following_id'];

    // 检查是否已关注
    $checkSql = "SELECT * FROM follows WHERE follower_id = ? AND following_id = ?";
    $stmt = $pdo->prepare($checkSql);
    $stmt->execute([$followerId, $followingId]);

    if ($stmt->rowCount() > 0) {
        // 已关注则取消关注
        $deleteSql = "DELETE FROM follows WHERE follower_id = ? AND following_id = ?";
        $pdo->prepare($deleteSql)->execute([$followerId, $followingId]);
        echo json_encode(['status' => 'unfollowed']);
    } else {
        // 未关注则添加关注
        $insertSql = "INSERT INTO follows (follower_id, following_id) VALUES (?, ?)";
        $pdo->prepare($insertSql)->execute([$followerId, $followingId]);
        echo json_encode(['status' => 'followed']);
    }
}
?>

前端交互实现

使用AJAX实现无刷新关注操作:

document.querySelector('.follow-btn').addEventListener('click', function() {
    const userId = this.dataset.userid;
    fetch('follow.php', {
        method: 'POST',
        headers: {'Content-Type': 'application/x-www-form-urlencoded'},
        body: `following_id=${userId}`
    })
    .then(response => response.json())
    .then(data => {
        if (data.status === 'followed') {
            this.textContent = '已关注';
            this.classList.add('active');
        } else {
            this.textContent = '关注';
            this.classList.remove('active');
        }
    });
});

关注列表查询

获取用户关注列表的PHP示例:

function getFollowingList($userId) {
    global $pdo;
    $sql = "SELECT u.id, u.username FROM follows f 
            JOIN users u ON f.following_id = u.id 
            WHERE f.follower_id = ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$userId]);
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

粉丝列表查询

获取用户粉丝列表的PHP示例:

php实现关注

function getFollowerList($userId) {
    global $pdo;
    $sql = "SELECT u.id, u.username FROM follows f 
            JOIN users u ON f.follower_id = u.id 
            WHERE f.following_id = ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$userId]);
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

安全注意事项

  • 验证用户登录状态
  • 使用预处理语句防止SQL注入
  • 对用户ID进行类型验证
  • 实现CSRF保护机制
  • 添加关注数量限制逻辑

以上实现可根据具体项目需求进行调整,例如添加关注通知、关注时间戳、双向关注关系等扩展功能。

标签: php
分享给朋友:

相关文章

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php实现文件的下载

php实现文件的下载

PHP 实现文件下载的方法 在 PHP 中实现文件下载功能通常需要设置正确的 HTTP 头信息,并输出文件内容。以下是几种常见的实现方式: 使用 header() 函数强制下载 通过设置 Conte…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…