Bài viết gần đây

#1
Cài đặt và khởi tạo dự án AppGini / Dùng AI + m2a_v2.php để thiết ...
Bài viết cuối cùng bởi admin - T04 26, 2026, 10:23 CHIỀU
Dùng AI + m2a_v2.php để thiết kế nhanh ứng dụng AppGini từ file SQL

Chào mọi người,

Mình muốn chia sẻ một cách làm khá nhanh để thiết kế ứng dụng AppGini bằng cách kết hợp AI, MySQL/MariaDB và phiên bản cải tiến của công cụ m2a.php, tạm gọi là m2a_v2.php.

Ý tưởng chính là:

Thay vì tạo từng table, từng field, từng lookup thủ công trong AppGini, ta dùng AI để thiết kế trước database schema chuẩn MySQL/MariaDB. Sau đó import schema vào MySQL, dùng m2a_v2.php đọc cấu trúc database và convert thành file .axp. Cuối cùng mở file .axp bằng AppGini để tiếp tục tinh chỉnh, generate code và deploy ứng dụng.

Cách này đặc biệt hữu ích khi cần dựng nhanh prototype hoặc thiết kế ứng dụng CRUD có nhiều bảng như: quản lý hóa đơn, CRM, ITSM, quản lý kho, quản lý tài sản, quản lý nhân sự, quản lý ticket nội bộ...

Quy trình tổng thể

Quy trình mình đang dùng gồm 6 bước:

  • Dùng AI tạo file SQL theo chuẩn tương thích với m2a_v2.php
  • Import file SQL vào MySQL/MariaDB qua phpMyAdmin trên WampServer
  • Chép file m2a_v2.php vào thư mục: C:\wamp64\www\
  • Mở Chrome và truy cập:  http://localhost/m2a_v2.php
  • Điền thông số kết nối MySQL, chọn database và tải về file .axp
  • Mở file .axp bằng AppGini, kiểm tra lại cấu hình, generate code và deploy ứng dụng

Mô hình hoạt động

Luồng xử lý có thể hiểu đơn giản như sau:

AI Prompt
  ↓
File SQL chuẩn MySQL/MariaDB
  ↓
Import vào MySQL qua phpMyAdmin
  ↓
m2a_v2.php đọc metadata database
  ↓
Sinh file AppGini .axp
  ↓
Mở bằng AppGini
  ↓
Generate code ứng dụng
  ↓
Deploy lên web server

Vì sao nên dùng cách này?

Theo mình, cách này có một số lợi ích rõ ràng:

  • Tốc độ thiết kế database nhanh hơn rất nhiều. Chỉ cần mô tả nghiệp vụ cho AI, sau đó yêu cầu AI tạo schema theo một bộ quy tắc rõ ràng.
  • Cấu trúc database nhất quán hơn. Nếu prompt tốt, AI có thể tạo đầy đủ primary key, foreign key, table comment, column comment, seed data và các bảng lookup cần thiết.
  • Giảm thao tác thủ công trong AppGini. Những việc như tạo bảng, tạo field, đặt caption, nhận diện lookup field có thể được chuẩn bị từ trước ở tầng database.
  • Dễ chuẩn hóa quy trình phát triển nội bộ. Team có thể thống nhất một prompt chuẩn, sau đó dùng lại cho nhiều dự án khác nhau.

ChatGPT Image 22_54_00 26 thg 4, 2026.png

Các bước thực hiện chi tiết

Bước 1: Dùng AI tạo file SQL

Khi làm việc với AI, điểm quan trọng nhất là phải yêu cầu AI tạo SQL theo đúng chuẩn mà m2a_v2.php đọc tốt.

Mình thường dùng prompt dưới đây:

Hãy thiết kế MySQL/MariaDB schema tương thích tốt với tool m2a_v2.php để convert sang AppGini AXP.

Yêu cầu bắt buộc:

1. Chỉ tạo BASE TABLE, không tạo VIEW để import vào AppGini.
  Nếu cần view báo cáo, đặt ở section riêng cuối file và ghi chú không import view vào AppGini.

2. Mỗi bảng phải có primary key rõ ràng:
  - Ưu tiên cột `id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY`
  - Không dùng bảng không có primary key.

3. Dùng InnoDB, utf8mb4:
  ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

4. Tất cả bảng phải có TABLE COMMENT bằng caption người dùng đọc được.
  Ví dụ:
  COMMENT='Hóa đơn'

5. Tất cả cột phải có COLUMN COMMENT bằng caption đẹp để m2a.php dùng làm field caption.
  Ví dụ:
  invoice_number VARCHAR(100) NULL COMMENT 'Số hóa đơn'

6. Foreign key phải khai báo thật bằng CONSTRAINT:
  - Cột FK nên đặt dạng `{entity}_id`
  - Ví dụ `customer_id INT UNSIGNED NULL`
  - Có index cho FK.
  - Có CONSTRAINT FOREIGN KEY (...) REFERENCES parent_table(id)
  - Dùng ON UPDATE CASCADE.
  - Dùng ON DELETE SET NULL cho quan hệ optional, ON DELETE CASCADE cho detail/log child.

7. Bảng lookup/master nên có các cột dễ làm caption:
  - `code` hoặc `{entity}_code`
  - `name` hoặc `{entity}_name`
  - m2a.php sẽ ưu tiên `{base}_name`, `{base}_code`, `name`, `title`, `code`.

8. Kiểu dữ liệu nên map tốt sang AppGini:
  - ID/FK: INT UNSIGNED hoặc BIGINT UNSIGNED
  - Text ngắn: VARCHAR(n)
  - Text dài: TEXT/LONGTEXT
  - Số tiền: DECIMAL(18,2)
  - Tỷ lệ: DECIMAL(8,4)
  - Ngày: DATE
  - Ngày giờ: DATETIME
  - Boolean: TINYINT(1) NOT NULL DEFAULT 0/1
  - File upload: VARCHAR(255) NULL COMMENT 'File ...'
  - JSON nên dùng LONGTEXT, không dùng JSON native nếu muốn AppGini xử lý mượt.

9. Default value:
  - Số có thể dùng DEFAULT 0 hoặc 0.00.
  - DATETIME tạo mới dùng DEFAULT CURRENT_TIMESTAMP.
  - DATETIME cập nhật dùng DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP.
  - Hạn chế default string nếu không thật cần thiết vì AppGini có thể validate default khác MySQL.
  - Nếu cần default string, ghi chú để set trong AppGini sau.

10. Không dùng:
  - composite primary key
  - generated columns
  - trigger bắt buộc
  - stored procedure
  - CHECK phức tạp
  - enum/set nếu có thể thay bằng lookup table
  - view trong danh sách import AppGini

11. Output cần gồm:
  - CREATE DATABASE IF NOT EXISTS ...
  - USE ...
  - SET FOREIGN_KEY_CHECKS = 0
  - DROP VIEW IF EXISTS ... nếu có
  - DROP TABLE IF EXISTS theo thứ tự child trước parent
  - SET FOREIGN_KEY_CHECKS = 1
  - CREATE TABLE parent/master trước
  - INSERT seed data cho lookup/master nếu cần
  - CREATE TABLE transaction/detail sau
  - section optional views ở cuối, ghi chú không import view vào AppGini

Hãy tạo SQL hoàn chỉnh, có comment tiếng Việt cho table/column, tối ưu để m2a.php convert sang AppGini mà ít phải chỉnh tay nhất.

Sau prompt này, mình bổ sung thêm phần mô tả nghiệp vụ. Ví dụ:

