#tuts: Xây dựng hệ thống quản lý quyên góp, từ thiện bằng PHP và MySQL

build website donation manager system

Giới thiệu

Trong bài này, mình sẽ hướng dẫn các bạn tự xây dựng một hệ thống quản lý số tiền quyên góp, từ thiện đơn giản. Với mục đích hiển thị, quản lý những cá nhân đã tham gia quyên góp, số tiền và các chiến dịch đã kêu gọi.

Hệ thống này chỉ dừng lại ở mức cơ bản nhất liên quan đến phần quản lý quyên góp. Do đó, các bạn có thể sử dụng project này để phát triển tiếp thành các dự án to hơn, nhiều module hơn.

Như các bạn đã biết, để xây dựng được một hệ thống quản lý (quản lý nhân sự, quản lý sản phẩm, quản lý bán hàng….) trong PHP và MySQL từ đầu thì không phải đơn giản. Các bạn phải xây dựng các hàm từ đầu: kết nối cơ sở dữ liệu, rút trích dữ liệu từ các bảng, hiển thị ra giao diện, thêm, sửa, xóa và cập nhật dữ liệu….Trong bài này mình sẽ đơn giản hóa các việc đó bằng cách sử dụng thư viện phpGrid để rút trích dữ liệu và phpChart để hiển thị dữ liệu đã tổng hợp.

Nội dung trong bài mình cũng sẽ đi từ bước phân tích và xây dựng cơ sở dữ liệu đến thiết kế giao diện. Các phần code minh họa đi kèm cũng rất trực quan, bạn có thể tiện theo dõi từng phần. Bài viết được lược dịch từ tác giả Richard – một thành viên của Medium.

Yêu cầu hệ thống

  • PHP 7+
  • MySQL
  • phpGrid
  • phpChart

Để bắt đầu, chúng ta khởi tạo thư mục dự án với các tập tin cơ bản theo cấu trúc như sau:

Xây dựng cơ sở dữ liệu

Đối với hệ thống quản lý quyên góp, từ thiện thì cơ sở dữ liệu của chúng ta đơn giản gồm có 4 đối tượng:

  • Donor – Thông tin của các nhà tài trợ, người quyên góp
  • Donation – Thông tin về số lượng, tiền đã nhận quyên góp từ một chiến dịch cụ thể
  • Campaign – Thông tin về các chiến dịch kêu gọi quyên góp
  • Organization – Tổ chức quản lý các khoản đóng góp

Bảng Donors

Đây là bảng sẽ lưu trữ thông tin của nhà tài trợ, nhà hảo tâm hoặc người đã tham gia quyên góp. Do đó chúng ta sẽ có một số trường thông tin cơ bản như tên, địa chỉ email, số điện thoại, địa chỉ….Trong đó chúng ta cần có thêm trường id để làm khóa chính cho bảng.

Tên trườngKiểu dữ liệu
idnumber (khóa chính)
Nametext
FirstNametext
MiddleNametext
LastNametext
Emailtext
Phonetext
Addresstext
Address_Street_1text
Address_street_2text
Citytext
Statetext
Ziptext
Countrytext
Occupationtext

Bảng Org

Bảng này lưu trữ các thông tin về các tổ chức quản lý các chiến dịch từ thiện, kêu gọi quyên góp. Do đó, bảng này chỉ đơn giản gồm có 2 trường thông tin là khóa và tên tổ chức.

tên trườngKiểu dữ liệu
idnumber
NameText

Bảng Campaigns

Bảng này lưu trữ thông tin về các chiến dịch kêu gọi quyên góp từ cộng đồng. Bảng này sẽ gồm các thông tin: Tên chiến dịch, Mô tả, ngày bắt đầu chiến dịch và tổ chức đứng ra nhận tiền quyên góp.

Tên trườngKiểu dữ liệu
idnumber
CampaignNametext
Descriptiontext
StartDatedatetime
OrgIdLấy từ Id của bảng Org

Bảng Donations

Bảng này lưu trữ thông tin về các sự đóng góp của cộng đồng. Do đó nó sẽ có các trường thông tin: Chiến dịch kêu gọi đóng góp, số lượng tiền đã nhận, ngày tháng đóng góp, ghi chú và thông tin của người đóng góp.

Tên trườngKiểu dữ liệu
idnumber
CampaignIdLấy từ bảng Campaigns
Amountnumber
Datedatetime
Notestext
DonorIDLấy từ bảng Donors

Mô hình dữ liệu quan hệ của hệ thống quản lý quyên góp, từ thiện

