当前位置:首页 > PHP

php点赞实现

2026-02-16 22:11:26PHP

PHP 点赞功能实现

PHP 点赞功能的实现通常涉及前端交互、后端处理和数据库存储。以下是实现点赞功能的详细方法:

前端部分

创建一个简单的点赞按钮,使用 HTML 和 JavaScript 实现点击事件:

<button id="like-btn" onclick="likePost(1)">点赞</button>
<span id="like-count">0</span>

<script>
function likePost(postId) {
    fetch('like.php', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: 'post_id=' + postId
    })
    .then(response => response.json())
    .then(data => {
        if(data.success) {
            document.getElementById('like-count').innerText = data.likes;
        }
    });
}
</script>

后端处理

创建 like.php 文件处理点赞请求:

<?php
header('Content-Type: application/json');

// 假设已连接数据库
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

$postId = $_POST['post_id'] ?? 0;

// 防止SQL注入
$postId = filter_var($postId, FILTER_VALIDATE_INT);

if(!$postId) {
    echo json_encode(['success' => false]);
    exit;
}

// 更新点赞数
$stmt = $db->prepare("UPDATE posts SET likes = likes + 1 WHERE id = :id");
$stmt->bindParam(':id', $postId, PDO::PARAM_INT);
$success = $stmt->execute();

// 获取更新后的点赞数
$stmt = $db->prepare("SELECT likes FROM posts WHERE id = :id");
$stmt->bindParam(':id', $postId, PDO::PARAM_INT);
$stmt->execute();
$likes = $stmt->fetchColumn();

echo json_encode([
    'success' => $success,
    'likes' => $likes
]);
?>

数据库结构

创建存储点赞数的数据表:

CREATE TABLE posts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT,
    likes INT DEFAULT 0
);

防止重复点赞

为防止用户多次点赞,可以添加用户标识和记录表:

CREATE TABLE post_likes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    post_id INT,
    user_id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY (post_id, user_id)
);

修改 like.php 添加用户验证:

// 添加用户验证
session_start();
$userId = $_SESSION['user_id'] ?? 0;

// 检查是否已点赞
$stmt = $db->prepare("SELECT id FROM post_likes WHERE post_id = :post_id AND user_id = :user_id");
$stmt->bindParam(':post_id', $postId);
$stmt->bindParam(':user_id', $userId);
$stmt->execute();

if($stmt->fetch()) {
    echo json_encode(['success' => false, 'message' => '已点赞']);
    exit;
}

// 记录点赞
$stmt = $db->prepare("INSERT INTO post_likes (post_id, user_id) VALUES (:post_id, :user_id)");
$stmt->bindParam(':post_id', $postId);
$stmt->bindParam(':user_id', $userId);
$stmt->execute();

// 更新点赞数
$stmt = $db->prepare("UPDATE posts SET likes = likes + 1 WHERE id = :id");
$stmt->bindParam(':id', $postId);
$success = $stmt->execute();

AJAX 优化

优化前端 AJAX 请求,添加错误处理和加载状态:

function likePost(postId) {
    const btn = document.getElementById('like-btn');
    btn.disabled = true;

    fetch('like.php', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: 'post_id=' + postId
    })
    .then(response => {
        if(!response.ok) throw new Error('Network error');
        return response.json();
    })
    .then(data => {
        if(data.success) {
            document.getElementById('like-count').innerText = data.likes;
        } else {
            alert(data.message || '操作失败');
        }
    })
    .catch(error => {
        console.error('Error:', error);
        alert('请求失败');
    })
    .finally(() => {
        btn.disabled = false;
    });
}

安全性增强

添加 CSRF 防护和更多验证:

php点赞实现

// 添加 CSRF token 验证
session_start();
if(!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    echo json_encode(['success' => false, 'message' => '无效请求']);
    exit;
}

// 前端添加 CSRF token
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">

以上实现涵盖了基本的点赞功能,包括前端交互、后端处理、数据库存储和安全性考虑。根据实际需求可以进一步扩展功能,如取消点赞、点赞列表展示等。

标签: php
分享给朋友:

相关文章

php无限分类的实现

php无限分类的实现

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

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUES…

php实现支付宝支付

php实现支付宝支付

支付宝支付集成步骤 准备工作 在开始集成支付宝支付前,确保已注册支付宝开放平台账号并完成企业实名认证。创建应用后获取APPID、应用私钥和支付宝公钥。 配置支付宝SDK 通过Composer安装支付…

php实现注册登陆

php实现注册登陆

PHP 注册功能实现 创建数据库表结构(MySQL示例): CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php实现发帖

php实现发帖

PHP 实现发帖功能 要在 PHP 中实现发帖功能,通常需要结合数据库操作(如 MySQL)和前端表单提交。以下是实现发帖功能的关键步骤: 数据库表设计 创建一个帖子表(posts)存储发帖内容,基…

php 实现长轮询

php 实现长轮询

PHP 实现长轮询的方法 长轮询(Long Polling)是一种服务器推送技术,客户端发送请求后,服务器保持连接开放直到有新数据或超时。以下是实现步骤: 基础实现代码 创建一个简单的长轮询 PHP…