Chuyên mục Php-MySqli-DataBase Cơ Bản

Bài 3: Select dữ liệu từ Database với PHP và Sql

Đăng bởi: Minacode|Cập nhật:10-12-2023

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 databaseinsert 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:

Sản phẩm sau khi được insert và Database

 

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é.

Bước 1:  

Đầ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:

Giao diện người dùng

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.

Bước 2: 

Vào file ProductClass.php mình sẽ tạo một method 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;
}
}

Bước 3: 

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:

Lỗi path khi include file trong php

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: 

Màn hình sau khi sửa lỗi Path

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:

Màn hình đổ dữ liệu từ database thành công

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>

 

Để Lại Ý Kiến Của bạn!
Bài Viết Chuyên Mục


Khóa Học Miễn Phí

IvyModa

FullStack

Chi tiết

Tạo tính năng CRUD với Livewire Laravel

FullStack

Chi tiết

Php-MySqli-DataBase Cơ Bản

FullStack

Chi tiết
Về MinaCode
Đọc Thơ Nhân Kỷ Niệm 10 Năm Thành Lập MB Nam Đà Nẵng

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--

Coming Soon