Cơ sở dữ liệu của chúng ta chỉ đơn giản như vậy thôi. Ngoài ra, đối với từng dự án hoặc yêu cầu riêng thì các bạn có thể phát triển thêm các module khác: quản lý user, đăng nhập/đăng xuất, quyên góp online….Dưới đây là mô hình quan hệ để các bạn tiện theo dõi.

Donation Manager Database

Theo mô hình quan hệ trên chúng ta thấy, một người có thể quyên góp nhiều lần. Một chiến dịch thì có thể nhận được nhiều lượt quyên góp. Và một tổ chức có thể đứng ra kêu gọi nhiều chiến dịch.

Cài đặt cơ sở dữ liệu

Các bạn có thể tự tay tạo một cơ sở dữ liệu và bốn bảng dữ liệu trong MySQL. Sau đó có thể add thêm một vài thông tin demo cho dự án của chúng ta. Tuy nhiên, nếu ngại tạo từ đầu thì các bạn có thể sử dụng tập tin donation_manager_db.sql. Tập tin này đã có chứa sẵn các script giúp bạn tạo mới cơ sở dữ liệu donation_manager đã có sẵn dữ liệu demo.

Cài đặt phpGrid

Như đã giới thiệu, hệ thống quản lý của chúng ta sẽ phải làm việc với các bảng cơ sở dữ liệu. Các trường thông tin hiển thị ra cho người dùng dưới dạng bảng. Cho nên, để tiện thao tác sau này thì chúng ta sẽ sử dụng thư viện bên ngoài là phpGrid.

phpGrid cung cấp sẵn các thao tác cơ bản như thêm mới, sửa, xóa, cập nhật dữ liệu. Người dùng không cần phải viết code xử lý nhiều. Và đặc biệt là nó nhanh hơn cách chúng ta tự viết nhiều.

Để cài đặt phpGrid chúng ta làm theo 3 bước sau:

  • Download phpGrid và giải nén thư mục vừa download về
  • Upload thư mục phpGrid vào thư mục project
  • Cấu hình tập tin conf.php

Các bạn mở tập tin conf.php ra và cấu hình các thông tin sau:

Thiết kế giao diện

Về mặt giao diện, project này cũng chỉ đưa ra một giao diện đơn giản gồm một menu trên cùng và bảng cơ sở dữ liệu. Trong phần bảng cơ sở dữ liệu, chúng ta sẽ sử dụng phpChart để thao tác với biểu đồ.

UI design of Donations manager system
Giao diện của hệ thống quản lý quyên góp

Nếu cần thêm tính năng thì tùy vào khả năng thiết kế và yêu cầu từ project của các bạn nhé. Do đó, trong bài này mình sẽ không đi sâu vào vấn đề giao diện nhé.

Để tiện làm việc và phát triển thêm sau này. Khung giao diện của chúng ta sẽ thiết kế làm 3 tập tin gồm:

  • head.php – Phần đầu của trang web. Có thể dùng để thêm logo, slogan…
  • menu.php – chứa thông tin về menu của trang web
  • footer.php – Phần chân trang web. Có thể thêm các thông tin về chủ nhân trang web, các liên kết trang web, thẻ tag…

Tập tin head.php

Tập tin menu.php

Tập tin footer.php

Còn phần nội dung của trang web chúng ta sẽ chứa trong 4 tập tin gồm.

  • campaigns.php
  • donations.php
  • donors.php
  • reports.php

Bốn trang trên sẽ sử dụng chung một mẫu như sau:

Thanh menu

Menu của hệ thống quản lý quyên góp, từ thiện của chúng ta sẽ gồm có bốn items. Mỗi items sẽ đại diện cho một bảng cơ sở dữ liệu mà chúng ta vừa tạo ở bên trên.

menu of Donations Manager system

Lập trình hệ thống quản lý quyên góp, từ thiện bằng PHP

Trang quản lý quyên góp – donations.php

Đầu tiên là trang quản lý quyên góp, từ thiện. Trang này sẽ hiển thị tất cả thông tin được trích từ bảng Donations.

Để trích xuất dữ liệu từ MySQL ra datagrid chúng ta sử dụng lệnh phpGrid như sau:

Trong đó:

Rất đơn giản phải không? Bạn có thể tham khảo thêm cách thức làm việc cơ bản của datagrid.

Đối với các bạn chưa quen sử dụng phpGrid thì có thể thấy lạ. Theo các truyền thống trong PHP & MySQL, muốn lấy tất cả bản ghi ta sử dụng:

