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

Bài 4: Update dữ liệu trong PHP

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

Ok, tiếp tục thôi nào bạn ơi. Ở Topic 2 mình đã select dữ liệu và đổ ra giao diện thành công. Bài này mình làm quen câu lệnh update và sẽ tiến hành cập nhật dữ liệu nhé. Cũng rất dễ thôi. Let’s Go.

Trước tiên chúng ta nhìn lại màn hình để xem thành quả bài trước nào:

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

À, các bạn nhờ là mình đã tạo một foder TOPIC3 để làm bài này nên đường dẫn có chút thay đổi nhé.

Bạn thấy không? ở cột option mình đã để có 2 sự lựa chọn là Edit -> nếu muốn sửa và Delete -> nếu muốn xóa.

Cùng xem giao diện Html product_list.php của nó:

 <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="product_edit.php?product_id=<?php echo $result['product_id'] ?>">Edit</a>|
                <a href="">Delete</a>
            </td>
        </tr>
    <?php
    }}
    ?>
    </table>

Mình đã thêm một đường dẫn product_edit.php ở thẻ a mục Edit. Nhưng ta chưa có đường dẫn này nên các bạn vào thư mục view tạo thêm một file product_edit.php để xử lý update nhé. Nội dung của file này sẽ gần như giống với file test.php mà mình đã làm ở TOPIC1

Nhân tiện khúc này bạn tạo luôn giúp mình 1 file product_add.php trong thư mục view và bê nguyên code của test.php qua luôn nhé.

File product_edit.php lúc này sẽ như sau:

<?php
$base_url = 'C:\xampp\htdocs';
include_once ($base_url.'\TOPIC3\class\ProductClass.php');
$ProductClass = new ProductClass;
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Edit Product</title>
</head>
<body>
    <form action="" method="post">
        <input type="text" placeholder="product_name" name="product_name"> <br>
        <input type="text" placeholder="product_price" name="product_price"> <br>
        <button style="cursor: pointer;" type="submit">Edit</button>
    </form>

</body>
</html>

Đến khúc này có 2 việc ta phải làm đó là. 

  • 1, Đổ dữ liệu của sản phẩm cần sửa từ database ra
  • 2, Cập nhật dữ liệu sau khi sửa vào lại database

Mình làm cái 1 trước nhé:

Trong file ProductClass.php mình sẽ tạo một method có tên là get_product()

public function get_product($product_id){
    $query = "SELECT * FROM product WHERE product_id='$product_id'";
    $result = $this -> Database -> select($query) -> fetch_assoc();
    return $result;
}

File ProductClass.php sẽ thay đổi như sau:

<?php
include_once ($base_url.'\TOPIC3\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;
    
}
public function get_product($product_id){
    $query = "SELECT * FROM product WHERE product_id='$product_id'";
    $result = $this -> Database -> select($query) -> fetch_assoc();
    return $result;

}

}

Tiếp theo mình qua file product_edit.php để bắt sư kiện GET lấy cái product_id trên url về, gửi qua bên ProductClass này để xử lý và trả kết quả.

<?php
$product_id = $_GET['product_id'];
if ($_SERVER["REQUEST_METHOD"] == "GET") {
$get_product = $ProductClass -> get_product($product_id);
  }
var_dump($get_product);
die();
?>

Như thường lệ mình var_dump() ra xem nó trả về cái gì.

Kết quả trả về khi var_dump()

Kết quả ở đây là một array. Bạn có biết vì sao lại là array mà không phải là object không. Đó là vì mình đã thực hiện fetch_assoc() tại method get_product() trong ProductClass.php luôn rồi.

Bây giờ chỉ việc show kết quả ra thôi

<?php
$base_url = 'C:\xampp\htdocs';
include_once ($base_url.'\TOPIC3\class\ProductClass.php');
$ProductClass = new ProductClass;
?>
<?php
$product_id = $_GET['product_id'];
if ($_SERVER["REQUEST_METHOD"] == "GET") {
$get_product = $ProductClass -> get_product($product_id);
  }
