Tạo bởi Trần Văn Điêp|
[Video] Kiểm Tra 60 phút - Test nhanh - Khóa học PHP
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 ý:
thumbnaillà đường dẫn ảnh, bạn có thể lưu trong thư mụcimages/.
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:
-
Kết nối Database: sử dụng
mysqli. -
Tìm kiếm: sử dụng
LIKEtrong SQL để tìm theotitlehoặccontent. -
Phân trang:
-
$limit = 10sản phẩm/1 trang. -
$pagelấy từ URL?page=. -
LIMIT ?, ?để lấy dữ liệu theo trang.
-
-
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.
-
Pagination links: hiển thị liên kết chuyển trang.