Danh Mục Bài Viết
Ok tiếp tục nào các bạn ơi! Ở Topic1 mình đã cùng các bạn kết nối database và insert dữ liệu thành công. Bên cạnh đó cũng nhân tiện làm rõ hơn một xí về lập trình OOP (hướng đối tượng). Topic 2 này mình sẽ thưc hiện select dữ liệu từ database và đổ ra giao diện nhé. À, từ giờ mình làm OOP luôn nhé! nào Let's Go thôi:
Các bạn bật trình soạn thảo lên và tiếp tục thực hiện trong thư mục TOPIC1 nhé. Còn mình sẽ tạo mới một thư mục TOPIC2 để thực hiện bài này cho tiện quản lý các bài viết.
Hiện tại trong database tại bảng product chúng ta có 2 sản phẩm sau:
Việc chúng ta bây giờ đó là lấy toàn bộ sản phẩm trong này để đổ ra giao diện người dùng nhé.
Đầu tiên mình sẽ tạo một thư mục view có chứa file product_list.php. Đặt vào nó một vài dòng code html đơn giản sau:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>List Product</title>
</head>
<style>
table {
width: 50%;
border-collapse: collapse;
}
table,tr,th,td {
border: 1px solid grey;
text-align: center;
}
</style>
<body>
<table>
<tr>
<th>ID</th>
<th>Name</th>
<th>Price</th>
<th>Option</th>
</tr>
<tr>
<td>1</td>
<td> San pham A</td>
<td>15000</td>
<td>
<a href="">Edit</a>|
<a href="">Delete</a>
</td>
</tr>
</table>
</body>
</html>
Ok, giờ thì ra giao diện xem nào:
Ngon lành cành đào rồi nhé. Tất nhiên dữ liệu trên màn hình các bạn đang thấy là mình tự đánh vào chứ không phải được đổ ta từ database.
Vào file ProductClass.php mình sẽ tạo một method là show_product nằm trong class ProductClass:
public function show_product(){
$query = "SELECT * FROM product";
$result = $this -> Database -> select($query);
return $result;
}
File ProductClass.php của chúng ta đã trở nên phong phú hơn rồi đấy
<?php
include_once ($base_url.'\TOPIC2\lib\database.php');
class ProductClass
{
public $Database;
public function __construct() {
$this -> Database = new Database;
}
public function insert_product($data) {
$product_name = $data['product_name'];
$product_price = $data['product_price'];
$query = "INSERT INTO product (product_name, product_price)
VALUES ('$product_name','$product_price')";
$result = $this -> Database-> insert($query);
return $result;
}
public function show_product(){
$query = "SELECT * FROM product";
$result = $this -> Database -> select($query);
return $result;
}
}
Các bạn quay lại file product_list.php, lên đầu file mở một cặp lệnh <?php ?> để thực hiện đổ dữ liệu ra. Mình sẽ thêm lệnh var_dump() để kiểm tra kết quả.
<?php
include_once ('./class/ProductClass.php');
$ProductClass = new ProductClass;
$show_product = $ProductClass ->show_product();
var_dump($show_product);
?>
Tuy nhiên quá đen là mình đã gặp lỗi. Một lỗi khá phổ biến và cũng dễ gây rối cho một số bạn:
Khi các bạn gặp lỗi này nghĩ ngay đến cái path nhé. Đó chính là các cái file mà mình đã include vào đang bị lỗi path. Để xử lý tình huống này mình sẽ xử lý như sau:
<?php
$base_url = 'C:\xampp\htdocs';
include_once ($base_url.'\TOPIC2\class\ProductClass.php');
$ProductClass = new ProductClass;
$show_product = $ProductClass ->show_product();
var_dump($show_product);
?>
Mình sẽ tạo ta một cái $base_url để lưu đường dẫn tuyệt đối. Sau khi bạn online thì chỉ cần thay tên miền của mình vào là ok.
Các bạn qua các file kia để sửa luôn:
ProductClass.php
include_once ($base_url.'\TOPIC2\lib\database.php');
database.php
include_once ($base_url.'\TOPIC2\config\config.php');
Ok, kiểm tra lại nào:
Sau khi sửa lỗi và quay lại màn hình. Bạn thấy lệnh var_dump() đã trả về một cái object không. Nó có cái [num_rows] => int(2). Là 2 cái array trong database của chúng ta. Vậy là ổn rồi, Mình sẽ comment lệnh var_dump và thực hiện câu lệnh fetch_assoc() và vòng lặp while để đổ dữ liệu ra thôi.
<table>
<tr>
<th>ID</th>
<th>Name</th>
<th>Price</th>
<th>Option</th>
</tr>
<?php
if($show_product -> num_rows >0){while($result = $show_product -> fetch_assoc()){
?>
<tr>
<td><?php echo $result['product_id'] ?></td>
<td> <?php echo $result['product_name'] ?></td>
<td><?php echo number_format($result['product_price']) ?></td>
<td>
<a href="">Edit</a>|
<a href="">Delete</a>
</td>
</tr>
<?php
}}
?>
</table>
Ở đây mình sẽ dùng thêm hàm build-in trong php là number_format() để số tiền nó có cái dấu ngăn cách nhé. Cùng xem thành quả thôi. Let’s Go:
Ngon lành rồi nhé, cùng xem lại code thôi nào:
product_list.php
<?php
$base_url = 'C:\xampp\htdocs';
include_once ($base_url.'\TOPIC2\class\ProductClass.php');
$ProductClass = new ProductClass;
$show_product = $ProductClass ->show_product();
// var_dump($show_product);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>List Product</title>
</head>
<style>
table {
width: 50%;
border-collapse: collapse;
}
table,tr,th,td {
border: 1px solid grey;
text-align: center;
}
</style>
<body>
<table>
<tr>
<th>ID</th>
<th>Name</th>
<th>Price</th>
<th>Option</th>
</tr>
<?php
if($show_product -> num_rows >0){while($result = $show_product -> fetch_assoc()){
?>
<tr>
<td><?php echo $result['product_id'] ?></td>
<td> <?php echo $result['product_name'] ?></td>
<td><?php echo number_format($result['product_price']) ?></td>
<td>
<a href="">Edit</a>|
<a href="">Delete</a>
</td>
</tr>
<?php
}}
?>
</table>
</body>
</html>
Banker To Coder
Hi All,
Nguyên đây! MinaCode là website mình tạo ra với mong muốn chia sẻ chút kiến thức liên quan đến lập trình FullStack.
Ngôn ngữ lập trình chủ yếu được sử dụng là Htm, Css, Javascript, Php cùng một số thư viện như Jquery, Fontawesome... Phía Frontend và Farmework Laravel phía Backend.
Mình chưa bao giờ tham gia bất cứ một trường lớp nào về lập trình. Tất cả kiến thức mình chia sẻ đều là trên tình thần tự học. Do đó:
+ MinaCode phù hợp với những tay ngang, xem lập trình như là một kỹ năng bổ trợ trong công việc hay là một kênh kiếm thêm thu nhập từ những very mini projects.
+ MinaCode không phù hợp với những bạn đang được đào tạo bài bản, chính quy.
Mình tin rằng, Trong tương lai không xa. Lập trình sẽ trở nên một kỹ năng không thể thiếu đối với các bạn trẻ.
Cuối cùng thì Ngôn ngữ lập trình không quan trọng bằng Tư duy lập trình. Mình chúc các bạn sẽ có được những kiến thức bổ ích với MinaCode.
--Ngô Sỹ Nguyên--