首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

php mysql留言板点赞

基础概念

PHP 是一种广泛使用的开源脚本语言,特别适合于Web开发,并且可以嵌入HTML。

MySQL 是一个关系型数据库管理系统,MySQL采用了双授权政策,可以将数据保存在不同的表中,从而增加数据库的速度和灵活性,具有体积小、速度快、总体拥有成本低的特点。

留言板点赞 功能允许用户对留言板上的特定留言表示赞同或喜欢。

相关优势

  1. 用户参与度提升:点赞功能可以增加用户之间的互动,提高用户参与度和网站的活跃度。
  2. 内容筛选:通过点赞数,用户可以快速识别出受欢迎或高质量的内容。
  3. 数据分析:点赞数据可用于分析用户偏好和行为模式。

类型

  • 简单点赞:用户只能对一条留言点赞一次。
  • 可取消点赞:用户可以对自己之前点过的赞进行取消。
  • 点赞计数器:显示每条留言获得的点赞总数。

应用场景

  • 社交媒体平台
  • 论坛和社区
  • 博客和新闻网站

实现步骤及示例代码

数据库设计

首先,设计一个简单的数据库表来存储留言和点赞信息。

代码语言:txt
复制
CREATE TABLE messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    content TEXT NOT NULL,
    user_id INT NOT NULL
);

CREATE TABLE likes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    message_id INT NOT NULL,
    user_id INT NOT NULL,
    liked_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (message_id) REFERENCES messages(id)
);

PHP后端实现

  1. 显示留言和点赞按钮
代码语言:txt
复制
<?php
// 假设已连接到数据库
$messages = $db->query('SELECT * FROM messages')->fetchAll();

foreach ($messages as $message) {
    echo "<p>{$message['content']}</p>";
    echo "<button onclick='likeMessage({$message['id']})'>点赞 ({$getLikesCount[$message['id']]})</button>";
}
?>
  1. 处理点赞请求
代码语言:txt
复制
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['message_id']) && isset($_SESSION['user_id'])) {
    $messageId = $_POST['message_id'];
    $userId = $_SESSION['user_id'];

    // 检查用户是否已经点过赞
    $alreadyLiked = $db->query("SELECT * FROM likes WHERE message_id = $messageId AND user_id = $userId")->fetch();

    if (!$alreadyLiked) {
        // 插入新的点赞记录
        $db->exec("INSERT INTO likes (message_id, user_id) VALUES ($messageId, $userId)");
    } else {
        // 用户取消点赞
        $db->exec("DELETE FROM likes WHERE message_id = $messageId AND user_id = $userId");
    }

    header('Content-Type: application/json');
    echo json_encode(['success' => true]);
    exit;
}
?>
  1. JavaScript前端实现
代码语言:txt
复制
function likeMessage(messageId) {
    fetch('like.php', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: `message_id=${messageId}`
    })
    .then(response => response.json())
    .then(data => {
        if (data.success) {
            // 更新点赞数显示
            const likeButton = document.querySelector(`button[onclick="likeMessage(${messageId})"]`);
            const likeCount = parseInt(likeButton.innerText.split(' ')[1]);
            likeButton.innerText = `点赞 (${likeCount + 1})`;
        }
    });
}

可能遇到的问题及解决方法

  1. 重复点赞
    • 问题原因:用户可以多次点击点赞按钮。
    • 解决方法:在数据库中检查用户是否已经对该留言点过赞,如果已点赞则不再插入新记录。
  • 点赞数不同步
    • 问题原因:前端显示的点赞数与数据库中的记录不一致。
    • 解决方法:每次点赞操作后,都重新从数据库获取最新的点赞数并更新前端显示。
  • 性能问题
    • 问题原因:当留言数量巨大时,查询和更新点赞数的操作可能变得缓慢。
    • 解决方法:使用缓存机制(如Redis)来存储点赞数,并定期同步到数据库。

