Nền tảng Kiến thức - Hành trang tới Tương lai
Card image

Chương 10-Bài 13. Tạo trang Bảng tin (Dashboard)

Tác giả: Dương Nguyễn Phú Cường #8758
Ngày đăng: Hồi xưa đó
Lượt xem: 350

Xem thêm bài về Kỹ thuật tải (load) lại một phần của trang Web AJAX: https://nentang.vn/app/edu/khoa-hoc/thiet-ke-lap-trinh-web-backend/lap-trinh-can-ban-php/lessons/ajax-la-gi-ky-thuat-su-dung-ajax-voi-jquery


Để tạo báo cáo với biểu đồ trực quan, chúng ta sẽ sử dụng thư viện rất mạnh về biểu đồ là ChartJS

Step 1: download thư viện và tích hợp vào dự án

ChartJS

assets
├───vendor
│   └───Chart.jS
│       │       * -> các file css, js của thư viện Chart.JS

Step 2: tạo trang Bảng tin (Dashboard)

  • Tạo file /backend/pages/dashboard.php để xử lý logic/nghiệp vụ hiển thị thống kê nhanh Hệ thống.
  • Workflow sử dụng AJAX để load thông tin Tổng Số lượng Mặt hàng:
  • Nội dung file:
<?php
// hàm `session_id()` sẽ trả về giá trị SESSION_ID (tên file session do Web Server tự động tạo)
// - Nếu trả về Rỗng hoặc NULL => chưa có file Session tồn tại
if (session_id() === '') {
  // Yêu cầu Web Server tạo file Session để lưu trữ giá trị tương ứng với CLIENT (Web Browser đang gởi Request)
  session_start();
}
?>

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>NenTang.vn</title>

  <!-- Nhúng file Quản lý các Liên kết CSS dùng chung cho toàn bộ trang web -->
  <?php include_once(__DIR__ . '/../layouts/styles.php'); ?>
</head>

