Web20 University

A Step-by-Step Guide to PHP File Upload and Display Image

Last edited on
Get up to 65% Off Hosting with FREE SSL & FREE Domains!

* Web 2.0 University is supported by it's audience. If you purchase through links on our site, we may earn an affiliate commision.

Uploading images and displaying them dynamically is a common requirement in many web applications.

This guide walks you through the process of implementing a PHP file upload and display image system with a database backend. By the end, you’ll know how to upload images, store file paths in a MySQL database, and query the database to display the uploaded images.


Overview of the Process

We will cover the following steps:

  1. Creating an HTML form for image upload.
  2. Validating and processing the uploaded image in PHP.
  3. Saving the image reference to a MySQL database.
  4. Querying the database for stored image references.
  5. Displaying the uploaded images on the front end.

Step 1: Creating the HTML Form for Image Upload

To start, create a simple HTML form that allows users to select an image file for upload.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Image Upload</title>
</head>
<body>
    <h2>Upload an Image</h2>
    <form action="upload.php" method="POST" enctype="multipart/form-data">
        <input type="file" name="image" accept="image/*" required>
        <button type="submit" name="upload">Upload</button>
    </form>
</body>
</html>
  • Key points:
    • enctype="multipart/form-data" is essential for file uploads.
    • The accept="image/*" attribute ensures only image files can be selected.

Step 2: Validating and Processing the Uploaded Image in PHP

Next, handle the uploaded image in upload.php. This script will validate the file type, save the file, and store its reference in the database.

<?php
if (isset($_POST['upload'])) {
    // Database connection
    $conn = new mysqli('localhost', 'root', '', 'image_upload');

    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    // Validate file
    if (isset($_FILES['image']) && $_FILES['image']['error'] === UPLOAD_ERR_OK) {
        $fileTmpPath = $_FILES['image']['tmp_name'];
        $fileName = basename($_FILES['image']['name']);
        $fileExtension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
        $allowedExtensions = ['jpg', 'jpeg', 'png', 'gif'];

        if (in_array($fileExtension, $allowedExtensions)) {
            $uploadDir = 'uploads/';
            $uniqueFileName = uniqid() . '.' . $fileExtension;
            $destination = $uploadDir . $uniqueFileName;

            if (!is_dir($uploadDir)) {
                mkdir($uploadDir, 0755, true);
            }

            if (move_uploaded_file($fileTmpPath, $destination)) {
                // Save to database
                $stmt = $conn->prepare("INSERT INTO images (file_name) VALUES (?)");
                $stmt->bind_param("s", $uniqueFileName);
                $stmt->execute();

                echo "Image uploaded successfully!";
            } else {
                echo "Error moving the uploaded file.";
            }
        } else {
            echo "Invalid file type. Only JPG, PNG, and GIF are allowed.";
        }
    } else {
        echo "Error: No file uploaded.";
    }
}
?>

Step 3: Querying the Database to Fetch Image References

Create another PHP script, display.php, to query the database and fetch the stored image references.

<?php
$conn = new mysqli('localhost', 'root', '', 'image_upload');

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$query = "SELECT file_name FROM images";
$result = $conn->query($query);

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo '<img src="uploads/' . htmlspecialchars($row['file_name']) . '" alt="Uploaded Image" style="width:200px; height:auto; margin:10px;">';
    }
} else {
    echo "No images found.";
}
?>

Step 4: Displaying the Images in the Front End

Integrate the display.php script into your HTML to show the uploaded images:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Uploaded Images</title>
</head>
<body>
    <h2>Uploaded Images</h2>
    <div>
        <?php include 'display.php'; ?>
    </div>
</body>
</html>

Best Practices for File Upload in PHP MySQL Database

  1. Security:

    • Always validate file types and size on the server.
    • Use unique names for uploaded files to prevent overwriting.
    • Store only references (file paths) in the database, not the actual file.
  2. Performance:

    • Optimize uploaded images for web use.
    • Use a CDN to serve uploaded images for better performance.
  3. Scalability:

    • Organize files in subdirectories if you expect a large number of uploads.
    • Consider associating images with users for personalized galleries.

Potential Improvements

To enhance this basic implementation:

  • Associate uploads with users: Add a user_id column to the database to link images with specific users.
  • Add image preview: Display a preview of the image before upload.
  • Support additional metadata: Store image descriptions or timestamps in the database.

Resources and Libraries

Here are some useful resources to deepen your understanding:


By following this guide, you can create a functional file upload in PHP MySQL database system, enabling dynamic image uploads and retrieval. This approach is scalable, user-friendly, and forms the backbone of many web applications.

Get up to 65% Off Hosting with FREE SSL & FREE Domains!