Nghiệp vụ cần thiết kế: hệ thống quản lý hóa đơn đầu vào.

Bao gồm:
- Nhà cung cấp
- Hóa đơn
- Dòng hàng hóa/dịch vụ trên hóa đơn
- Thuế suất
- Trạng thái xử lý hóa đơn
- File hóa đơn gốc
- Người duyệt
- Lịch sử xử lý

AI sẽ tạo ra file SQL hoàn chỉnh. Sau đó nên đọc lại nhanh để kiểm tra các điểm quan trọng:

- Có CREATE DATABASE và USE database hay chưa
- Có primary key cho tất cả bảng hay chưa
- Có TABLE COMMENT và COLUMN COMMENT hay chưa
- Foreign key có khai báo bằng CONSTRAINT thật hay chưa
- Có dùng enum, json native, generated column, trigger hoặc view lẫn vào phần import không
- Thứ tự CREATE TABLE có hợp lý không

Bước 2: Import SQL vào MySQL bằng phpMyAdmin

Trên WampServer, mở phpMyAdmin:

http://localhost/phpmyadmin

Sau đó:

Import → chọn file .sql → Go

Nếu SQL đúng, database sẽ được tạo cùng toàn bộ table, field, foreign key và seed data.

Lưu ý: nên import vào một database mới để tránh lẫn với các project khác.

Bước 3: Chép m2a_v2.php vào thư mục web root

Chép file:

m2a_v2.php

vào thư mục:

C:\wamp64\www\

Khi đó đường dẫn truy cập sẽ là:

http://localhost/m2a_v2.php

Bước 4: Mở m2a_v2.php trên Chrome

Mở Chrome và truy cập:

http://localhost/m2a_v2.php

Tại giao diện của tool, nhập thông tin kết nối MySQL, ví dụ:

Host: localhost
Port: 3306
User: root
Password:
Database: tên_database_vừa_import

Với WampServer mặc định, user thường là root và password có thể để trống, tùy cấu hình máy.

Sau khi kết nối thành công, tool sẽ đọc metadata từ database, bao gồm:

- Danh sách table
- Danh sách column
- Kiểu dữ liệu
- Primary key
- Foreign key
- Comment của table
- Comment của column

Sau đó tải về file .axp.

Bước 5: Mở file AXP bằng AppGini

Mở AppGini, chọn:

File → Open

Sau đó chọn file .axp vừa tải về.

Lúc này, các bảng trong MySQL sẽ được chuyển thành table trong AppGini. Nếu SQL được thiết kế tốt, phần lớn caption, field type và lookup relationship sẽ được nhận diện khá ổn.

Tuy nhiên vẫn nên kiểm tra lại các phần sau trong AppGini:

- Caption của table
- Caption của field
- Lookup field
- Parent/children relationship
- Field type cho date, datetime, money, file upload
- Required field
- Default value
- Table permissions
- Detail view layout
- Filters
- Quick search fields

Bước 6: Generate code và deploy

Sau khi kiểm tra project trong AppGini, tiến hành generate code như bình thường:

Generate → chọn thư mục output → OK

Sau đó deploy source code lên web server hoặc chạy trực tiếp trong môi trường local.

Nếu chạy local bằng WampServer, có thể đặt source code generated vào:

C:\wamp64\www\tên_ứng_dụng\

Sau đó truy cập:

http://localhost/tên_ứng_dụng/

Một số kinh nghiệm khi dùng AI để tạo SQL cho AppGini

1. Đừng chỉ yêu cầu AI "tạo database"

Nếu chỉ nói chung chung như:

Tạo database quản lý hóa đơn

thì AI có thể tạo ra schema không tối ưu cho AppGini, ví dụ dùng ENUM, thiếu comment, thiếu foreign key thật, dùng composite key hoặc tạo view lẫn trong file import.

Nên luôn dùng prompt chuẩn và nêu rõ yêu cầu tương thích với m2a_v2.php.

2. Luôn yêu cầu TABLE COMMENT và COLUMN COMMENT

Đây là phần rất quan trọng.

Ví dụ:

