Hiển Thị Danh Sách Bài Viết với PHP và MySQL

Trong bài học trước bạn đã tìm hiểu cách lưu bài viết lên database. Ở bài học này chúng ta sẽ cùng nhau tìm hiểu cách hiển thị danh sách các bài viết được lưu trên database.

 

Tạo Trang Hiển Thị Danh Sách Bài Viết

Trên máy bạn mở text editor và tạo một file với tên list.php với nội dung như sau:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Form HTML</title>
</head>
<body>
    <h1>Danh sách bài viết</h1>
    <table>
        <thead>
            <tr>
                <th>STT</th>
                <th>Tiêu Đề</th>
                <th>Tools</th>
            </tr>
        </thead>
    <tbody>
        <?php
            // Code hiển thị danh sách bài viết
        ?>
    </tbody>
    </table>
</body>
</html>

Ở trên chúng ta có sử dụng một bảng với hai cột là ID và Tiêu Đề. Trong phần body của bảng này chúng ta sẽ nhúng mã PHP dùng để hiển thị danh sách các bài viết.

Tiếp theo chúng ta sẽ viết mã PHP này để thực hiện hai nhiệm vụ đó là:

  • Kết nối với blog database trên MySQL
  • Truy vấn các record đã được lưu vào bảng posts để hiển thị trang bảng

Kết Nối Tới Database

Bạn nhớ lại rằng đoạn mã PHP dùng để kết nối tới database đã được viết ở bài học trước. Do đó chúng ta có thể chép đoạn mã này và dán vào trang hiện tại để sử dụng. Tuy nhiên, để cho mã lệnh được gọn gàng chúng ta.

Trong đoạn mã PHP bạn xóa dòng comment và thêm dòng code dưới đây:

<?php
include('_connect_db.php');
?>

Ở trên chúng ta sử dụng hàm include() của PHP để nhập vào file _connect_db.php (các file được nhập vào sẽ được đặt tên với ký tự _ ở đầu). File này chưa có và vì vậy bạn cần tạo tập tin này trong cùng thư mục gốc chứa tập tin list.php với nội dung như sau:

<?php
$connection = mysqli_connect("127.0.0.1", "root", "root_password", "blog");

if (!$connection) {
    echo "Lỗi kết nối tới MySQL: ".mysqli_connect_error();
    exit;
}

Đoạn mã trên chính là đoạn mã dùng để kết nối tới blog database được copy từ tập tin save.php được tạo ra ở bài học trước.

Lấy Về Các Record Trên Bảng

Sau khi thực hiện việc kết nối tới database thì tiếp theo chúng ta sẽ thực hiện việc gửi truy vấn tới database để lấy về các record đã được lưu trên bảng posts. Công việc này còn được gọi là fetch dữ liệu từ bảng.

Mở lại tập tin list.php và thêm dòng mã sau vào sau câu lệnh include() mới được thêm ở trên:

include('_connect_db.php');
include('_fetch_data.php');

Tất nhiên bạn cần tạo tập tin _fetch_data.php và sau đó thêm nội dung sau:

<?php
$query = "SELECT id, title FROM posts ORDER BY id";
$result = mysqli_query($connection, $query);

echo "Số lượng bài viết: ".mysqli_num_rows($result);

Ở trên sử dụng hàm mysqli_query để gửi truy vấn tới database giống với những gì chúng ta đã làm để lưu bài viết lên bảng posts. Ngoài ra chúng ta có gọi hàm mysqli_num_rows() với đối số truyền vào là biến $result lấy từ kết quả trả về sau khi gửi truy vấn. Hàm này sẽ trả về số lượng các record được tìm thấy trên cơ sở dữ liệu.

Bây giờ nếu truy cập vào địa chỉ http://project.local/list.php bạn sẽ thấy kết quả sau:

Danh sách bài viết

Slượng bài viết: 2
STT Tiêu Đề

Điều này có nghĩa là trên máy của tôi đang có 2 bài viết được lưu trên database (của bạn số này có thể khác).

Tuy nhiên chúng ta cần hiển thị một danh sách bài viết với tiêu đề thay vì số lượng các bài viết. Bạn xóa dòng echo cuối cùng trong _fetch_data.php và thay bằng đoạn code dưới đây:

while ($post = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
    echo "<tr>
           <td>".$post["id"]."</td>
           <td>".$post["title"]."</td>
           <td><a href='edit.php?id=" . $post["id"] . "'>Edit</a>&nbsp;<a href='delete.php?id=" . $post["id"] . "'>Delete</a></td>
          </tr>";
}

Đoạn code trên sử dụng hàm mysqli_fetch_array() để fetch dữ liệu từ kết quả trả về. Hàm này nhận đối số đầu là biến $result ở trên và đối số thứ hai là một hằng, ở trên MYSQLI_ASSOC sẽ quyết định giá trị trả về làm một mảng liên kết hay associative array. Với mỗi lần gọi, hàm mysqli_fetch_array() sẽ chỉ fetch ra một record từ kết quả trả về, do đó bạn cần kết hợp việc gọi hàm này với vòng lặp while() như ở trên.

Bây giờ bạn truy cập lại vào trang http://project.local/list.php bạn sẽ thấy kết quả như sau:

 

Danh sách bài viết

STT Tiêu Đề  Tools
1   Test 1   Edit Delete
2   Test 1   Edit Delete

Như vậy tới đây chúng ta đã hoàn thành xong việc hiển thị danh sách các bài viết. Ở bài học tiếp theo chúng ta sẽ tìm hiểu cách sửa và xóa bài viết.