Mini Project – Mô phỏng hệ thống liên hệ chuyên nghiệp

jk5587725

By jk5587725

Cập nhật Tháng 9 23, 2025

Đây là bài tổng hợp cực kỳ thú vị trong chương 3. Mục tiêu là bạn có thể áp dụng mọi thứ đã học từ đầu chương vào một project hoàn chỉnh và có cấu trúc rõ ràng.

Chúng ta đã cùng nhau học cách chia nhỏ file, sử dụng biến toàn cục, hằng số, hàm dùng chung, flash message… Giờ là lúc gom hết những mảnh ghép đó thành một hệ thống hoàn chỉnh: Trang liên hệ chuyên nghiệp, có thể tái sử dụng cho mọi website mà bạn xây dựng sau này.


Mục tiêu của mini project

  1. Giao diện trang liên hệ có form điền tên, email, nội dung.
  2. Kiểm tra hợp lệ: Không được bỏ trống, email đúng định dạng.
  3. Gửi thông tin giả lập như thể gửi mail thật.
  4. Hiển thị thông báo (flash message) khi gửi thành công hoặc lỗi.
  5. Tách giao diện header/footer, sử dụng hàm & config như bài trước.

Cấu trúc thư mục

Đây là cách tổ chức file/folder đơn giản và gọn gàng:

contact-project/
│
├── includes/
│   ├── config.php
│   ├── functions.php
│   └── flash.php
│
├── templates/
│   ├── header.php
│   └── footer.php
│
├── contact.php
├── handle-contact.php
└── thanks.php

Bắt đầu setup file

includes/config.php
Chứa các hằng số cấu hình:

<?php
define('SITE_NAME', 'Liên hệ với chúng tôi');
define('ADMIN_EMAIL', 'admin@example.com'); // địa chỉ giả lập

includes/functions.php

<?php
function is_valid_email($email) {
    return filter_var($email, FILTER_VALIDATE_EMAIL);
}

includes/flash.php
Như bài 27:

<?php
session_start();
function set_flash($message, $type = 'success') {
    $_SESSION['flash'] = compact('message', 'type');
}

function show_flash() {
    if (!empty($_SESSION['flash'])) {
        $f = $_SESSION['flash'];
        echo "<div class='{$f['type']}'>{$f['message']}</div>";
        unset($_SESSION['flash']);
    }
}

Giao diện chính: contact.php

<?php
include 'includes/config.php';
include 'includes/functions.php';
include 'includes/flash.php';
include 'templates/header.php';
?>

<h2>Liên hệ với chúng tôi</h2>
<?php show_flash(); ?>

<form action="handle-contact.php" method="POST">
    <label>Tên của bạn:</label><br>
    <input type="text" name="name"><br><br>

    <label>Email:</label><br>
    <input type="text" name="email"><br><br>

    <label>Nội dung:</label><br>
    <textarea name="message"></textarea><br><br>

    <button type="submit">Gửi liên hệ</button>
</form>

<?php include 'templates/footer.php'; ?>

Xử lý form: handle-contact.php

<?php
include 'includes/functions.php';
include 'includes/flash.php';

$name = trim($_POST['name']);
$email = trim($_POST['email']);
$message = trim($_POST['message']);

if (!$name || !$email || !$message) {
    set_flash("Vui lòng điền đầy đủ thông tin", "error");
    header("Location: contact.php");
    exit;
}

if (!is_valid_email($email)) {
    set_flash("Email không hợp lệ", "error");
    header("Location: contact.php");
    exit;
}

// Giả lập gửi mail – ghi log hoặc in ra màn hình
file_put_contents('contact-log.txt', "$name <$email>: $message\n", FILE_APPEND);

set_flash("Cảm ơn bạn đã liên hệ, chúng tôi sẽ phản hồi sớm!", "success");
header("Location: thanks.php");
exit;

Trang cảm ơn: thanks.php

<?php
include 'templates/header.php';
include 'includes/flash.php';
show_flash();
?>

<h3>Thông điệp của bạn đã được gửi đi!</h3>
<p>Chúng tôi rất trân trọng phản hồi từ bạn.</p>

<a href="contact.php">Gửi lại</a>

<?php include 'templates/footer.php'; ?>

Tách phần giao diện: templates/header.php

<!DOCTYPE html>
<html>
<head>
  <title><?= SITE_NAME ?></title>
  <style>
    body { font-family: sans-serif; max-width: 600px; margin: auto; }
    .error { color: red; }
    .success { color: green; }
  </style>
</head>
<body>

footer.php:

</body>
</html>

Kết luận

Mini project này giúp bạn rèn kỹ năng:

  • Tổ chức file có cấu trúc rõ ràng
  • Xử lý form, kiểm tra dữ liệu
  • Sử dụng flash message để phản hồi người dùng
  • Mô phỏng gửi mail thực tế

Bạn hoàn toàn có thể mở rộng project này thành một hệ thống liên hệ thực sự – chỉ cần thêm chức năng gửi email thật bằng mail() hoặc dùng thư viện như PHPMailer. Còn giờ thì hãy tự tay code lại từ đầu một lần để ghi nhớ nhé!

Thảo luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Đăng ký nhận tin mới

Nhận bài học, tài nguyên và cơ hội việc làm qua email hàng tuần.

[global_subscribe_form]

Chúng tôi cam kết không spam. Bạn có thể hủy bất cứ lúc nào.