<body class="d-flex flex-column h-100">
  <!-- header -->
  <?php include_once(__DIR__ . '/../layouts/partials/header.php'); ?>
  <!-- end header -->

  <div class="container-fluid">
    <div class="row">
      <!-- sidebar -->
      <?php include_once(__DIR__ . '/../layouts/partials/sidebar.php'); ?>
      <!-- end sidebar -->

      <main role="main" class="col-md-10 ml-sm-auto px-4 mb-2">
        <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
          <h1 class="h2">Bảng tin DASHBOARD</h1>
        </div>

        <!-- Block content -->
        <div class="container-fluid">
          <div class="row">
            <div class="col-sm-6 col-lg-3">
              <div class="card text-white bg-primary mb-2">
                <div class="card-body pb-0">
                  <div class="text-value" id="baocaoSanPham_SoLuong">
                    <h1>0</h1>
                  </div>
                  <div>Tổng số mặt hàng</div>
                </div>
              </div>
              <button class="btn btn-primary btn-sm form-control" id="refreshBaoCaoSanPham">Refresh dữ liệu</button>
            </div> <!-- Tổng số mặt hàng -->
            <div class="col-sm-6 col-lg-3">
              <div class="card text-white bg-success mb-2">
                <div class="card-body pb-0">
                  <div class="text-value" id="baocaoKhachHang_SoLuong">
                    <h1>0</h1>
                  </div>
                  <div>Tổng số khách hàng</div>
                </div>
              </div>
              <button class="btn btn-success btn-sm form-control" id="refreshBaoCaoKhachHang">Refresh dữ liệu</button>
            </div> <!-- Tổng số khách hàng -->
            <div class="col-sm-6 col-lg-3">
              <div class="card text-white bg-warning mb-2">
                <div class="card-body pb-0">
                  <div class="text-value" id="baocaoDonHang_SoLuong">
                    <h1>0</h1>
                  </div>
                  <div>Tổng số đơn hàng</div>
                </div>
              </div>
              <button class="btn btn-warning btn-sm form-control" id="refreshBaoCaoDonHang">Refresh dữ liệu</button>
            </div> <!-- Tổng số đơn hàng -->
            <div class="col-sm-6 col-lg-3">
              <div class="card text-white bg-danger mb-2">
                <div class="card-body pb-0">
                  <div class="text-value" id="baocaoGopY_SoLuong">
                    <h1>0</h1>
                  </div>
                  <div>Tổng số góp ý</div>
                </div>
              </div>
              <button class="btn btn-danger btn-sm form-control" id="refreshBaoCaoGopY">Refresh dữ liệu</button>
            </div> <!-- Tổng số góp ý -->
            <div id="ketqua"></div>
          </div><!-- row -->
          <div class="row">
            <!-- Biểu đồ thống kê loại sản phẩm -->
            <div class="col-sm-6 col-lg-6">
              <canvas id="chartOfobjChartThongKeLoaiSanPham"></canvas>
              <button class="btn btn-outline-primary btn-sm form-control" id="refreshThongKeLoaiSanPham">Refresh dữ liệu</button>
            </div><!-- col -->

          </div><!-- row -->
        </div>
        <!-- End block content -->
      </main>
    </div>
  </div>

  <!-- footer -->
  <?php include_once(__DIR__ . '/../layouts/partials/footer.php'); ?>
  <!-- end footer -->

  <!-- Nhúng file quản lý phần SCRIPT JAVASCRIPT -->
  <?php include_once(__DIR__ . '/../layouts/scripts.php'); ?>

  <!-- Các file Javascript sử dụng riêng cho trang này, liên kết tại đây -->
  <!-- Liên kết thư viện ChartJS -->
  <script src="/php/myhand/assets/vendor/Chart.js/Chart.min.js"></script>
  <script>
    $(document).ready(function() {
      // ----------------- Tổng số mặt hàng --------------------------
      function getDuLieuBaoCaoTongSoMatHang() {
        $.ajax('/php/myhand/backend/api/baocao-tongsomathang.php', {
          success: function(data) {
            var dataObj = JSON.parse(data);
            var htmlString = `<h1>${dataObj.SoLuong}</h1>`;
            $('#baocaoSanPham_SoLuong').html(htmlString);
          },
          error: function() {
            var htmlString = `<h1>Không thể xử lý</h1>`;
            $('#baocaoSanPham_SoLuong').html(htmlString);
          }
        });
      }
      $('#refreshBaoCaoSanPham').click(function(event) {
        event.preventDefault();
        getDuLieuBaoCaoTongSoMatHang();
      });

      // ----------------- Tổng số khách hàng --------------------------
      function getDuLieuBaoCaoTongSoKhachHang() {
        $.ajax('/php/myhand/backend/api/baocao-tongsokhachhang.php', {
          success: function(data) {
            var dataObj = JSON.parse(data);
            var htmlString = `<h1>${dataObj.SoLuong}</h1>`;
            $('#baocaoKhachHang_SoLuong').html(htmlString);
          },
          error: function() {
            var htmlString = `<h1>Không thể xử lý</h1>`;
            $('#baocaoKhachHang_SoLuong').html(htmlString);
          }
        });
      }
      $('#refreshBaoCaoKhachHang').click(function(event) {
        event.preventDefault();
        getDuLieuBaoCaoTongSoKhachHang();
      });

      // ----------------- Tổng số đơn hàng --------------------------
      function getDuLieuBaoCaoTongSoDonHang() {
        $.ajax('/php/myhand/backend/api/baocao-tongsodonhang.php', {
          success: function(data) {
            var dataObj = JSON.parse(data);
            var htmlString = `<h1>${dataObj.SoLuong}</h1>`;
            $('#baocaoDonHang_SoLuong').html(htmlString);
          },
          error: function() {
            var htmlString = `<h1>Không thể xử lý</h1>`;
            $('#baocaoDonHang_SoLuong').html(htmlString);
          }
        });
      }
      $('#refreshBaoCaoDonHang').click(function(event) {
        event.preventDefault();
        getDuLieuBaoCaoTongSoDonHang();
      });

      // ----------------- Tổng số Góp ý --------------------------
      function getDuLieuBaoCaoTongSoGopY() {
        $.ajax('/php/myhand/backend/api/baocao-tongsogopy.php', {
          success: function(data) {
            var dataObj = JSON.parse(data);
            var htmlString = `<h1>${dataObj.SoLuong}</h1>`;
            $('#baocaoGopY_SoLuong').html(htmlString);
          },
          error: function() {
            var htmlString = `<h1>Không thể xử lý</h1>`;
            $('#baocaoGopY_SoLuong').html(htmlString);
          }
        });
      }
      $('#refreshBaoCaoGopY').click(function(event) {
        event.preventDefault();
        getDuLieuBaoCaoTongSoGopY();
      });


      // ------------------ Vẽ biểu đồ thống kê Loại sản phẩm -----------------
      // Vẽ biểu đổ Thống kê Loại sản phẩm sử dụng ChartJS
      var $objChartThongKeLoaiSanPham;
      var $chartOfobjChartThongKeLoaiSanPham = document.getElementById("chartOfobjChartThongKeLoaiSanPham").getContext(
        "2d");

      function renderChartThongKeLoaiSanPham() {
        $.ajax({
          url: '/php/myhand/backend/api/baocao-thongkeloaisanpham.php',
          type: "GET",
          success: function(response) {
            var data = JSON.parse(response);
            var myLabels = [];
            var myData = [];
            $(data).each(function() {
              myLabels.push((this.TenLoaiSanPham));
              myData.push(this.SoLuong);
            });
            myData.push(0); // tạo dòng số liệu 0
            if (typeof $objChartThongKeLoaiSanPham !== "undefined") {
              $objChartThongKeLoaiSanPham.destroy();
            }
            $objChartThongKeLoaiSanPham = new Chart($chartOfobjChartThongKeLoaiSanPham, {
              // Kiểu biểu đồ muốn vẽ. Các bạn xem thêm trên trang ChartJS
              type: "bar",
              data: {
                labels: myLabels,
                datasets: [{
                  data: myData,
                  borderColor: "#9ad0f5",
                  backgroundColor: "#9ad0f5",
                  borderWidth: 1
                }]
              },
              // Cấu hình dành cho biểu đồ của ChartJS
              options: {
                legend: {
                  display: false
                },
                title: {
                  display: true,
                  text: "Thống kê Loại sản phẩm"
                },
                responsive: true
              }
            });
          }
        });
      };
      $('#refreshThongKeLoaiSanPham').click(function(event) {
        event.preventDefault();
        renderChartThongKeLoaiSanPham();
      });

      // Mới mở web (khi trang web load xong)
      // thì sẽ gọi lập tức một số hàm AJAX gọi API lấy dữ liệu
      getDuLieuBaoCaoTongSoMatHang();
      getDuLieuBaoCaoTongSoKhachHang();
      getDuLieuBaoCaoTongSoDonHang();
      getDuLieuBaoCaoTongSoGopY();
      renderChartThongKeLoaiSanPham();

    });
  </script>