Sau khi xong thì kết quả chúng ta sẽ nhìn như thế này:

Donations page

Vậy là các bạn có thể tự so sánh hiệu quả khi dùng phpGrid so với tự code trong việc hiện thị dữ liệu dạng datagrid rồi nhé.

Đối với kết quả trên, chúng ta cần có một vài tùy chỉnh để bảng dữ liệu của chúng ta trông đẹp hơn. Đầu tiên, chúng ta không cần phải hiển thị cột id ra làm gì. Do đó chúng ta có thể sử dụng phương thức set_col_hidden().

Tiếp theo, cột Amount chúng ta cần hiển thị dạng tiền tệ. Vậy chúng ta có thể định dạng bằng phương thức set_col_currency().

Mặt khác, chúng ta cũng muốn bảng dữ liệu có các tiêu đề cột hiển thị thân thiện cho người dùng hơn. Chúng ta có thể dễ dàng đổi tên cột bằng phương thức set_col_edittype().

Nếu chúng ta muốn edit trực tiếp trong datagrid thì có thể sử dụng đoạn lệnh sau:

Vậy code hoàn chỉnh sẽ nhìn như thế này:

Và kết quả sau một loạt các thay đổi trên sẽ thành thế này:

Donations page

Trang quản lý người quyên góp – Donors.php

Trang này chứa thông tin những người đã tham gia quyên góp trên hệ thống. Như đã phân tích ở trên, một người có thể tham gia quyên góp cho một chiến dịch nhiều lần. Do đó, trong trang này cần phải hiển thị tổng số tiền mà cá nhân đó đã từng đóng góp. Để đơn giản, chúng ta sử dụng INNER JOIN trong SQL để nối hai bảng Donations và bảng Donors theo email.

Khi đó, đoạn mã để trích xuất thông tin từ cơ sở dữ liệu sử dụng phpGrid như sau:

Khi đó, kết quả chúng ta sẽ được như này:

Donors page

Tương tự như phần trên, chúng ta có thể định dạng kết quả hiện thị từ các cột cho dễ nhìn.

Donors page

Ngoài ra, nếu các bạn muốn hiển thị chi tiết từng lần người quyên góp đã tham gia đóng góp bao nhiêu tiền thì có sử dụng tính năng phpGrid master details. Tính năng này cho phép hiển thị chi tiết từng lần tham gia quyên góp với số tiền đã đóng của từng người khi chúng ta kích vào từng bản ghi. Để đơn giản, chúng ta sẽ tạo thêm một đối tượng C_Datagrid mới lấy thông tin từ bảng donations

Và gán nó thành masterdetail như sau:

Vậy đoạn code hoàn chỉnh sẽ trông như thế này:

Trang quản lý chiến dịch – campaigns.php

Tương tự như trang quản lý thông tin người tham gia đóng góp. Trang này sẽ hiển thị ra danh sách các chiến dịch trên hệ thống. Tương tự như donors.php, chúng ta cũng có thể xây dựng master detail cho bảng dữ liệu.

Ở đây, chúng ta vẫn sử dụng INNER JOIN để tính toán tổng số tiền mà chiến dịch đó đã kêu gọi đóng góp thành công. Ngoài ra, chúng ta cũng cần đếm xem đã có bao nhiêu người tham gia đóng góp.

Các bạn cũng có thể sử dụng các phương thức cài đặt bảng dữ liệu giống như hai trang trên để làm cho dữ liệu hiển thị đẹp hơn. Ngoài ra, trong trang này chúng ta cũng kích hoạt khả năng tìm kiếm bằng phương thức enable_global_search(). Chúng ta cũng sử dụng Master detail để giúp người dùng kiểm tra xem chi tiết một chiến dịch đã có những người nào tham gia đóng góp.

Download code Donations Manager System with PHP and MySQL

Dưới đây là đoạn code hoàn chỉnh của toàn bộ hệ thống đã xây dựng bên trên. Các bạn có thể tự mình xây dựng theo bài viết. Hoặc download code Donations Manager System bằng PHP và MySQLvề tham khảo theo link dưới đây:

Chúc các bạn thành công!

Nguyễn Trung Hiếu

Một blogger ... cùi bắp! Đơn giản: tôi muốn ghi lại những gì xảy ra xung quanh, cả công việc lẫn cuộc sống và chia sẻ với các bạn đọc. Nếu bạn cảm thấy bài viết có nhiều điểm không chính xác, hãy comment và chia sẻ để tôi còn được học hỏi từ những góp ý của bạn. Email: hieunt.dcn@gmail.com