CREATE TABLE suppliers (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
  supplier_code VARCHAR(50) NULL COMMENT 'Mã nhà cung cấp',
  supplier_name VARCHAR(255) NOT NULL COMMENT 'Tên nhà cung cấp'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Nhà cung cấp';

Nếu có comment tốt, khi convert sang AppGini sẽ dễ có caption đẹp hơn, giảm việc sửa tay.

3. Ưu tiên lookup table thay vì ENUM

Không nên để AI tạo:

status ENUM('draft', 'approved', 'rejected')

Nên chuyển thành bảng lookup:

CREATE TABLE invoice_statuses (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
  status_code VARCHAR(50) NOT NULL COMMENT 'Mã trạng thái',
  status_name VARCHAR(100) NOT NULL COMMENT 'Tên trạng thái'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Trạng thái hóa đơn';

Sau đó bảng hóa đơn dùng:

status_id INT UNSIGNED NULL COMMENT 'Trạng thái'

Cách này hợp với AppGini hơn vì dễ làm lookup, dễ mở rộng và dễ quản trị dữ liệu danh mục.

4. Cột file upload nên dùng VARCHAR(255)

Ví dụ:

invoice_file VARCHAR(255) NULL COMMENT 'File hóa đơn'

Không nên dùng kiểu BLOB để lưu trực tiếp file nếu muốn xử lý mượt với AppGini. Thực tế nên lưu file trên filesystem và lưu đường dẫn hoặc tên file trong database.

5. JSON nên dùng LONGTEXT

Nếu cần lưu dữ liệu OCR raw, API response hoặc metadata linh hoạt, nên dùng:

ocr_raw_text LONGTEXT NULL COMMENT 'Nội dung OCR gốc'

hoặc:

ai_extract_json LONGTEXT NULL COMMENT 'Kết quả AI trích xuất dạng JSON'

Không nên dùng kiểu JSON native nếu mục tiêu là tương thích tốt với AppGini và dễ chỉnh sửa trên giao diện.

6. Foreign key phải khai báo thật

Nên có đầy đủ index và constraint:

customer_id INT UNSIGNED NULL COMMENT 'Khách hàng',
INDEX idx_invoices_customer_id (customer_id),
CONSTRAINT fk_invoices_customer
  FOREIGN KEY (customer_id) REFERENCES customers(id)
  ON UPDATE CASCADE
  ON DELETE SET NULL

Nếu chỉ đặt tên cột là customer_id nhưng không khai báo foreign key thật, tool convert có thể không đủ thông tin để nhận diện lookup relationship chính xác.

Cấu trúc SQL nên có

Một file SQL tốt nên có cấu trúc như sau:

CREATE DATABASE IF NOT EXISTS app_demo
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

USE app_demo;

SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS invoice_items;
DROP TABLE IF EXISTS invoices;
DROP TABLE IF EXISTS suppliers;
DROP TABLE IF EXISTS invoice_statuses;

SET FOREIGN_KEY_CHECKS = 1;

CREATE TABLE invoice_statuses (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
  status_code VARCHAR(50) NOT NULL COMMENT 'Mã trạng thái',
  status_name VARCHAR(100) NOT NULL COMMENT 'Tên trạng thái'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Trạng thái hóa đơn';

INSERT INTO invoice_statuses (status_code, status_name) VALUES
('draft', 'Nháp'),
('pending', 'Chờ duyệt'),
('approved', 'Đã duyệt'),
('rejected', 'Từ chối');

CREATE TABLE suppliers (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
  supplier_code VARCHAR(50) NULL COMMENT 'Mã nhà cung cấp',
  supplier_name VARCHAR(255) NOT NULL COMMENT 'Tên nhà cung cấp',
  tax_code VARCHAR(50) NULL COMMENT 'Mã số thuế',
  phone VARCHAR(50) NULL COMMENT 'Điện thoại',
  email VARCHAR(255) NULL COMMENT 'Email',
  address TEXT NULL COMMENT 'Địa chỉ'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Nhà cung cấp';

CREATE TABLE invoices (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
  supplier_id INT UNSIGNED NULL COMMENT 'Nhà cung cấp',
  status_id INT UNSIGNED NULL COMMENT 'Trạng thái',
  invoice_number VARCHAR(100) NULL COMMENT 'Số hóa đơn',
  invoice_date DATE NULL COMMENT 'Ngày hóa đơn',
  subtotal DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT 'Tiền trước thuế',
  tax_amount DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT 'Tiền thuế',
  grand_total DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT 'Tổng thanh toán',
  invoice_file VARCHAR(255) NULL COMMENT 'File hóa đơn',
  note TEXT NULL COMMENT 'Ghi chú',
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Ngày tạo',
  updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 'Ngày cập nhật',
  INDEX idx_invoices_supplier_id (supplier_id),
  INDEX idx_invoices_status_id (status_id),
  CONSTRAINT fk_invoices_supplier
    FOREIGN KEY (supplier_id) REFERENCES suppliers(id)
    ON UPDATE CASCADE
    ON DELETE SET NULL,
  CONSTRAINT fk_invoices_status
    FOREIGN KEY (status_id) REFERENCES invoice_statuses(id)
    ON UPDATE CASCADE
    ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Hóa đơn';

CREATE TABLE invoice_items (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
  invoice_id INT UNSIGNED NOT NULL COMMENT 'Hóa đơn',
  item_name VARCHAR(255) NOT NULL COMMENT 'Tên hàng hóa dịch vụ',
  unit_name VARCHAR(50) NULL COMMENT 'Đơn vị tính',
  quantity DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT 'Số lượng',
  unit_price DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT 'Đơn giá',
  line_total DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT 'Thành tiền',
  INDEX idx_invoice_items_invoice_id (invoice_id),
  CONSTRAINT fk_invoice_items_invoice
    FOREIGN KEY (invoice_id) REFERENCES invoices(id)
    ON UPDATE CASCADE
    ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Dòng hóa đơn';

Một số lỗi thường gặp

Lỗi 1: AI tạo bảng không có primary key

AppGini cần primary key rõ ràng. Nên yêu cầu AI luôn dùng:

id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY

Lỗi 2: Thiếu table comment hoặc column comment

Nếu thiếu comment, caption khi đưa vào AppGini có thể không đẹp. Nên bắt buộc AI tạo comment tiếng Việt cho tất cả table và column.

Lỗi 3: Tạo view chung với base table

AppGini chủ yếu làm việc tốt với base table. Nếu cần view báo cáo, nên để ở section riêng cuối file và ghi chú rõ là không import view vào AppGini.

Lỗi 4: Dùng ENUM quá nhiều

ENUM có thể tiện ở MySQL nhưng không linh hoạt khi đưa vào AppGini. Nên chuyển thành lookup table.

Lỗi 5: Foreign key chỉ đặt tên chứ không tạo constraint

Chỉ có customer_id là chưa đủ. Nên có CONSTRAINT FOREIGN KEY thật để tool nhận diện quan hệ.

Kết luận

Cách dùng AI + SQL + m2a_v2.php giúp rút ngắn đáng kể thời gian dựng ứng dụng AppGini.

Theo mình, quy trình này phù hợp nhất cho các tình huống:

- Dựng nhanh prototype
- Thiết kế ứng dụng CRUD nội bộ
- Chuẩn hóa database trước khi đưa vào AppGini
- Tạo các hệ thống quản lý có nhiều bảng liên kết
- Làm bản demo cho khách hàng trong thời gian ngắn

Tuy nhiên, sau khi import vào AppGini, vẫn nên kiểm tra lại kỹ phần lookup, permission, layout, validation và business logic trước khi deploy production.

Nếu cộng đồng quan tâm, mình có thể chia sẻ tiếp:

- Bộ prompt mẫu cho từng loại ứng dụng
- Ví dụ SQL hoàn chỉnh cho CRM, ITSM, quản lý hóa đơn, quản lý kho
- Checklist kiểm tra file .axp sau khi convert
- Cách tối ưu m2a_v2.php để nhận diện caption, lookup và field type tốt hơn

Rất mong nhận được góp ý từ mọi người để quy trình này ngày càng hoàn thiện hơn.
#2
Hooks – Tùy biến logic nghiệp vụ / Các hàm PHP tích hợp sẵn trong...
Bài viết cuối cùng bởi admin - T07 20, 2025, 11:08 SÁNG
Các hàm PHP tích hợp sẵn trong AppGini để phát triển ứng dụng

Chào mọi người, 
Mình đang tìm hiểu về AppGini và thấy nó cung cấp nhiều hàm PHP tích hợp rất hữu ích để làm việc với cơ sở dữ liệu, quản lý người dùng, và tùy chỉnh ứng dụng (đặc biệt khi xây API RESTful). Dưới đây là tóm tắt một số hàm chính, hy vọng hữu ích cho anh em!

1. Hàm cơ sở dữ liệu
  • sql($query, &$eo): Thực thi truy vấn SQL. 
    $query = "SELECT * FROM users WHERE id = 1";
    $result = sql($query, $eo);
    while ($row = db_fetch_assoc($result)) {
        echo $row['username'];
    }
  • sqlValue($query): Lấy giá trị duy nhất từ truy vấn. 
    $username = sqlValue("SELECT username FROM users WHERE id = 1");
    echo $username ? $username : "Không tìm thấy";
  • db_fetch_assoc($result): Lấy hàng dữ liệu dạng mảng liên kết. 
    $result = sql("SELECT * FROM users", $eo);
    while ($row = db_fetch_assoc($result)) {
        echo $row['username'] . " - " . $row['email'];
    }
  • db_insert_id(): Lấy ID của bản ghi vừa thêm. 
    sql("INSERT INTO users (username) VALUES ('john')", $eo);
    echo "ID mới: " . db_insert_id();

2. Hàm quản lý người dùng
  • getMemberInfo(): Lấy thông tin người dùng hiện tại. 
    $memberInfo = getMemberInfo();
    echo $memberInfo ? $memberInfo['username'] : "Chưa đăng nhập";
  • is_allowed($table, $id, $operation): Kiểm tra quyền truy cập. 
    if (is_allowed("users", 1, "edit")) {
        echo "Có quyền chỉnh sửa";
    } else {
        echo "Không có quyền";
    }

3. Hàm xử lý dữ liệu
  • makeSafe($string, $is_array = false): Làm sạch dữ liệu để chống SQL Injection. 
    $input = makeSafe($_POST['username']);
    $query = "SELECT * FROM users WHERE username = '$input'";
  • htmlSpecialChars($string): Ngăn XSS bằng cách mã hóa HTML. 
    $description = htmlSpecialChars($_POST['description']);
    echo $description;

4. Hàm khác
  • getTableList(): Lấy danh sách bảng. 
    $tables = getTableList();
    print_r($tables);
  • sendmail($options): Gửi email. 
    $options = [
        'to' => 'user@example.com',
        'subject' => 'Chào mừng',
        'message' => 'Chào mừng bạn!'
    ];
    sendmail($options);

Ví dụ sử dụng trong API RESTful
Dùng các hàm trên để xây API RESTful cho AppGini: 
require_once('../hooks/config.php');
header('Content-Type: application/json');

if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    $memberInfo = getMemberInfo();
    if (!$memberInfo || !is_allowed("users", null, "view")) {
        http_response_code(403);
        echo json_encode(['error' => 'Access denied']);
        exit;
    }

    $query = "SELECT id, username, email FROM users";
    $result = sql($query, $eo);
    $users = [];
    while ($row = db_fetch_assoc($result)) {
        $users[] = $row;
    }
    http_response_code(200);
    echo json_encode($users);
}

Lưu ý
  • Dùng makeSafe() hoặc sqlValue() để bảo mật.
  • Kiểm tra biến $eo để xử lý lỗi truy vấn.
  • Xem thêm tài liệu tại bigprof.com/appgini.

Anh em có ai biết thêm hàm nào hay hoặc mẹo dùng AppGini không? Chia sẻ với mình nhé! 😄
#3
Cài đặt và khởi tạo dự án AppGini / Cài đặt và cấu hình WAMP Serve...
Bài viết cuối cùng bởi admin - T06 30, 2025, 11:29 CHIỀU
Cài đặt và cấu hình WAMP Server bảo mật, tối ưu cho AppGini


Mục đích:
Hướng dẫn cài đặt WAMP Server chuẩn, tối ưu và an toàn cho môi trường phát triển AppGini nội bộ, hỗ trợ hiển thị danh sách project, cấu hình phpMyAdmin bảo mật và giao diện landing page thân thiện.

index desktop.jpg

index from lan.jpg


1. Tải về các công cụ cần thiết

✔ Visual C++ Redistributable (All-in-One): 
https://www.techpowerup.com/download/visual-c-redistributable-runtime-package-all-in-one/

✔ WAMP Server: 
https://sourceforge.net/projects/wampserver/files/latest/download

✔ Notepad++: 
https://github.com/notepad-plus-plus/notepad-plus-plus/releases


2. Cài đặt WAMP Server

  • Giải nén file Visual-C-Runtimes-All-in-One*.zip, chuột phải vào install_all.bat → chọn Run as administrator.
  • Cài wampserver3.3.7_x64.exe bình thường → chọn "No" khi được hỏi.
  • Sau khi cài xong, khởi động WAMP → đợi icon chuyển màu xanh là OK.
  • Cài đặt Notepad++


3. Cấu hình PHP (file php.ini)

Mở file tại:
C:\wamp64\bin\php\php8.3.14\php.ini

Tìm và sửa các dòng sau:

display_errors = On
post_max_size = 100M
upload_max_filesize = 100M
date.timezone = "Asia/Ho_Chi_Minh"

Tùy chọn này cho phép AppGini upload các file có dung lượng tối đa là 100MB, mỗi lần post tối đa 100MB, múi giờ Việt Nam và không hiển thị lỗi ra trình duyệt web.

4. Cấu hình Apache

✔ Mở file: 
C:\wamp64\bin\apache\apache2.4.62.1\conf\extra\httpd-vhosts.conf

Thay bằng nội dung sau:

<VirtualHost _default_:80>
  ServerName localhost
  DocumentRoot "${INSTALL_DIR}/www"
  DirectoryIndex index.php index.html index.htm

  <Directory />
    Require all denied
    Options None
    AllowOverride None
  </Directory>

  <Directory "${INSTALL_DIR}/www/">
    Options +FollowSymLinks +Indexes
    AllowOverride All
    Require all granted
  </Directory>

  <Directory "${INSTALL_DIR}/apps/phpmyadmin5.2.1/">
    Require local
  </Directory>
</VirtualHost>

✔ Mở file: 
C:\wamp64\bin\apache\apache2.4.62.1\conf\httpd.conf 
Chỉnh sửa:

ServerSignature Off
ServerTokens Prod


5. Đặt mật khẩu cho MySQL root

Mở: WAMP > MySQL > MySQL Console

mysql console.jpg

Khi được hỏi mật khẩu → nhấn Enter (vì mặc định chưa có mật khẩu) 
Sau đó gõ lệnh sau:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword';
FLUSH PRIVILEGES;

Thay "YourStrongPassword" bằng mật khẩu của bạn.
Áp dụng tương tự cho MariaDB nếu dùng.


6. Cấu hình phpMyAdmin (config.inc.php)

Mở file:
C:\wamp64\apps\phpmyadmin5.2.1\config.inc.php

Tìm và sửa (2 lần cho 2 CSDL MySQL và MariaDB):

$cfg['Servers'][$i]['AllowNoPassword'] = false;

Khi truy cập phpMyAdmin sẽ yêu cầu nhập username/password. User là root và mật khẩu mà bạn đã thiết lập ở bước 5.

Link truy cập phpmyadmin: http://localhost/phpmyadmin

7. Tạo giao diện trang chủ App Gallery

  • Xoá toàn bộ nội dung mặc định trong thư mục C:\wamp64\www
  • Tạo file index.php với giao diện đẹp sử dụng Tailwind CSS
  • Tự động liệt kê danh sách project và phân quyền theo IP:
    • Nếu truy cập từ máy cài WAMP → thấy phpMyAdmin + project
    • Nếu truy cập từ LAN → chỉ thấy project

Tải file index.zip trong phần đính kèm > giải nén và chép vào thư mục C:\wamp64\www\


8. Khởi động lại toàn bộ dịch vụ

Vào biểu tượng WAMP ở thanh taskbar → chọn: Restart All Services


9. Lưu ý bảo mật

  • Không để tài khoản root không có mật khẩu.
  • Hạn chế phpMyAdmin chỉ cho truy cập từ localhost.
  • Ẩn thông tin version Apache bằng cách tắt ServerSignature và ServerTokens.
  • Không public WAMP ra internet trừ khi cấu hình firewall/nginx reverse proxy an toàn.


Mọi thắc mắc – góp ý – bổ sung xin gửi vào chủ đề này!
#4
Khu vực Affiliate – Mua bản quyền / MUA BẢN QUYỀN APPGINI CHÍNH HÃ...
Bài viết cuối cùng bởi admin - T06 27, 2025, 09:19 CHIỀU
MUA BẢN QUYỀN APPGINI CHÍNH HÃNG – HỖ TRỢ NGƯỜI DÙNG VIỆT NAM

AppGini.vnsáng kiến độc lập tại Việt Nam với sự hỗ trợ chính thức từ BigProf Software – nhà phát triển AppGini từ năm 2002.

💡 Ưu đãi đặc biệt cho người dùng Việt:
Sử dụng mã giảm giá VIETNAM khi mua bản quyền AppGini để được giảm ngay 15% và đồng hành cùng cộng đồng AppGini Việt Nam.

gia phan mem.jpg

Link mua AppGini Pro:
→ Mua AppGini Pro + 1 năm cập nhật (15% OFF)

Các plugin mở rộng chính hãng (có hỗ trợ giảm giá):

Calendar Plugin – Lập lịch, quản lý sự kiện trực quan
DataTalk Plugin – Giao diện trò chuyện nội bộ theo dữ liệu
Mass Update Plugin – Cập nhật hàng loạt bản ghi tiện lợi
Messages Plugin – Gửi tin nhắn nội bộ giữa người dùng
Search Page Maker Plugin – Tạo trang tìm kiếm nâng cao dễ dàng
Summary Reports Plugin – Tạo báo cáo tổng hợp chuyên nghiệp

Lưu ý:

- Toàn bộ giao dịch được xử lý qua hệ thống thanh toán an toàn của FastSpring.
- Bạn sẽ nhận được key bản quyền và hướng dẫn cài đặt qua email ngay sau khi thanh toán.
- Cộng đồng AppGini Việt Nam luôn sẵn sàng hỗ trợ bạn cài đặt và sử dụng các plugin này.

Cảm ơn bạn đã lựa chọn sử dụng phần mềm bản quyền và ủng hộ cộng đồng phát triển AppGini tại Việt Nam!

Đội ngũ AppGini.vn
#5
Cài đặt và khởi tạo dự án AppGini / Chia sẻ máy ảo Ubuntu tích hợp...
Bài viết cuối cùng bởi admin - T06 25, 2025, 07:54 CHIỀU
Chia sẻ máy ảo Ubuntu tích hợp sẵn AppGini – Sẵn sàng sử dụng

Chào các bạn,

Mình vừa hoàn thiện một bản máy ảo Ubuntu 24.04 Desktop đã được cấu hình sẵn để phục vụ cho việc học và phát triển ứng dụng với AppGini. Máy ảo được đóng gói dưới định dạng .ovf và có thể import dễ dàng bằng VMware Workstation hoặc VMware Player.

Bản này phù hợp cho:
  • Người mới làm quen với AppGini, chưa quen cài môi trường phát triển.
  • Doanh nghiệp muốn triển khai ứng dụng AppGini nội bộ mà không cần cài đặt từ đầu.
  • Đào tạo AppGini tại trường học, trung tâm hoặc nội bộ công ty.
  • Tester hoặc Dev cần môi trường AppGini nhanh chóng để thử nghiệm.

AGVN v2.1-2025-06-25-19-57-30.jpg

AGVN v2.1-2025-06-25-19-59-10.jpg

AGVN v2.1-2025-06-25-20-02-36.jpg

AGVN v2.1-2025-06-25-20-03-12.jpg



Phần mềm đã cài đặt sẵn:

  • Ubuntu 24.04 Desktop (64-bit)
  • WineHQ + PlayOnLinux: để chạy AppGini bản Windows
  • AppGini Free và Pro: chạy qua PlayOnLinux, đã test hoạt động ổn định
  • LibreOffice: Writer, Calc, Impress,... hỗ trợ công việc văn phòng
  • Visual Studio Code: cài sẵn một số extension hữu ích (Prettier, ESLint,...)
  • Nginx + PHP 8.3 + php8.3-fpm: chạy ứng dụng PHP/AppGini
  • MariaDB 10.11: hệ quản trị cơ sở dữ liệu phổ biến, tối ưu cho AppGini
  • phpMyAdmin: cài sẵn, chỉ cho phép truy cập từ localhost
  • Firefox và Chromium: phục vụ kiểm thử giao diện web
  • Anydesk: cài sẵn, phục vụ hỗ trợ từ xa khi cần
  • IBus-Unikey: hỗ trợ gõ tiếng Việt ngay sau khi khởi động máy



Tài khoản mặc định trong máy ảo:
Username: ladmin
Password: appginivn2025



Hướng dẫn sử dụng:

  • Import file .ovf vào VMware Workstation hoặc VMware Player.
  • Chọn chế độ mạng NAT và cấu hình NAT port 80 của VM ra port 8080 trên máy thật (qua Virtual Network Editor).
  • Khởi động máy ảo, đăng nhập vào hệ điều hành bằng tài khoản đã cung cấp.
  • Dùng AppGini để thiết kế ứng dụng → export mã nguồn → chép vào thư mục:
    /var/www/html
  • Truy cập ứng dụng từ trình duyệt trên máy thật:
    http://localhost:8080



Link tải máy ảo: https://drive.google.com/file/d/1qGJ2T4paYewTjW54kQhkLxTqXGQPfU-O/view?usp=sharing
Link tải VMware Workstation 17 : https://drive.google.com/file/d/1ZTIjoNJgEq0zSDNnct0-Yl_Z2LFbqVyn/view?usp=sharing



Ghi chú thêm:

- phpMyAdmin mặc định chỉ truy cập được từ trong VM (localhost), đảm bảo an toàn hơn khi triển khai nội bộ.
- Bộ gõ tiếng Việt đã được bật sẵn (IBus-Unikey). Có thể chuyển giữa tiếng Việt và tiếng Anh.



Mình sẽ tiếp tục cải tiến phiên bản này trong thời gian tới (có thể thêm Docker, script reset app, backup định kỳ,...). 
Nếu bạn có nhu cầu build phiên bản theo yêu cầu riêng hoặc có góp ý gì, vui lòng phản hồi tại topic này.

Thân mến, 
AppGini Việt Nam
#6
AJAX – API – Kết nối nâng cao / Ra mắt API AppGini v1 - Giải p...
Bài viết cuối cùng bởi admin - T06 21, 2025, 10:24 CHIỀU
Tiêu đề: Ra mắt API AppGini v1 - Giải pháp tích hợp ứng dụng di động và hệ thống khác

Chào cộng đồng AppGini Việt Nam,

Mình rất vui được chia sẻ một dự án mà mình đã phát triển nhằm mở rộng khả năng tích hợp của AppGini với các ứng dụng bên ngoài, đặc biệt là ứng dụng di động hoặc các hệ thống khác. Đây là phiên bản API v1, được xây dựng dựa trên PHP, MySQL, và sử dụng JWT (JSON Web Token) để xác thực an toàn.

api_tester.jpg

Mục đích:
API này cung cấp một giao diện RESTful để tương tác với cơ sở dữ liệu AppGini của bạn, bao gồm các chức năng:

Đăng nhập người dùng AppGini và cấp JWT.
Thực hiện các thao tác CRUD (Create, Read, Update, Delete) trên dữ liệu bảng.
Tích hợp hệ thống quyền hạn của AppGini (dựa trên quyền người dùng và nhóm).
Bảo mật bằng API Key và JWT.
Tính năng chính:

Xác thực người dùng:
Sử dụng tên người dùng và mật khẩu AppGini để đăng nhập.
Tạo và trả về JWT để các yêu cầu API sau này được xác thực.
Kiểm tra trạng thái isApprovedisBanned của người dùng.

API Key Bảo mật:
Mỗi yêu cầu đến API api.php đều phải kèm theo một X-API-KEY được định nghĩa trong config.php, cung cấp một lớp bảo mật cơ bản cho ứng dụng của bạn.

Hỗ trợ CRUD:
GET: Lấy dữ liệu từ một bảng (có thể lấy tất cả hoặc một bản ghi theo ID). Áp dụng bộ lọc quyền PERM_OWNERPERM_GROUP của AppGini.
POST: Thêm bản ghi mới vào một bảng. Tự động gán owner_memberID nếu cấu hình.
PUT: Cập nhật bản ghi hiện có theo ID.
DELETE: Xóa bản ghi theo ID.

Tích hợp hệ thống quyền hạn AppGini:
API tự động kiểm tra quyền allowInsert, allowView, allowEdit, allowDelete của người dùng hoặc nhóm cho từng bảng dựa trên các bảng membership_userpermissionsmembership_grouppermissions.
Lọc dữ liệu GET và kiểm tra quyền CRUD dựa trên PERM_ALL, PERM_GROUP, PERM_OWNER.

Cấu hình linh hoạt:
Dễ dàng cấu hình thông tin cơ sở dữ liệu, JWT Secret Key, thời gian hết hạn token và API Key trong file config.php.

Cấu trúc thư mục và cài đặt:

Để sử dụng API này, bạn cần tạo một thư mục mới trong thư mục gốc của dự án AppGini của mình (ví dụ: your-appgini-project/api/v1/) và sao chép tất cả các file sau vào đó:

your-appgini-project/
├── admin/
├── images/
├── hooks/
├── api/v1/
│   ├── api.php
│   ├── auth.php
│   ├── config.php
│   ├── db_connection.php
│   ├── login.php
│   └── permissions.php
└── ... (các file AppGini khác)

Các file chính và chức năng:

config.php: Chứa các hằng số cấu hình quan trọng như thông tin kết nối DB, JWT_SECRET_KEY, API_KEY, và các tên bảng/mã quyền của AppGini. Quan trọng: Hãy thay đổi các giá trị mặc định cho DB_PASSWORD, JWT_SECRET_KEY, và API_KEY thành các chuỗi mạnh và duy nhất của bạn!

db_connection.php: Xử lý việc kết nối đến cơ sở dữ liệu MySQL và cung cấp các hàm tiện ích như respondWithError()decodeJwt(). Lưu ý: Hàm decodeJwt() là một triển khai JWT cơ bản và không bao gồm đầy đủ các bước xác minh chữ ký. Trong môi trường PRODUCTION, bạn nên sử dụng thư viện JWT của bên thứ ba đáng tin cậy (ví dụ: composer require firebase/php-jwt) để giải mã và xác minh token.

auth.php: Chứa logic xác thực người dùng AppGini (loginUser()) và tạo/giải mã JWT. Nó cũng mô phỏng hàm password_match() của AppGini để kiểm tra mật khẩu.

permissions.php: Xử lý tất cả logic liên quan đến quyền hạn của AppGini. Bao gồm các hàm getUserTablePermissions(), checkPermission(), getOwnershipWhereClause(), và getOwnerFieldName(). Bạn cần tùy chỉnh hàm getOwnerFieldName() để ánh xạ đúng cột ID chủ sở hữu cho các bảng của bạn.

login.php: Endpoint để xử lý yêu cầu đăng nhập, xác thực thông tin người dùng và trả về JWT. Chỉ chấp nhận phương thức POST.

api.php: Endpoint chính cho các yêu cầu CRUD. Nó xác thực X-API-KEY, JWT, kiểm tra quyền của người dùng và thực hiện các thao tác trên cơ sở dữ liệu.

Cách dùng và thử nghiệm:

Bạn có thể dễ dàng kiểm tra API này bằng cách mở file test_api_v1.html trên trình duyệt của mình.

Sao chép test_api_v1.html: Đặt file này ở bất kỳ đâu trên máy tính của bạn (không cần đặt trong thư mục dự án web).
Mở trên trình duyệt: Mở test_api_v1.html bằng trình duyệt Chrome hoặc bất kỳ trình duyệt hiện đại nào.
Cấu hình API:
URL gốc API: Nhập URL mà bạn đã đặt các file API PHP của mình (ví dụ: http://localhost/api/v1).
API Key: Nhập API_KEY mà bạn đã định nghĩa trong file config.php.
Đăng nhập:
Nhập tên người dùng và mật khẩu của một tài khoản AppGini hợp lệ.
Nhấn nút "Đăng nhập". Nếu thành công, bạn sẽ nhận được một JWT.
Gửi yêu cầu API:
Chọn phương thức HTTP (GET, POST, PUT, DELETE).
Nhập tên bảng (ví dụ: members, products).
Nếu là GET/PUT/DELETE một bản ghi cụ thể, nhập "ID bản ghi".
Đối với POST/PUT, nhập JSON body vào textarea.
Nhấn "Gửi yêu cầu". Phản hồi API sẽ hiển thị bên dưới.
Ví dụ về cách test_api_v1.html kết nối đến API:

File test_api_v1.html là một công cụ đơn giản dựa trên JavaScript để gửi các yêu cầu HTTP đến các endpoint login.phpapi.php. Nó sẽ thêm X-API-KEY vào header và Authorization: Bearer <JWT_TOKEN> sau khi bạn đăng nhập thành công.

Lưu ý quan trọng:

Bảo mật: Đây là phiên bản khởi đầu. Để sử dụng trong môi trường production, hãy đảm bảo:
JWT_SECRET_KEYAPI_KEY của bạn là RẤT MẠNH VÀ DUY NHẤT.
Cân nhắc sử dụng HTTPS trên server của bạn để mã hóa tất cả lưu lượng truy cập.
Nâng cấp hàm decodeJwt() để sử dụng thư viện JWT chính thức để xác minh chữ ký đầy đủ.
Thực hiện validation đầu vào nghiêm ngặt hơn cho tất cả dữ liệu nhận được từ người dùng để ngăn chặn các cuộc tấn công SQL Injection hoặc XSS (mặc dù prepared statements đã giảm thiểu SQL Injection).
Mở rộng: Bạn có thể mở rộng API này để hỗ trợ các chức năng phức tạp hơn như tìm kiếm nâng cao, phân trang, sắp xếp, hoặc tích hợp các trường lookup/cha-con của AppGini.
Tùy chỉnh getOwnerFieldName(): Hãy chắc chắn rằng bạn đã cập nhật hàm getOwnerFieldName() trong permissions.php với các tên bảng và cột chủ sở hữu chính xác từ cơ sở dữ liệu AppGini của bạn.
Hy vọng API này sẽ hữu ích cho cộng đồng và là một khởi đầu tốt để tích hợp AppGini với thế giới bên ngoài! Mọi phản hồi và đóng góp đều được hoan nghênh.
#7
Cài đặt và khởi tạo dự án AppGini / Hướng Dẫn Cài Đặt Môi Trường P...
Bài viết cuối cùng bởi admin - T06 08, 2025, 02:27 CHIỀU
Hướng Dẫn Cài Đặt Môi Trường Phát Triển AppGini Fullstack
AppGini là công cụ RAD (Rapid Application Development) giúp bạn tạo ứng dụng web dựa trên MySQL/MariaDB mà không cần viết nhiều mã. Để sử dụng AppGini hiệu quả, bạn cần cài đặt đầy đủ các công cụ sau:


1. Tải và cài đặt AppGini

Truy cập trang chủ: https://bigprof.com/appgini/download

Tải phiên bản mới nhất (file .exe, dung lượng khoảng 20MB). Lưu ý: đây là phiên bản trial.

Chạy file để cài đặt.

Sau khi cài xong, bạn có thể mở AppGini từ Start Menu.

2. Cài đặt WAMP Server (Web server + MySQL + PHP)
AppGini tạo ra mã PHP nên bạn cần môi trường để chạy thử web app:

Truy cập https://www.wampserver.com/en/#download-wrapper

Chọn bản phù hợp hệ điều hành (64-bit thường dùng): Wampserver 64 bits

Yêu cầu đã cài Visual C++ Redistributable (sẽ nói ở bước kế tiếp)

Cài đặt theo mặc định, thư mục sẽ là: C:\wamp64

Sau khi cài xong, bật WAMP => biểu tượng ở taskbar sẽ chuyển sang màu xanh.

3. Cài All-in-One C++ Redistributable
WAMP và một số phần mềm PHP/MySQL cần C++ Redistributable mới nhất.

Tải gói tổng hợp tại: https://www.techpowerup.com/download/visual-c-redistributable-runtime-package-all-in-one/

Giải nén và chạy file install_all.bat dưới quyền Administrator

Sau khi cài xong, bạn có thể cài WAMP mà không gặp lỗi thiếu DLL.

4. Cài đặt Visual Studio Code (VS Code)
Để chỉnh sửa mã PHP, HTML, JS hiệu quả:

Truy cập https://code.visualstudio.com/

Tải và cài bản Windows (User Installer hoặc System Installer đều được)

Cài các extension sau trong VS Code:

PHP Intelephense: hỗ trợ code PHP

Prettier: format code

Live Server: xem file HTML nhanh

SQLTools: kết nối và chạy lệnh SQL nếu cần

5. Cấu hình ban đầu

Tạo thư mục chứa project trong C:\wamp64\www\ten_project

Export project từ AppGini vào thư mục đó

Mở trình duyệt, truy cập: http://localhost/ten_project để chạy ứng dụng

Dùng phpMyAdmin (http://localhost/phpmyadmin) để tạo CSDL nếu cần

6. Gợi ý cấu hình php.ini (nếu cần dùng tính năng nâng cao)

Mở C:\wamp64\bin\php\php8.x.x\php.ini

Bật các dòng sau (xóa dấu ; nếu có):


extension=mysqli
extension=mbstring
extension=pdo_mysql

Kết luận
Với 4 bước cài đặt trên (AppGini + WAMP + Redis + VSCode), bạn đã có một môi trường phát triển đầy đủ để tạo ứng dụng web nội bộ, CRM, quản lý kho, nhân sự,... chỉ trong vài giờ.

Hãy bắt đầu với một dự án mẫu và thực hành từng phần để nắm rõ cách AppGini sinh mã và tùy biến nhé.
#8
Cài đặt và khởi tạo dự án AppGini / Tạo ứng dụng quản lý nhiều ngư...
Bài viết cuối cùng bởi admin - T06 06, 2025, 10:29 CHIỀU
Tạo ứng dụng quản lý nhiều người dùng trong vài phút với AppGini

ChatGPT Image 23_54_20 26 thg 4, 2026.png

Video gốc: Create a Multi-User Business Application In Minutes with AppGini (YouTube)


Trong video hướng dẫn chính thức này, tác giả trình bày cách tạo một ứng dụng quản lý kho hàng (Inventory Management) bằng AppGini chỉ trong vài phút, từ thiết kế đến triển khai và sử dụng thực tế.

1. Mục tiêu chính của ứng dụng mẫu:
Tạo một hệ thống gồm các bảng dữ liệu để:
  • Quản lý sản phẩm
  • Ghi nhận hàng nhập kho
  • Ghi nhận hàng xuất kho
  • Tự động tính tồn kho theo thời gian thực

2. Các bảng dữ liệu và trường chính:

• products: product_name, description, SKU (mã sản phẩm – khóa chính), stock_level (số lượng tồn). 
• stocks_received: SKU (lookup), quantity_received, date_received, person_received. 
• stocks_withdrawn: tương tự bảng nhập kho, nhưng để ghi nhận hàng xuất.

→ Trường stock_level là trường tính toán (calculated field), dùng công thức SQL để tính:
Tồn kho = Tổng số hàng nhập - Tổng số hàng xuất

3. Các tính năng được cấu hình trong AppGini:

  • Thiết lập khóa chính, kiểu dữ liệu, bắt buộc nhập, giới hạn số âm
  • Tự động điền tên người nhập liệu thông qua "created by username"
  • Tạo lookup để liên kết bảng
  • Sử dụng SQL để tính toán tồn kho tự động theo từng SKU

4. Sinh mã nguồn và triển khai ứng dụng:

  • Nhấn "Generate App" để tạo mã nguồn PHP/MySQL
  • Upload ứng dụng lên server bằng uploader tích hợp trong AppGini
  • Cấu hình kết nối FTP và tạo tài khoản admin trên giao diện setup ban đầu
  • Ứng dụng sẵn sàng sử dụng và phân quyền cho nhiều người dùng

5. Nhập liệu và kiểm thử thực tế:

  • Thêm 2 sản phẩm mẫu: Laptop và Smartphone
  • Nhập kho 10 chiếc Laptop → Tồn kho hiển thị: 10
  • Xuất kho 2 chiếc Laptop → Tồn kho cập nhật: 8
  • Cho phép import danh sách sản phẩm qua CSV để tiết kiệm thời gian nhập

6. Chỉnh sửa và cập nhật ứng dụng:

AppGini cho phép bạn cập nhật ứng dụng rất nhanh:

  • Thay đổi theme → chọn giao diện tối (dark theme)
  • Thêm trường "photo" vào bảng sản phẩm để cho phép upload ảnh
  • Generate lại app và chỉ upload những file thay đổi → cập nhật nhanh chóng

7. Kết luận:

Video minh họa rõ ràng cách dùng AppGini để:
  • Tạo ứng dụng web đa người dùng trong vài phút
  • Tự động hóa nghiệp vụ mà không cần viết nhiều code
  • Dễ dàng chỉnh sửa, mở rộng, và tái triển khai

Nếu bạn chưa từng dùng AppGini, đây là video rất nên xem để hiểu tổng quan và bắt đầu tạo ứng dụng đầu tiên của mình.

Liên hệ nếu bạn cần hỗ trợ triển khai hoặc mua bản quyền AppGini tại Việt Nam: support@appgini.vn

– Ban Quản Trị Diễn đàn AppGini Việt Nam
#9
Thông báo – Hướng dẫn diễn đàn / Hướng dẫn các chuyên mục trên ...
Bài viết cuối cùng bởi admin - T06 06, 2025, 10:12 CHIỀU
HƯỚNG DẪN SỬ DỤNG CÁC CHUYÊN MỤC TRÊN DIỄN ĐÀN APPGINI VIỆT NAM

Kính chào Quý thành viên,

Để hỗ trợ việc tìm kiếm, đăng bài và trao đổi thuận tiện hơn, diễn đàn AppGini Việt Nam được tổ chức thành các chuyên mục (category)box nội dung (board) theo từng chủ đề cụ thể. Dưới đây là hướng dẫn sử dụng và định hướng nội dung cho từng chuyên mục chính.

1. Khu vực chung

• Thông báo – Hướng dẫn diễn đàn: 
Nơi Ban Quản Trị cập nhật thông báo mới nhất, nội quy, hướng dẫn sử dụng diễn đàn. Thành viên mới nên đọc kỹ các bài viết tại đây trước khi tham gia thảo luận.

• Giới thiệu AppGini – Hỏi đáp tổng quan: 
Chia sẻ tổng quan về AppGini, các câu hỏi cơ bản, so sánh với các công cụ khác, giới thiệu về cộng đồng AppGini tại Việt Nam.


2. Dành cho người mới bắt đầu

• Cài đặt và khởi tạo dự án AppGini: 
Hướng dẫn tải phần mềm, cài đặt, tạo database, deploy ứng dụng lần đầu.

• Làm quen với cấu trúc AppGini: 
Giới thiệu các file hệ thống AppGini sinh ra, vai trò của từng file, hướng dẫn đọc và chỉnh sửa.

• Hướng dẫn cơ bản bằng tiếng Việt: 
Video, tài liệu, bài viết tiếng Việt dành cho người chưa biết code hoặc mới tiếp cận lập trình.


3. Thảo luận kỹ thuật

• Hooks – Tùy biến logic nghiệp vụ: 
Trao đổi về các hook trong AppGini như _init, _before_insert, _after_update, chia sẻ các đoạn mã mẫu.

• Template – Giao diện & bố cục: 
Thảo luận về chỉnh sửa HTML, CSS, template AppGini, cải thiện UI/UX và responsive layout.

• AJAX – API – Kết nối nâng cao: 
Hỏi – đáp về việc sử dụng AJAX, custom page, gọi API ngoài, JSON, async/await,...

• Tối ưu hiệu năng & bảo mật: 
Kinh nghiệm tối ưu truy vấn SQL, xử lý dữ liệu lớn, kiểm soát quyền truy cập và bảo mật ứng dụng.


4. Tích hợp & Mở rộng

• Kết nối AppGini với hệ thống khác: 
Tích hợp với Odoo, Google Sheets, Email, Zalo, hệ thống ERP/CRM khác.

• Tạo trang riêng & báo cáo tùy chỉnh: 
Tạo file PHP riêng, viết custom SQL, xuất PDF, xây dựng dashboard hoặc biểu đồ.


5. Ứng dụng mẫu & Tài nguyên

• Showcase ứng dụng thực tế: 
Chia sẻ project đã triển khai thành công bằng AppGini, kèm hình ảnh, demo và phân tích nghiệp vụ.

• Kho template mẫu & snippets code: 
Giao diện dựng sẵn, các đoạn mã JS, PHP hữu ích khi lập trình AppGini.

• Tài liệu học lập trình – AppGini: 
Tài nguyên học PHP, SQL, cấu trúc dữ liệu, giúp củng cố kiến thức nền cho việc sử dụng AppGini hiệu quả.


6. Cộng đồng & Cơ hội

• Việc làm & hợp tác freelance: 
Tuyển dụng, tìm đối tác làm dự án AppGini, chia sẻ cơ hội nghề nghiệp.

• Khu vực Affiliate – Mua bản quyền: 
Hướng dẫn mua bản quyền AppGini chính hãng, chương trình giảm giá và hỗ trợ cộng đồng.

• Khu vực tiếng Anh – English Corner: 
Thảo luận kỹ thuật hoặc giao tiếp bằng tiếng Anh chuyên ngành lập trình.


7. Café Dev – Góc thư giãn

• Chuyện nghề & phát triển bản thân: 
Chia sẻ trải nghiệm nghề nghiệp, học tập, kỹ năng mềm và định hướng phát triển lâu dài.

• Góp ý & phản hồi về diễn đàn: 
Góp ý cách vận hành, bố cục diễn đàn, báo lỗi kỹ thuật hoặc đề xuất chuyên mục mới.


8. Thư viện tải về

• Phiên bản AppGini & Công cụ hỗ trợ: 
Link tải AppGini, các tiện ích hỗ trợ phát triển, script kiểm tra lỗi,...

• Video & Slide đào tạo: 
Tổng hợp video hướng dẫn, slide bài giảng, tài liệu đào tạo AppGini tiếng Việt.


Mọi câu hỏi chưa rõ về việc chọn chuyên mục phù hợp, Quý thành viên vui lòng đăng tại Góp ý & phản hồi hoặc liên hệ email support@appgini.vn để được hỗ trợ.

Trân trọng, 
Ban Quản Trị Diễn đàn AppGini Việt Nam
#10
Thông báo – Hướng dẫn diễn đàn / Nội quy diễn đàn AppGini Việt ...
Bài viết cuối cùng bởi admin - T06 06, 2025, 10:04 CHIỀU
NỘI QUY DIỄN ĐÀN APPGINI VIỆT NAM

Áp dụng từ ngày 01/07/2025

Diễn đàn AppGini Việt Nam (appgini.vn) là không gian cộng đồng để trao đổi, học hỏi và phát triển các ứng dụng web sử dụng công cụ AppGini. Để đảm bảo môi trường sinh hoạt tích cực, văn minh và chuyên môn, tất cả thành viên tham gia diễn đàn cần tuân thủ các quy định sau:


I. QUY ĐỊNH CHUNG

1. Tôn trọng lẫn nhau. Không sử dụng ngôn từ xúc phạm, khiêu khích, mỉa mai hoặc gây mất đoàn kết trong cộng đồng.

2. Không đăng tải nội dung vi phạm pháp luật Việt Nam hoặc trái với thuần phong mỹ tục. Bao gồm nhưng không giới hạn: chính trị, tôn giáo, bạo lực, đồi trụy, phát ngôn thù hận.

3. Không spam hoặc quảng cáo trái phép. Bao gồm các bài viết, chữ ký, tin nhắn riêng có nội dung quảng cáo không liên quan đến AppGini hoặc chưa được Ban Quản Trị chấp thuận.

4. Không đăng thông tin sai lệch hoặc gây hiểu nhầm. Khi chia sẻ kiến thức kỹ thuật cần ghi rõ nguồn hoặc nêu rõ đó là quan điểm cá nhân.

5. Không chia sẻ phần mềm vi phạm bản quyền hoặc nội dung crack, bẻ khóa. Diễn đàn chỉ hỗ trợ sử dụng phần mềm AppGini chính hãng hoặc bản trial từ nhà phát triển BigProf.


II. QUY ĐỊNH KHI THAM GIA THẢO LUẬN

1. Tiêu đề bài viết rõ ràng, đúng trọng tâm. Không đặt tiêu đề mơ hồ như "Help", "Gấp lắm rồi", "Lỗi nè",...

2. Nội dung bài viết cần trình bày cụ thể, có ngữ cảnh rõ ràng, nêu rõ vấn đề, mã nguồn liên quan (nếu có).

3. Tìm kiếm trước khi đăng bài mới. Đảm bảo câu hỏi chưa được trả lời hoặc giải đáp ở bài viết khác.

4. Chọn đúng chuyên mục và gắn tag phù hợp. Nhằm giúp quản lý và tìm kiếm dễ dàng hơn cho cả cộng đồng.

5. Không "đào mộ" các bài viết cũ nếu không có giá trị bổ sung. Khi cần, hãy tạo chủ đề mới và dẫn lại link cũ nếu cần tham chiếu.


III. QUY ĐỊNH VỀ THÔNG TIN CÁ NHÂN

1. Không sử dụng tên tài khoản phản cảm hoặc gây hiểu nhầm. Các tài khoản vi phạm có thể bị khóa mà không cần báo trước.

2. Không chia sẻ thông tin cá nhân của người khác khi chưa được sự đồng ý.

3. Tôn trọng quyền riêng tư của thành viên khác. Không khai thác, lưu trữ hoặc sử dụng thông tin của người dùng trái phép.


IV. CHẾ TÀI XỬ LÝ VI PHẠM

1. Tùy theo mức độ vi phạm, thành viên có thể bị:
  • Nhắc nhở công khai hoặc qua tin nhắn riêng
  • Tạm khóa tài khoản từ 1–7 ngày
  • Khóa vĩnh viễn tài khoản và cấm truy cập IP

2. Ban Quản Trị có toàn quyền xử lý mà không cần thông báo trước trong các trường hợp vi phạm nghiêm trọng hoặc tái phạm nhiều lần.


V. KHEN THƯỞNG – ĐÓNG GÓP

1. Diễn đàn luôn hoan nghênh các thành viên:
  • Chia sẻ bài viết chất lượng, hướng dẫn chi tiết
  • Đóng góp tài nguyên, ứng dụng mẫu hoặc công cụ hữu ích
  • Giúp đỡ người dùng mới một cách tận tâm

2. Các thành viên tích cực sẽ được gắn huy hiệu, tăng quyền truy cập, và có thể được mời tham gia ban điều hành nếu phù hợp.


Mọi thắc mắc hoặc góp ý về nội quy, vui lòng liên hệ Ban Quản Trị qua chuyên mục Góp ý & Phản hồi hoặc email: support@appgini.vn

Ban Quản Trị Diễn đàn AppGini Việt Nam