</body>

</html>
   

Chương trình học


  1. Bức tranh tổng thể về Lập trình WEB 1
    1. Sơ đồ vận hành của một Website #1311
  2. Cài đặt môi trường Lập trình PHP 1
    1. Các chương trình cần thiết để Lập trình Web #8136
  3. PHP căn bản 6
    1. PHP là gì? Viết chương trình PHP đầu tiên #1237
    2. Các kiểu dữ liệu (data types), biến (variables), hằng số (constant), toán tử (operators) trong ngôn ngữ lập trình PHP #1242
    3. Bài tập Kiểm tra cú pháp PHP #1285
    4. Trình diễn (render) dữ liệu Đơn giản ra giao diện (HTML, CSS, JS) sử dụng PHP #8696
    5. Trình diễn (render) dữ liệu Danh sách Array ra giao diện (HTML, CSS, JS) sử dụng PHP #9564
    6. Bài tập trình diện (render) tổng hợp: hiển thị mẫu in Hóa đơn bán hàng Nền tảng #11773
  4. Cấu trúc điều khiển trong PHP
  5. PHP Nâng cao 7
    1. Cookie trong PHP #8071
    2. Session trong PHP #8070
    3. Session và Cookie trong PHP #8073
    4. Phân tách cấu trúc URL với PHP #8778
    5. API là gì? Web API là gì? #8835
    6. AJAX là gì? Kỹ thuật sử dụng AJAX với JQUERY #8846
    7. Xử lý (đọc - ghi) file trong PHP #11799
  6. Bài tập thực hành 3
    1. Xem Thêm Sửa Xóa (CRUD) với CSDL MySQL trong PHP #8049
    2. Bài tập thiết kế OOP trong PHP #10169
    3. Tạo trang hiển thị kết quả thi kết thúc môn WEB #11793
  7. Thực hiện Dự án PHP thực tế mẫu - sử dụng PHP thuần 3
    1. Sơ đồ vận hành của trang Web sử dụng PHP #7888
    2. Khởi tạo cấu trúc thư mục dự án PHP #1358
    3. Tích hợp Composer vào dự án PHP #8138
  8. Thu thập và Xử lý dữ liệu từ Client đến Server trong PHP 3
    1. Thu thập và Xử lý dữ liệu bằng Yêu cầu GET (Request GET) trong PHP #8704
    2. Thu thập và Xử lý dữ liệu bằng Yêu cầu POST (Request POST) trong PHP #8705
    3. Bài tập tạo Form Tìm kiếm Thu thập và Xử lý dữ liệu bằng Yêu cầu GET (Request GET) trong PHP #8717
  9. Thao tác với Cơ sở dữ liệu MySQL 9
    1. Quy trình (workflow) xử lý thao tác với cơ sở dữ liệu MySQL trong PHP #9623
    2. Tạo kết nối đến CSDL MySQL trong PHP #8116
    3. Thực thi câu lệnh INSERT trong PHP #8118
    4. Thực thi câu lệnh UPDATE trong PHP #8120
    5. Thực thi câu lệnh DELETE trong PHP #8122
    6. Thực thi câu lệnh SELECT trong PHP #8124
    7. Thực thi câu lệnh INSERT với FORM trong PHP #8126
    8. Thực thi câu lệnh DELETE với FORM trong PHP #8130
    9. Thực thi câu lệnh UPDATE với FORM trong PHP #8133
  10. Dự án thực tế mẫu (PHP thuần) - Trang web bán hàng trực tuyến - Thiết kế Backend 17
    1. Khái niệm về bố cục (layouts) trong thiết kế giao diện Web / App #10538
    2. Thiết kế bố cục (layouts) cho giao diện Backend sử dụng PHP thuần #8740
    3. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) cho danh mục Phẳng - Index #8748
    4. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) cho danh mục Phẳng - Create #9291
    5. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) cho danh mục Phẳng - Delete #9293
    6. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) cho danh mục Phẳng - Edit #9292
    7. Ràng buộc dữ liệu (validation) #8761
    8. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) cho danh mục cho Liên kết Khóa ngoại #8781
    9. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) upload hình Sản phẩm (upload đơn, mỗi lần 1 file) #8799
    10. Tạo trang Đăng nhập trong Backend #8823
    11. Tạo trang Đăng xuất trong Backend #8826
    12. Tạo Web API lấy dữ liệu báo cáo thống kê #8834
    13. Tạo trang Bảng tin (Dashboard) #8758
    14. Tạo chức năng Quản lý Đơn hàng dạng Master Detail (lưu một dòng cha và nhiều dòng con) - Index #8856
    15. Tạo chức năng Quản lý Đơn hàng dạng Master Detail (lưu một dòng cha và nhiều dòng con) - In ấn Print #8858
    16. Tạo chức năng Quản lý Đơn hàng dạng Master Detail (lưu một dòng cha và nhiều dòng con) - Xóa Delete #8862
    17. Tạo chức năng Quản lý Đơn hàng dạng Master Detail (lưu một dòng cha và nhiều dòng con) - Thêm mới Create #8861
  11. Dự án thực tế mẫu (PHP thuần) - Trang web bán hàng trực tuyến - Thiết kế Frontend 7
    1. Thiết kế bố cục (layouts) cho giao diện Frontend sử dụng PHP thuần #8868
    2. Thực hiện Trang chủ Frontend #8873
    3. Thực hiện Trang Giới thiệu About #8876
    4. Thực hiện Trang Liên hệ Contact (Có gởi mail Thông báo) #8879
    5. Thực hiện Trang Chi tiết Sản phẩm Product Detail #8944
    6. Thực hiện Trang Giỏ hàng Cart #8978
    7. Thực hiện Trang Thanh toán #9049
  12. Bảo mật Trang web PHP 2
    1. Cách hacker tấn công vào Hệ thống bằng cách sử dụng SQL Injection và Cách phòng chống của Quản trị Trang web #9063
    2. Cách hacker chèn các đoạn mã độc vào Hệ thống bằng cách sử dụng XSS (Cross site scripting) và Cách phòng chống của Quản trị Trang web #9067
  13. Tài liệu Tham khảo 11
    1. Tài liệu Tham khảo #7933
    2. Cách export (dump) cơ sở dữ liệu MySQL bằng HeidiSQL #8343
    3. Đệ quy đa cấp trong PHP #8495
    4. Tạo bố cục (layout) trang web sử dụng INCLUDE REQUIRE trong PHP #8523
    5. Bài tập tổng hợp - Tạo trang web đọc Truyện Tranh và Tiểu Thuyết Online #9006
    6. Cách triển khai Web lên Hosting free ByetHost #9052
    7. Nguyên nhân và cách xử lý lỗi Warning: Cannot modify header information - headers already sent by #9917
    8. Cách triển khai Web lên Hosting free 000WebHost #9959
    9. Cách tích hợp chứng thực tài khoản bằng Google vào trang web #9973
    10. Source code Tham khảo Learning.NenTang.vn #10394
    11. Database mẫu ví dụ Bán hàng Salomon #11808
  14. Nộp đồ án 1
    1. Hướng dẫn nộp đồ án Khóa Thiết kế Web PHP + MySQL #9224
  15. Thao tác với cơ sở dữ liệu MySQL bằng kỹ thuật AJAX 8
    1. Tạo API cho chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Index #9777
    2. Tạo API cho chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Create #9781
    3. Tạo API cho chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Edit #9783
    4. Tạo API cho chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Delete #9784
    5. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Index #9773
    6. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Create #9774
    7. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Edit #9775
    8. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Delete #9776
  16. Video Live Stream 1
    1. Thiết kế Web Backend PHP & MySQL - Buổi 1 #9964
  17. Lập trình hướng đối tượng OOP (Object Oriented Programming) trong PHP 1
    1. Khái niệm lập trình hướng đối tượng OOP (Object Oriented Programming) trong PHP #11801
