Chương 12: Xây dựng Dự Án Nhỏ – Hệ Thống Quản Lý Công Việc Cơ Bản

Mục tiêu của dự án:

  • Xây dựng một hệ thống quản lý công việc với các chức năng cơ bản như thêm, sửa, xóa, và xem danh sách công việc.
  • Kết hợp các kiến thức đã học trong PHP, MySQL, và HTML/CSS để tạo ứng dụng hoàn chỉnh.

1. Mô tả dự án:

Chức năng chính:

  1. Thêm công việc: Người dùng có thể nhập tiêu đề, mô tả, ngày bắt đầu và hạn hoàn thành của công việc.
  2. Xem danh sách công việc: Hiển thị tất cả công việc đã được thêm với trạng thái “Đã hoàn thành” hoặc “Chưa hoàn thành”.
  3. Chỉnh sửa công việc: Cho phép người dùng cập nhật thông tin công việc.
  4. Xóa công việc: Xóa công việc không cần thiết.
  5. Đánh dấu hoàn thành: Thay đổi trạng thái công việc thành “Đã hoàn thành”.

Công nghệ sử dụng:

  • Backend: PHP (PDO để làm việc với MySQL).
  • Database: MySQL.
  • Frontend: HTML/CSS cơ bản.

2. Thiết kế cơ sở dữ liệu:

Tạo một cơ sở dữ liệu có tên là task_manager và bảng tasks với cấu trúc như sau:

CREATE DATABASE task_manager;

USE task_manager;

CREATE TABLE tasks (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    start_date DATE,
    due_date DATE,
    status ENUM('Chưa hoàn thành', 'Đã hoàn thành') DEFAULT 'Chưa hoàn thành'
);

3. Xây dựng các chức năng chính:

a. Kết nối tới cơ sở dữ liệu

Tạo tệp db.php để xử lý kết nối với MySQL:

<?php
$dsn = "mysql:host=localhost;dbname=task_manager";
$username = "root";
$password = "";

try {
    $conn = new PDO($dsn, $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Kết nối thất bại: " . $e->getMessage());
}
?>

b. Thêm công việc

Tạo tệp add_task.php để hiển thị form thêm công việc và xử lý dữ liệu:

<?php
require 'db.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $title = $_POST['title'];
    $description = $_POST['description'];
    $start_date = $_POST['start_date'];
    $due_date = $_POST['due_date'];

    $sql = "INSERT INTO tasks (title, description, start_date, due_date) VALUES (:title, :description, :start_date, :due_date)";
    $stmt = $conn->prepare($sql);
    $stmt->execute([
        'title' => $title,
        'description' => $description,
        'start_date' => $start_date,
        'due_date' => $due_date
    ]);

    header("Location: index.php");
    exit;
}
?>

<form method="post">
    <label>Tiêu đề:</label>
    <input type="text" name="title" required>

    <label>Mô tả:</label>
    <textarea name="description"></textarea>

    <label>Ngày bắt đầu:</label>
    <input type="date" name="start_date">

    <label>Hạn hoàn thành:</label>
    <input type="date" name="due_date">

    <button type="submit">Thêm Công Việc</button>
</form>

c. Hiển thị danh sách công việc

Tạo tệp index.php để hiển thị danh sách công việc:

<?php
require 'db.php';
$sql = "SELECT * FROM tasks ORDER BY id DESC";
$stmt = $conn->query($sql);
$tasks = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

<h1>Danh Sách Công Việc</h1>
<a href="add_task.php">Thêm Công Việc</a>
<table border="1">
    <tr>
        <th>ID</th>
        <th>Tiêu đề</th>
        <th>Mô tả</th>
        <th>Ngày bắt đầu</th>
        <th>Hạn hoàn thành</th>
        <th>Trạng thái</th>
        <th>Hành động</th>
    </tr>
    <?php foreach ($tasks as $task): ?>
        <tr>
            <td><?= $task['id'] ?></td>
            <td><?= $task['title'] ?></td>
            <td><?= $task['description'] ?></td>
            <td><?= $task['start_date'] ?></td>
            <td><?= $task['due_date'] ?></td>
            <td><?= $task['status'] ?></td>
            <td>
                <a href="edit_task.php?id=<?= $task['id'] ?>">Sửa</a> |
                <a href="delete_task.php?id=<?= $task['id'] ?>" onclick="return confirm('Xóa công việc này?')">Xóa</a> |
                <a href="mark_complete.php?id=<?= $task['id'] ?>">Hoàn thành</a>
            </td>
        </tr>
    <?php endforeach; ?>
</table>

d. Cập nhật công việc

Tạo tệp edit_task.php để sửa thông tin công việc (tương tự add_task.php).

e. Xóa công việc

Tạo tệp delete_task.php để xử lý xóa công việc.

f. Đánh dấu hoàn thành

Tạo tệp mark_complete.php để cập nhật trạng thái công việc thành “Đã hoàn thành”.


4. Bài tập mở rộng:

  1. Thêm chức năng tìm kiếm công việc theo tiêu đề.
  2. Thêm phân trang cho danh sách công việc.
  3. Thêm tính năng lọc công việc theo trạng thái (“Chưa hoàn thành” hoặc “Đã hoàn thành”).

Viết một bình luận