Tạo bởi Trần Văn Điêp|
Học PHP

[Video] Kiểm Tra 60 phút - Test nhanh - Khóa học PHP

1. Tạo cơ sở dữ liệu và bảng product

CREATE DATABASE IF NOT EXISTS DB0512; USE DB0512; CREATE TABLE IF NOT EXISTS product ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, thumbnail VARCHAR(255), price DECIMAL(10,2), content TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
  • id: tự tăng.

  • title: tên sản phẩm.

  • thumbnail: đường dẫn ảnh.

  • price: giá sản phẩm (dùng DECIMAL để lưu tiền tệ).

  • content: mô tả sản phẩm.

  • created_at & updated_at: thời gian tạo và cập nhật.


2. Thêm dữ liệu mẫu

Bạn có thể dùng câu lệnh SQL INSERT INTO để thêm 35 sản phẩm. Ví dụ:

INSERT INTO product (title, thumbnail, price, content) VALUES ('Tesla Model S', 'images/tesla1.jpg', 79999, 'Electric car model S'), ('Ford Mustang', 'images/mustang1.jpg', 55999, 'Classic American muscle car'), ... -- tiếp tục cho đến 35 sản phẩm ;

Lưu ý: thumbnail là đường dẫn ảnh, bạn có thể lưu trong thư mục images/.


3. Tạo trang product.php hiển thị danh sách sản phẩm và phân trang

<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "DB0512"; // Kết nối database $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // Xử lý tìm kiếm $search = ""; if (isset($_GET['search'])) { $search = $_GET['search']; } // Phân trang $limit = 10; // 10 sản phẩm / trang $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; $start = ($page - 1) * $limit; // Lấy tổng số sản phẩm để tính trang $totalSql = "SELECT COUNT(*) FROM product WHERE title LIKE ? OR content LIKE ?"; $stmtTotal = $conn->prepare($totalSql); $searchParam = "%$search%"; $stmtTotal->bind_param("ss", $searchParam, $searchParam); $stmtTotal->execute(); $stmtTotal->bind_result($totalResult); $stmtTotal->fetch(); $stmtTotal->close(); $totalPages = ceil($totalResult / $limit); // Lấy dữ liệu sản phẩm $sql = "SELECT * FROM product WHERE title LIKE ? OR content LIKE ? ORDER BY id ASC LIMIT ?, ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("ssii", $searchParam, $searchParam, $start, $limit); $stmt->execute(); $result = $stmt->get_result(); ?> <!DOCTYPE html> <html> <head> <title>Product List</title> <style> table {border-collapse: collapse; width: 100%;} table, th, td {border: 1px solid black; padding: 8px;} th {background-color: #f2f2f2;} img {width: 100px;} .pagination a {margin: 0 5px; text-decoration: none;} </style> </head> <body> <h2>Danh sách sản phẩm</h2> <form method="get"> <input type="text" name="search" placeholder="Tìm theo tiêu đề hoặc nội dung" value="<?php echo htmlspecialchars($search); ?>"> <button type="submit">Tìm kiếm</button> </form> <table> <tr> <th>No</th> <th>Thumbnail</th> <th>Title</th> <th>Price</th> <th>Content</th> <th>Created At</th> <th>Updated At</th> </tr> <?php $no = $start + 1; while ($row = $result->fetch_assoc()) { echo "<tr> <td>".$no++."</td> <td><img src='".$row['thumbnail']."' /></td> <td>".$row['title']."</td> <td>$".$row['price']."</td> <td>".$row['content']."</td> <td>".$row['created_at']."</td> <td>".$row['updated_at']."</td> </tr>"; } ?> </table> <div class="pagination"> <?php for ($i=1; $i<=$totalPages; $i++) { echo '<a href="?page='.$i.'&search='.urlencode($search).'">'.$i.'</a>'; } ?> </div> </body> </html> <?php $stmt->close(); $conn->close(); ?>

Giải thích:

  1. Kết nối Database: sử dụng mysqli.

  2. Tìm kiếm: sử dụng LIKE trong SQL để tìm theo title hoặc content.

  3. Phân trang:

    • $limit = 10 sản phẩm/1 trang.

    • $page lấy từ URL ?page=.

    • LIMIT ?, ? để lấy dữ liệu theo trang.

  4. Hiển thị: bảng HTML, mỗi sản phẩm có số thứ tự, ảnh, tiêu đề, giá, mô tả và thời gian.

  5. Pagination links: hiển thị liên kết chuyển trang.

Phản hồi từ học viên

5

Tổng 0 đánh giá

Đăng nhập để làm bài kiểm tra

Chưa có kết quả nào trước đó