You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为PHP评论系统添加数据库加载更多按钮的方案问询

评论系统加载更多功能实现方案

一、修改PHP后端(fetch_comment.php)

调整接口支持分页查询,同时返回是否还有更多评论的标记,避免SQL注入风险:

<?php
// fetch_comment.php
$connect = new PDO('mysql:host=localhost;dbname=testing', 'root', '');

// 获取分页参数,默认第一页
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
$limit = 3; // 每页显示3条顶级评论
$offset = ($page - 1) * $limit;

// 查询当前页的顶级评论(参数绑定防止注入)
$query = "
SELECT * FROM comments 
WHERE parent_comment_id = '0' 
ORDER BY comment_id DESC LIMIT :offset, :limit
";
$statement = $connect->prepare($query);
$statement->bindParam(':offset', $offset, PDO::PARAM_INT);
$statement->bindParam(':limit', $limit, PDO::PARAM_INT);
$statement->execute();
$result = $statement->fetchAll();

// 查询顶级评论总数,判断是否还有更多
$countQuery = "SELECT COUNT(*) FROM comments WHERE parent_comment_id = '0'";
$countStmt = $connect->prepare($countQuery);
$countStmt->execute();
$totalComments = $countStmt->fetchColumn();
$hasMore = ($page * $limit) < $totalComments;

$output = '';
foreach($result as $row)
{
 $output .= '
 <div class="panel panel-default">
  <div class="panel-heading">Par <b>'.$row["comment_sender_name"].'</b> le <i>'.$row["date"].'</i></div>
  <div class="panel-body">'.$row["comment"].'</div>
  <div class="panel-footer" align="right"><button type="button" style="font-size:1rem;"class="btn btn-default reply" id="'.$row["comment_id"].'">Répondre</button></div>
 </div>
 ';
 $output .= get_reply_comment($connect, $row["comment_id"]);
}

// 返回JSON格式数据,包含评论内容和是否还有更多
echo json_encode([
    'comments' => $output,
    'hasMore' => $hasMore
]);

function get_reply_comment($connect, $parent_id = 0, $marginleft = 0)
{
 $query = "
 SELECT * FROM comments WHERE parent_comment_id = :parent_id
 ";
 $output = '';
 $statement = $connect->prepare($query);
 $statement->bindParam(':parent_id', $parent_id, PDO::PARAM_INT);
 $statement->execute();
 $result = $statement->fetchAll();
 $count = $statement->rowCount();
 if($parent_id == 0)
 {
  $marginleft = 0;
 }
 else
 {
  $marginleft = $marginleft + 48;
 }
 if($count > 0)
 {
  foreach($result as $row)
  {
   $output .= '
   <div class="panel panel-default" style="margin-left:'.$marginleft.'px">
    <div class="panel-heading">By <b>'.$row["comment_sender_name"].'</b> le <i>'.$row["date"].'</i></div>
    <div class="panel-body">'.$row["comment"].'</div>
    <div class="panel-footer" align="right"><button type="button" style="font-size:1rem;" class="btn btn-default reply" id="'.$row["comment_id"].'">Répondre</button></div>
   </div>
   ';
   $output .= get_reply_comment($connect, $row["comment_id"], $marginleft);
  }
 }
 return $output;
}
?>

二、更新HTML结构

在评论容器下方添加「加载更多」按钮,默认隐藏:

<section class="comments-section" id="comments">
    <h2 class="h2 center">Partagez vos temoignages </h2>
    <p class="paragraph center">Laissez la haine et le mépris à l'extérieur ! Ici on écrit que des choses positives.</p>
    <div class="container">
        <form method="POST" id="comment_form">
            <div class="form-group">
                <input type="text" name="comment_name" id="comment_name" class="form-control" placeholder="Nom ou pseudo" />
            </div>
            <div class="form-group">
                <textarea style="resize: none;" name="comment_content" id="comment_content" class="form-control" placeholder="Redigez votre commentaire" maxlength="700" rows="10"></textarea>
            </div>
            <div class="form-group">
                <input type="hidden" name="comment_id" id="comment_id" value="0" />
                <input type="submit" name="submit" id="submit" class="btn btn-success" value="Publier" />
            </div>
        </form>
        <span id="comment_message"></span>
        <br />
        <div class="all-comments" id="all">
            <div class="content" id="display_comment"></div>
            <!-- 新增加载更多按钮 -->
            <div class="text-center mt-3">
                <button id="loadMoreBtn" class="btn btn-primary" style="display:none;">加载更多评论</button>
            </div>
        </div>
    </div>
</section>

三、添加JavaScript逻辑

实现AJAX加载更多功能,同时重新绑定回复按钮事件(确保新加载的评论能触发回复功能):

$(document).ready(function() {
    let currentPage = 1;
    const limit = 3;

    // 初始化加载第一页评论
    loadComments(currentPage);

    // 加载更多按钮点击事件
    $('#loadMoreBtn').click(function() {
        currentPage++;
        loadComments(currentPage);
    });

    function loadComments(page) {
        $.ajax({
            url: 'fetch_comment.php',
            type: 'GET',
            data: { page: page },
            dataType: 'json',
            beforeSend: function() {
                $('#loadMoreBtn').text('加载中...').prop('disabled', true);
            },
            success: function(response) {
                // 追加新评论到容器
                $('#display_comment').append(response.comments);
                // 更新按钮状态
                if (response.hasMore) {
                    $('#loadMoreBtn').text('加载更多评论').prop('disabled', false);
                } else {
                    $('#loadMoreBtn').hide();
                }
                // 重新绑定回复按钮事件
                bindReplyEvents();
            },
            error: function() {
                $('#loadMoreBtn').text('加载失败,重试').prop('disabled', false);
            }
        });
    }

    // 绑定回复按钮点击事件(兼容新加载的元素)
    function bindReplyEvents() {
        $('.reply').off('click').on('click', function() {
            // 保留原系统的回复逻辑,例如弹出回复框等
            let commentId = $(this).attr('id');
            // 原回复功能代码写在这里
        });
    }
});

注意事项

  • 确保项目已引入jQuery,否则AJAX功能无法运行
  • 检查数据库连接参数是否与实际环境匹配
  • 若需要调整每页显示条数,同步修改PHP中的$limit和JS中的limit值

内容的提问来源于stack exchange,提问作者Stefan Saulic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:01:20