Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Cách xử lý upload file ảnh và lưu tên file vào DB
Hướng Dẫn Đồ ÁnLập Trình Web

Cách xử lý upload file ảnh và lưu tên file vào DB

Chia sẻ
Chia sẻ

Trong quá trình xây dựng các hệ thống quản lý như blog, hồ sơ người dùng hay trang thương mại điện tử, việc cho phép người dùng upload ảnh là chức năng không thể thiếu. Từ ảnh đại diện, ảnh bài viết đến ảnh sản phẩm – tất cả đều cần được xử lý chính xác, an toàn và hiệu quả. Đây là kỹ năng quan trọng mà bất kỳ lập trình viên PHP nào cũng cần nắm vững.

Để xây dựng hệ thống upload ảnh hoàn chỉnh, bạn nên có nền tảng về kết nối MySQL bằng PDO hoặc so sánh MySQLi và PDO để lựa chọn giải pháp lưu trữ dữ liệu phù hợp. Nếu bạn đang làm chức năng quản lý người dùng, đừng quên tham khảo thêm các bài như giữ đăng nhập bằng Session trong PHP, tạo form đăng nhập có validate và hệ thống CRUD bằng PHP thuần – tất cả đều là nền tảng lý tưởng trước khi bạn xây dựng tính năng upload ảnh thực tế.

Cấu trúc hệ thống upload ảnh

Các thành phần cần thiết

Để xây dựng hệ thống upload ảnh và lưu vào DB, bạn cần chuẩn bị các thành phần sau:

  • Form HTML để người dùng chọn file.

  • Logic xử lý upload trong PHP: kiểm tra file, đổi tên nếu cần, di chuyển đến thư mục lưu trữ.

  • Cơ sở dữ liệu để lưu tên file ảnh.

  • Trình xử lý hiển thị ảnh từ tên file đã lưu.

Lưu ảnh ở đâu và vì sao không nên lưu ảnh trong DB

Trong thực tế, chúng ta không nên lưu trực tiếp ảnh (dạng binary) vào database vì sẽ làm cơ sở dữ liệu phình to, khó backup và giảm hiệu năng. Thay vào đó, chỉ lưu tên file và lưu file thật trong thư mục uploads/ là cách tối ưu.

Tạo cơ sở dữ liệu và bảng lưu thông tin ảnh

Thiết kế bảng ảnh đơn giản

Trước khi xử lý upload, bạn cần tạo một bảng có cột filename để lưu tên ảnh, kèm theo caption, upload_date, hoặc user_id nếu muốn mở rộng.

Dưới đây là cú pháp tạo bảng cơ bản:

CREATE DATABASE file_upload_demo;

USE file_upload_demo;

