trim($_POST['host'] ?? '127.0.0.1') ?: '127.0.0.1', 'port' => trim($_POST['port'] ?? '3306') ?: '3306', 'dbname' => trim($_POST['dbname'] ?? 'labdb') ?: 'labdb', 'user' => trim($_POST['user'] ?? 'root') ?: 'root', 'pass' => $_POST['pass'] ?? '', ]; file_put_contents($credFile, json_encode($newCreds, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); $configMsg = 'Đã lưu cấu hình kết nối MySQL vào db_credentials.json!'; $configType = 'success'; } } require_once __DIR__ . '/db_config.php'; $dbConnected = false; $dbVersion = ''; $dbError = ''; try { $pdo = getPdoConnection(true); $dbConnected = true; $dbVersion = $pdo->getAttribute(PDO::ATTR_SERVER_VERSION); } catch (Throwable $e) { $dbError = $e->getMessage(); } $labs = [ [ 'id' => 'lab1', 'folder' => 'Lab01_TongQuanPHP', 'title' => 'Chương 1 / Lab 1: Tổng quan về Lập trình Web với PHP', 'badge' => '20 Bài tập', 'color' => 'primary', 'desc' => 'Cú pháp cơ bản, biến, vòng lặp, mảng, hàm, xử lý Form GET/POST, Upload file, Đọc/Ghi file text, Session & Cookie.', 'count' => 20, ], [ 'id' => 'lab2', 'folder' => 'Lab02_OOP', 'title' => 'Chương 2 / Lab 2: Lập trình Hướng đối tượng (OOP) trong PHP', 'badge' => '08 Bài tập', 'color' => 'success', 'desc' => 'Class, Object, Constructor/Destructor, Encapsulation, Kế thừa (Inheritance), Static, Abstract Class, Interface, Namespace & Autoloading.', 'count' => 8, ], [ 'id' => 'lab3', 'folder' => 'Lab03_JS_AJAX', 'title' => 'Chương 2 / Lab 3: Giới thiệu JavaScript và Tương tác với PHP', 'badge' => '12 Bài tập (kèm .sql)', 'color' => 'warning', 'desc' => 'JavaScript cơ bản, DOM Manipulation, Event Handling, Regex Validation, Fetch API / AJAX, JSON, Chat realtime, To-do list, Đăng ký MySQL.', 'count' => 12, ], [ 'id' => 'lab4', 'folder' => 'Lab04_MySQL_PDO', 'title' => 'Chương 3 / Lab 4: Tương tác Cơ sở dữ liệu với MySQL và PDO', 'badge' => '11 Bài tập (kèm .sql)', 'color' => 'info', 'desc' => 'Kết nối PDO, tạo bảng students, CRUD đầy đủ với Prepared Statement chống SQL Injection, Tìm kiếm, Sắp xếp và Phân trang Bootstrap 5.', 'count' => 11, ], [ 'id' => 'lab5', 'folder' => 'Lab05_MySQL_PDO_NangCao', 'title' => 'Chương 3 / Lab 5: MySQL và PDO Nâng cao (Thống kê & Truy vấn)', 'badge' => '12 Bài tập (kèm .sql)', 'color' => 'danger', 'desc' => 'Truy vấn thống kê nâng cao: COUNT, SUM, GROUP BY, HAVING, LEFT JOIN, IS NULL, Subquery, Top sản phẩm bán chạy và khách hàng chi tiêu cao nhất.', 'count' => 12, ], [ 'id' => 'lab6', 'folder' => 'Lab06_Laravel_GioiThieu', 'title' => 'Chương 4 / Lab 6: Laravel Framework - Giới thiệu và Cài đặt', 'badge' => '11 Bài tập (Laravel + .sql)', 'color' => 'dark', 'desc' => 'Khởi tạo Laravel, Route cơ bản (/hello, /time, /sum), StudentController, Blade Layout/Directive/Component (, ), Migration, Factory, Seeder, Eloquent ORM & PHPUnit Test.', 'count' => 11, ], [ 'id' => 'lab7', 'folder' => 'Lab07_Laravel_Routing_Blade', 'title' => 'Chương 4 / Lab 7: Laravel - Routing Nâng cao, Controller RESTful, Blade & Form', 'badge' => '09 Bài tập (Laravel + .sql)', 'color' => 'secondary', 'desc' => 'Routing nâng cao (regex, named routes, prefix admin), ArticleController RESTful 7 actions, Blade Layout/@stack/@push, Component (, , ), Form CSRF/PUT/DELETE, Route Model Binding & Breadcrumb động.', 'count' => 9, ], ]; ?> Tổng Hợp Bài Tập Lập Trình PHP (Lab 1 - Lab 7)
PHP 8.3 • OOP • AJAX • MySQL PDO • Laravel

Hệ Thống Bài Tập Lập Trình PHP (Lab 1 – Lab 7)

Tổng hợp 83 bài tập thực hành từ Lab 1 đến Lab 7 trong thư mục document/. Các bài tập sử dụng MySQL đều kèm file .sql ngay trong thư mục bài tập.

Trạng thái MySQL ():
Đã kết nối (MySQL )
Cần kiểm tra mật khẩu MySQL
Cấu hình kết nối MySQL (Dùng chung cho Lab 3 → Lab 7)
Kết nối thành công Chưa kết nối được
Thông báo từ MySQL:
Nếu MySQL trên máy của bạn có đặt mật khẩu cho tài khoản root, hãy nhập mật khẩu vào ô bên dưới và nhấn Lưu.