Các bài học

Chương trình học

Bao gồm Module, Chương, Bài học, Bài tập, Kiểm tra...

Chương trình học


  1. Bức tranh tổng thể về Lập trình WEB 1
    1. Sơ đồ vận hành của một Website #1311
  2. Cài đặt môi trường Lập trình PHP 1
    1. Các chương trình cần thiết để Lập trình Web #8136
  3. PHP căn bản 6
    1. PHP là gì? Viết chương trình PHP đầu tiên #1237
    2. Các kiểu dữ liệu (data types), biến (variables), hằng số (constant), toán tử (operators) trong ngôn ngữ lập trình PHP #1242
    3. Bài tập Kiểm tra cú pháp PHP #1285
    4. Trình diễn (render) dữ liệu Đơn giản ra giao diện (HTML, CSS, JS) sử dụng PHP #8696
    5. Trình diễn (render) dữ liệu Danh sách Array ra giao diện (HTML, CSS, JS) sử dụng PHP #9564
    6. Bài tập trình diện (render) tổng hợp: hiển thị mẫu in Hóa đơn bán hàng Nền tảng #11773
  4. Cấu trúc điều khiển trong PHP
  5. PHP Nâng cao 7
    1. Cookie trong PHP #8071
    2. Session trong PHP #8070
    3. Session và Cookie trong PHP #8073
    4. Phân tách cấu trúc URL với PHP #8778
    5. API là gì? Web API là gì? #8835
    6. AJAX là gì? Kỹ thuật sử dụng AJAX với JQUERY #8846
    7. Xử lý (đọc - ghi) file trong PHP #11799
  6. Bài tập thực hành 3
    1. Xem Thêm Sửa Xóa (CRUD) với CSDL MySQL trong PHP #8049
    2. Bài tập thiết kế OOP trong PHP #10169
    3. Tạo trang hiển thị kết quả thi kết thúc môn WEB #11793
  7. Thực hiện Dự án PHP thực tế mẫu - sử dụng PHP thuần 3
    1. Sơ đồ vận hành của trang Web sử dụng PHP #7888
    2. Khởi tạo cấu trúc thư mục dự án PHP #1358
    3. Tích hợp Composer vào dự án PHP #8138
  8. Thu thập và Xử lý dữ liệu từ Client đến Server trong PHP 3
    1. Thu thập và Xử lý dữ liệu bằng Yêu cầu GET (Request GET) trong PHP #8704
    2. Thu thập và Xử lý dữ liệu bằng Yêu cầu POST (Request POST) trong PHP #8705
    3. Bài tập tạo Form Tìm kiếm Thu thập và Xử lý dữ liệu bằng Yêu cầu GET (Request GET) trong PHP #8717
  9. Thao tác với Cơ sở dữ liệu MySQL 9
    1. Quy trình (workflow) xử lý thao tác với cơ sở dữ liệu MySQL trong PHP #9623
    2. Tạo kết nối đến CSDL MySQL trong PHP #8116
    3. Thực thi câu lệnh INSERT trong PHP #8118
    4. Thực thi câu lệnh UPDATE trong PHP #8120
    5. Thực thi câu lệnh DELETE trong PHP #8122
    6. Thực thi câu lệnh SELECT trong PHP #8124
    7. Thực thi câu lệnh INSERT với FORM trong PHP #8126
    8. Thực thi câu lệnh DELETE với FORM trong PHP #8130
    9. Thực thi câu lệnh UPDATE với FORM trong PHP #8133
  10. Dự án thực tế mẫu (PHP thuần) - Trang web bán hàng trực tuyến - Thiết kế Backend 17
    1. Khái niệm về bố cục (layouts) trong thiết kế giao diện Web / App #10538
    2. Thiết kế bố cục (layouts) cho giao diện Backend sử dụng PHP thuần #8740
    3. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) cho danh mục Phẳng - Index #8748
    4. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) cho danh mục Phẳng - Create #9291
    5. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) cho danh mục Phẳng - Delete #9293
    6. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) cho danh mục Phẳng - Edit #9292
    7. Ràng buộc dữ liệu (validation) #8761
    8. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) cho danh mục cho Liên kết Khóa ngoại #8781
    9. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) upload hình Sản phẩm (upload đơn, mỗi lần 1 file) #8799
    10. Tạo trang Đăng nhập trong Backend #8823
    11. Tạo trang Đăng xuất trong Backend #8826
    12. Tạo Web API lấy dữ liệu báo cáo thống kê #8834
    13. Tạo trang Bảng tin (Dashboard) #8758
    14. Tạo chức năng Quản lý Đơn hàng dạng Master Detail (lưu một dòng cha và nhiều dòng con) - Index #8856
    15. Tạo chức năng Quản lý Đơn hàng dạng Master Detail (lưu một dòng cha và nhiều dòng con) - In ấn Print #8858
    16. Tạo chức năng Quản lý Đơn hàng dạng Master Detail (lưu một dòng cha và nhiều dòng con) - Xóa Delete #8862
    17. Tạo chức năng Quản lý Đơn hàng dạng Master Detail (lưu một dòng cha và nhiều dòng con) - Thêm mới Create #8861
  11. Dự án thực tế mẫu (PHP thuần) - Trang web bán hàng trực tuyến - Thiết kế Frontend 7
    1. Thiết kế bố cục (layouts) cho giao diện Frontend sử dụng PHP thuần #8868
    2. Thực hiện Trang chủ Frontend #8873
    3. Thực hiện Trang Giới thiệu About #8876
    4. Thực hiện Trang Liên hệ Contact (Có gởi mail Thông báo) #8879
    5. Thực hiện Trang Chi tiết Sản phẩm Product Detail #8944
    6. Thực hiện Trang Giỏ hàng Cart #8978
    7. Thực hiện Trang Thanh toán #9049
  12. Bảo mật Trang web PHP 2
    1. Cách hacker tấn công vào Hệ thống bằng cách sử dụng SQL Injection và Cách phòng chống của Quản trị Trang web #9063
    2. Cách hacker chèn các đoạn mã độc vào Hệ thống bằng cách sử dụng XSS (Cross site scripting) và Cách phòng chống của Quản trị Trang web #9067
  13. Tài liệu Tham khảo 11
    1. Tài liệu Tham khảo #7933
    2. Cách export (dump) cơ sở dữ liệu MySQL bằng HeidiSQL #8343
    3. Đệ quy đa cấp trong PHP #8495
    4. Tạo bố cục (layout) trang web sử dụng INCLUDE REQUIRE trong PHP #8523
    5. Bài tập tổng hợp - Tạo trang web đọc Truyện Tranh và Tiểu Thuyết Online #9006
    6. Cách triển khai Web lên Hosting free ByetHost #9052
    7. Nguyên nhân và cách xử lý lỗi Warning: Cannot modify header information - headers already sent by #9917
    8. Cách triển khai Web lên Hosting free 000WebHost #9959
    9. Cách tích hợp chứng thực tài khoản bằng Google vào trang web #9973
    10. Source code Tham khảo Learning.NenTang.vn #10394
    11. Database mẫu ví dụ Bán hàng Salomon #11808
  14. Nộp đồ án 1
    1. Hướng dẫn nộp đồ án Khóa Thiết kế Web PHP + MySQL #9224
  15. Thao tác với cơ sở dữ liệu MySQL bằng kỹ thuật AJAX 8
    1. Tạo API cho chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Index #9777
    2. Tạo API cho chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Create #9781
    3. Tạo API cho chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Edit #9783
    4. Tạo API cho chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Delete #9784
    5. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Index #9773
    6. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Create #9774
    7. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Edit #9775
    8. Tạo chức năng CRUD (Xem-Read, Thêm-Create, Sửa-Edit, Xóa-Delete) bằng kỹ thuật AJAX cho danh mục Phẳng - Delete #9776
  16. Video Live Stream 1
    1. Thiết kế Web Backend PHP & MySQL - Buổi 1 #9964
  17. Lập trình hướng đối tượng OOP (Object Oriented Programming) trong PHP 1
    1. Khái niệm lập trình hướng đối tượng OOP (Object Oriented Programming) trong PHP #11801

Bài học trước Bài học tiếp theo