CREATE TABLE images (
    id INT AUTO_INCREMENT PRIMARY KEY,
    filename VARCHAR(255) NOT NULL,
    caption VARCHAR(255),
    upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

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

Tạo một file db.php để quản lý kết nối MySQLi. File này sẽ được include ở tất cả các chức năng liên quan.

<?php
$host = "localhost";
$user = "root";
$pass = "";
$dbname = "file_upload_demo";

$conn = new mysqli($host, $user, $pass, $dbname);
if ($conn->connect_error) {
    die("Kết nối thất bại: " . $conn->connect_error);
}
?>

Tạo form HTML để upload ảnh

Yêu cầu định dạng form

Form upload cần có enctype="multipart/form-data" thì mới gửi được file. Ngoài ra, nên có thêm trường nhập mô tả ảnh (caption) để thực hành xử lý nhiều input cùng lúc.

Thiết kế giao diện cơ bản

Dưới đây là form HTML dùng để chọn file ảnh và nhập chú thích:

<!-- upload_form.php -->
<form action="upload_process.php" method="POST" enctype="multipart/form-data">
    Chọn ảnh:<br>
    <input type="file" name="image" accept="image/*" required><br><br>
    
    Mô tả ảnh:<br>
    <input type="text" name="caption"><br><br>

    <input type="submit" name="submit" value="Upload">
</form>

Xử lý upload ảnh bằng PHP

Kiểm tra, đổi tên và di chuyển ảnh

File ảnh upload lên sẽ tạm thời nằm trong thư mục tmp/ của server. Bạn cần kiểm tra định dạng file, giới hạn kích thước, đổi tên nếu cần và di chuyển vào thư mục cố định như uploads/.

Ngoài ra, bạn cần xử lý khi người dùng upload file trùng tên để tránh ghi đè.

<?php
include 'db.php';

if (isset($_POST['submit'])) {
    $caption = $_POST['caption'];
    $image = $_FILES['image'];

    $filename = basename($image['name']);
    $targetDir = "uploads/";
    $filePath = $targetDir . $filename;

    $fileType = strtolower(pathinfo($filePath, PATHINFO_EXTENSION));
    $allowed = ['jpg', 'jpeg', 'png', 'gif'];

    if (in_array($fileType, $allowed)) {
        // Đổi tên nếu file đã tồn tại
        if (file_exists($filePath)) {
            $filename = time() . "_" . $filename;
            $filePath = $targetDir . $filename;
        }

        if (move_uploaded_file($image["tmp_name"], $filePath)) {
            // Lưu tên file vào DB
            $stmt = $conn->prepare("INSERT INTO images (filename, caption) VALUES (?, ?)");
            $stmt->bind_param("ss", $filename, $caption);
            $stmt->execute();

            echo "Upload thành công. <a href='view.php'>Xem ảnh</a>";
        } else {
            echo "Không thể upload file.";
        }
    } else {
        echo "Chỉ cho phép file JPG, JPEG, PNG, GIF.";
    }
}
?>

Hiển thị ảnh đã upload

Truy vấn dữ liệu ảnh

Để hiển thị ảnh, bạn chỉ cần truy vấn danh sách ảnh đã upload từ DB và hiển thị chúng trong HTML thông qua thẻ <img>.

Giao diện hiển thị ảnh

Dưới đây là cách thực hiện trong file view.php:

<?php
include 'db.php';
$result = $conn->query("SELECT * FROM images ORDER BY id DESC");
?>

<h2>Danh sách ảnh đã upload</h2>

<?php while ($row = $result->fetch_assoc()): ?>
    <div style="margin-bottom: 20px;">
        <img src="uploads/<?= $row['filename']; ?>" width="200"><br>
        <strong><?= $row['caption']; ?></strong><br>
        <small>Upload lúc: <?= $row['upload_date']; ?></small>
    </div>
<?php endwhile; ?>

Kiểm soát và bảo mật khi upload ảnh

Giới hạn định dạng và kích thước file

Luôn giới hạn kiểu file hợp lệ bằng cách kiểm tra MIME type và phần mở rộng. Có thể dùng thêm getimagesize() để xác minh đúng file ảnh.

$check = getimagesize($image["tmp_name"]);
if ($check === false) {
    die("Tệp không phải là ảnh hợp lệ.");
}

Đặt quyền thư mục và xử lý lỗi

  • Đảm bảo thư mục uploads/ có quyền ghi (chmod 755 hoặc 775).

  • Kiểm tra kỹ $_FILES để tránh lỗi không upload được file.

  • Hiển thị lỗi rõ ràng để dễ debug.

Tính năng nâng cao

Xóa ảnh khỏi hệ thống

Bạn có thể thêm nút “Xóa” ảnh và xử lý bằng cách:

  • Xóa file thật bằng unlink()

  • Xóa tên khỏi cơ sở dữ liệu

Resize hoặc tạo thumbnail tự động

Sử dụng thư viện như GD hoặc ImageMagick để resize ảnh, tạo ảnh thu nhỏ khi upload, tối ưu tốc độ hiển thị.

Kết luận

Xử lý upload ảnh và lưu tên file vào cơ sở dữ liệu là một chức năng thiết yếu trong bất kỳ hệ thống web nào có tương tác với người dùng. Qua bài viết này, bạn đã học được cách xây dựng một hệ thống upload ảnh bằng PHP thuần – từ form HTML, xử lý tệp ảnh, kiểm tra định dạng, đổi tên tránh trùng, lưu vào thư mục, cho đến lưu metadata ảnh vào DB.

Quan trọng hơn, bạn đã biết thêm về bảo mật khi upload ảnh – điều mà nhiều người mới học thường bỏ qua. Với nền tảng này, bạn hoàn toàn có thể mở rộng thêm các tính năng như phân loại ảnh, quản lý ảnh theo user, resize ảnh, hoặc tích hợp với các framework chuyên nghiệp trong tương lai.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!