通过上述设计和实现,可以构建一个基本的留言板点赞功能。在实际应用中,还需考虑安全性、错误处理和用户体验优化等方面。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 点赞功能,用 MySQL?还是 Redis!

    我们先来看看场景的需求: 显示点赞数量 判断用户是否点过赞,用于去重,必须的判断 显示个人点赞列表,一般在用户中心 显示文章点赞列表 我们先看一下头条和微博的例子 ? ?...2.1 mysql方案 mysql方案, 随着nosql的流行,大数据的持续热点,但是mysql仍然不可替代,对于大多数的中小项目,低于千万级的数据量,采用mysql分表+cache,是完全可以胜任的,...2.2 redis方案 当数据量达到上亿的量,上cache是必经的阶段,由于点赞这种动作很随意,很多人看到大拇指就想点,所以数据量增长很快,数据规模上来后,对mysql读写都有很大的压力,这时就要考虑memcache...下面说下redis作为storage的方案: 场景a :显示点赞数量 在点赞的地方,只是显示一个点赞数量,能区分用户是否点赞过,一般用户不关心这个列表,这个场景只要一个数字就可以了,当数量比较大时,一般显示为...:tid:888 //实现数量自增 (integer) 899 场景b:点赞去重,避免重复点赞 要实现这个需求,必须有文章点赞的uid列表,以uid为key场景c:一般在用户中心,可以看到用户自己的点赞列表

    2K20

    点赞功能,用 MySQL 还是 Redis ?

    我们先来看看场景的需求: 显示点赞数量 判断用户是否点过赞,用于去重,必须的判断 显示个人点赞列表,一般在用户中心 显示文章点赞列表 我们先看一下头条和微博的例子 ? ?...2.1 mysql方案 mysql方案, 随着nosql的流行,大数据的持续热点,但是mysql仍然不可替代,对于大多数的中小项目,低于千万级的数据量,采用mysql分表+cache,是完全可以胜任的,...2.2 redis方案 当数据量达到上亿的量,上cache是必经的阶段,由于点赞这种动作很随意,很多人看到大拇指就想点,所以数据量增长很快,数据规模上来后,对mysql读写都有很大的压力,这时就要考虑memcache...纯cache就是把数据从mysql先写入redis,用户先读cache,miss后再拉取MySQL,同时cache做同步。 ? 多数场景二者是同时使用的,并不冲突。...下面说下redis作为storage的方案: 场景a :显示点赞数量 在点赞的地方,只是显示一个点赞数量,能区分用户是否点赞过,一般用户不关心这个列表,这个场景只要一个数字就可以了,当数量比较大时,一般显示为

    1.1K30

    点赞功能,你用 MySQL 还是 Redis ?

    我们先来看看场景的需求: 显示点赞数量 判断用户是否点过赞,用于去重,必须的判断 显示个人点赞列表,一般在用户中心 显示文章点赞列表 我们先看一下头条和微博的例子 [897b7172-a444-4a0e-a984...方案 2.1 mysql方案 mysql方案, 随着nosql的流行,大数据的持续热点,但是mysql仍然不可替代,对于大多数的中小项目,低于千万级的数据量,采用mysql分表+cache,是完全可以胜任的...2.2 redis方案 当数据量达到上亿的量,上cache是必经的阶段,由于点赞这种动作很随意,很多人看到大拇指就想点,所以数据量增长很快,数据规模上来后,对mysql读写都有很大的压力,这时就要考虑memcache...纯cache就是把数据从mysql先写入redis,用户先读cache,miss后再拉取MySQL,同时cache做同步。...:tid:888 456 //判断是否点赞 (integer) 1 点赞的地方,如果点赞过显示红色,没有则显示黑白色, 今日头条是没有地方可以看到点赞列表的,而微博点进去,详情页可以看到点赞列表,但是只会显示最近的几十条

    67040

    【黄啊码】php结合redis实现视频点赞

    下面我们就来看看如何使用 Redis 缓存实现视频点赞功能。 二、php实现视频点赞 在配置文件中把redis作为缓存,这是实现后面的前提,切记改为redis!!!...1、php引入redis 2、使用redis命令实现点赞 Redis 可以存储键与 5 种不同数据结构类型之间的映射,这 5 种数据结构类型分别为 String(字符串)、List(列表)、Set(集合...先来看一下他们的特点: string(字符串),采用键值对的方式存储,不适合点赞 list(列表),按照顺序排序,通常用在秒杀方面 set(集合),是string类型的无序集合,可以将用户记录进去 zset...(有序集合),是string类型的有序集合,用在排名方面, 为什么我们要用集合呢,因为他们的关系是一对多,一个视频id对应多个点赞用户,并且是无序的,也就不需要排序,所以我们用视频id作为key,集合里面放点赞用户的...id,实现点赞。

    43110

    HarmonyOS实战—实现抖音点赞和取消点赞效果

    双击点赞 和 双击取消点赞 如:在抖音中双击屏幕之后就可以点赞,小红心就会变亮 [在这里插入图片描述] 把白色和红色的心形图片复制到 media 下 [在这里插入图片描述] [在这里插入图片描述] 需要图片的可以自取...业务分析: 双击屏幕之后点赞。(上面已实现),再次双击屏幕之后,不会取消点赞,只有点击后红心之后才能取消点赞。...单击红心也可以点赞,再次单击红心就会取消点赞 实现思路: 给最外层的布局添加双击事件,双击之后点赞,变成红色心。 如果已经被点赞,那么还是修改为红色心,相当于不做任何处理。 给图片添加单击事件。...如果没有点赞,单击之后,白色心变成红色心。 如果已经点赞了,单击之后,红色心变成白色心。...,只有点击小红心才能取消点赞 [在这里插入图片描述]

    2K20
    领券