Hướng dẫn lấy ID của bài viết

Mình muốn lấy id của mỗi bài viết để hiển thị các bình luận của bài viết đó.
Nhưng commentlist.php chỉ nhận được 1 id bài viết đầu tiên có kết quả. Các id bài viết tiếp theo không có kết quả nào!
Nhờ các bạn xem giúp. Xin chân thành cảm ơn

<?php
        $sql = "SELECT * FROM tblposts"; 
        $result = mysqli_query($connect, $sql);
          while ($row = mysqli_fetch_array($result)) {
?>    
        <div class="timeline-body" id="showComments">        

            <form method="POST" id="frm-cmd">
                <div class="post-id" id="<?php echo $row['id']; ?>"></div>
                <div>
                    <input type="button" class="btn-submit" id="submitButton" value="Publish" />
                        <div id="submitcmd">Send</div>
                </div>
            </form>     

        </div>    
<?php } ?>

<script>
$(document).ready(function(){
  var postid = $(".post-id").attr("id");  
                 listComment(postid);
});

            function listComment(postid) {
                $.get("commentlist.php?postid =" + postid ,
                        function (data) {
                               var data = JSON.parse(data);
                            
                            var comments = "";
                            $("#showComments").html(list);
                        });
            }
</script>        

commentlist.php

<?php 
session_start();
include 'connect.php';

$sql = "SELECT * FROM comments WHERE postid = '".$_GET['postid']."' ORDER BY postid ASC";

$result = mysqli_query($connect, $sql);
$record_set = array();
while ($row = mysqli_fetch_assoc($result)) {
    array_push($record_set, $row);
}
mysqli_free_result($result);

mysqli_close($connect);
echo json_encode($record_set);
?>

Cần phân biệt các trường hợp sau:

  1. Lấy được các kết quả lần lượt nhưng hiển thị chỉ được một id duy nhất đầu tiên
  2. Chỉ lấy được kết quả đầu tiên, duy nhất mà không fetch thêm được phát nào vì cài đặt nhầm lẫn sao đó trong câu lệnh mysqli_blah_blah.

Cách debug: gõ trực tiếp ID lên trên thanh địa chỉ trình duyệt từng cái xem, ví dụ commentlist.php?postid=4 , và lần lượt thay thử. Nếu nó trả về đúng thì chứng tỏ là commentlist.php của bạn không gặp trục trặc gì. Còn nếu hiện lên không đúng mong đợi thì sửa nó cho đúng.

Nếu đã đúng, thì bạn phải xem khi gọi Ajax, dữ liệu trả về có ổn không. Khoan cho nó hiện lên trên thẻ div bằng innerHTML gì đó đã, mà alert nó hoặc console.log(data) để xem nó có nhận được đúng dữ liệu bên commentlist.php gửi về không đã. Nếu trả về không đúng thì xem thử tại sao? Nếu trả về đúng => chỉ có thể là đang nhầm lẫn id của element với class của element khiến cho dữ liệu không nạp vào innerHTML đúng mà thôi, nên nó lẽ ra là phải nạp lần lượt thì nó nạp đè hoặc không thể nạp vào đúng để hiện lên cho xem.

Mình nghi ngờ cái này: $("#showComments").html(list);

Vì bên trên không tìm ra list là cái gì cả. Nó có phải một biến? Khai báo ở đâu?

Đọc code mệt quá nên mình chỉ có thể nói tổng quát như trên.

5 Likes

Mình đoán là do cách bạn echo cái ID ra ngoài. Echo như vậy, thì HTML khi load, nó nhận giá trị ID đầu tiên xong im luôn, không update thêm các ID sau (vì page không load hay refresh nữa)

Thay vì mix cái code PHP và HTML như trên, bạn có thể thử như này:

<div class="timeline-body" id="showComments">        
    <form method="POST" id="frm-cmd">

        <?php
            $sql = "SELECT * FROM tblposts"; 
            $result = mysqli_query($connect, $sql);
            while ($row = mysqli_fetch_array($result)) {
                echo '
                    <div class="post-id" id="'.$row['id'].'"></div>
                    <div>
                        <input type="button" class="btn-submit" id="submitButton" value="Publish" />
                            <div id="submitcmd">Send</div>
                    </div>
                ';
            }
            ?> 
    </form>     
</div>    

(Mình viết chay, chưa test, nên co thể sai sót)

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?