// var_dump($get_product);
// die();
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Edit Product</title>
</head>
<body>
    <form action="" method="post">
        <input type="text" placeholder="product_name" value="<?php echo $get_product['product_name']  ?>" name="product_name"> <br>
        <input type="text" placeholder="product_price" value="<?php echo $get_product['product_price']  ?>" name="product_price"> <br>
        <button style="cursor: pointer;" type="submit">Edit</button>
    </form>
</body>
</html>

Giao diện sẽ là:

Giao diện sản phẩm cần sửa

Bạn nhờ nhìn lên đường dẫn nhé. Nó đang ở ?product_id=1 đấy.

Xong việc thứ 1, việc thứ 2 đó là mình sẽ sửa thành San Pham C với giá 15000 trên thẻ input và nhấn edit. Yêu cầu đặt ra là cở sở dự liệu sẽ cập nhật lại dữ liệu mới. Lại Let’s Go thôi:

Để thực hiện bước này cũng tương tự như khi ta insert nhưng nó khác một chút đó là chúng ta ko tạo nên một data mới mà chúng ta chỉ cập nhật lại một data có sẵn dựa trên cái ID có được.

Bây giờ trong file product_edit.php mình sẽ code php tạo lệnh bắt sự kiện post để lấy dự liệu khi sumit và cập nhật database.

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $product_id = $_GET['product_id'];
    $data = $_POST;
    $update_product = $ProductClass ->update_product($data,$product_id);
  }
?>

Bạn có thấy trình soạn thảo nó báo lỗi gì không, mình nghĩ là sẽ có.  Vì cái method update_product() mình vẫn chưa khai báo ở ProductClass phải không nào. 

Vậy mình sẽ khai bào method này nhé.

public function update_product($data, $product_id) {
    $product_name = $data['product_name'];
    $product_price = $data['product_price'];
    $query = "UPDATE product SET product_name='$product_name',product_price='$product_price' WHERE product_id=$product_id";
    $result = $this -> Database -> update($query);
    header('location:' . 'product_list.php');
    return $result;
}

Mình có dùng hàm header() để điều hường url về trang product_list.php sau khi edit xong. Nào cùng xem lại file ProductClass.php của chúng ta lúc này

<?php
include_once ($base_url.'\TOPIC3\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;
}
public function get_product($product_id){
    $query = "SELECT * FROM product WHERE product_id='$product_id'";
    $result = $this -> Database -> select($query) -> fetch_assoc();
    return $result;
}
public function update_product($data, $product_id) {
    $product_name = $data['product_name'];
    $product_price = $data['product_price'];
    $query = "UPDATE product SET product_name='$product_name',product_price='$product_price' WHERE product_id=$product_id";
    $result = $this -> Database -> update($query);
    header('location:' . 'product_list.php');
    return $result;
}
}

Bây giờ qua lại file product_edit.php đã hết lỗi rồi nhé! Thực hiện cập nhật thôi nào.

product_edit.php

<?php
$base_url = 'C:\xampp\htdocs';
include_once ($base_url.'\TOPIC3\class\ProductClass.php');
$ProductClass = new ProductClass;
?>
<?php
$product_id = $_GET['product_id'];
if ($_SERVER["REQUEST_METHOD"] == "GET") {
$get_product = $ProductClass -> get_product($product_id);
  }
// var_dump($get_product);
// die();
?>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $product_id = $_GET['product_id'];
    $data = $_POST;
    $update_product = $ProductClass ->update_product($data,$product_id);
  }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Edit Product</title>
</head>
<body>
    <form action="" method="post">
        <input type="text" placeholder="product_name" value="<?php echo $get_product['product_name']  ?>" name="product_name"> <br>
        <input type="text" placeholder="product_price" value="<?php echo $get_product['product_price']  ?>" name="product_price"> <br>
        <button style="cursor: pointer;" type="submit">Edit</button>
    </form>
</body>
</html>

Vậy là xong phần cập nhật dữ liệu. Hẹn gặp các bạn bài viết tiếp theo và nhớ đừng quên để lại ý kiến bên dưới nhé!

 

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