Building a PHP MySQL CRUD Application with Image Upload

Building a PHP MySQL CRUD Application with Image Upload

AI Reading

Quick summary of this article

This article provides a step-by-step guide to building a simple product management system using PHP and MySQL. The application allows users to create, read, update, and delete product records, with each product including details like name, description, price, color, size, and an uploaded image.

  • The tutorial covers database setup using phpMyAdmin, creating a `productdb` database with a `products` table that stores all product information.
  • It explains how to establish a database connection using MySQLi and create the necessary project files: `db.php`, `create.php`, `index.php`, `update.php`, and `delete.php`.
  • The create and update forms include image upload functionality, with files saved to an `uploads` folder and the filename stored in the database.
  • The main page displays all products in a table with edit and delete links, while the update page pre-fills existing data for modification.
  • Basic security measures like prepared statements are used for database queries, though the tutorial suggests adding further validations and UI improvements for production use.

In this blog post, we’ll create a simple PHP application with MySQL to perform CRUD operations (Create, Read, Update, Delete) for managing products. Each product will have a name, description, image, price, color, and size. We’ll include image upload functionality as part of the process.


Prerequisites

Before starting, ensure you have the following:

  • XAMPP or WAMP installed.
  • Basic knowledge of PHP and MySQL.
  • A database and table setup.

Step 1: Database Setup

  1. Open phpMyAdmin and create a database named productdb.
  2. Create a table products with the following structure:
CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    description TEXT,
    image VARCHAR(255),
    price DECIMAL(10, 2) NOT NULL,
    color VARCHAR(50),
    size VARCHAR(50),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Step 2: Project Setup

Create a folder product_crud in your web server directory (htdocs for XAMPP). Inside this folder, create the following files:

  • index.php
  • create.php
  • update.php
  • delete.php
  • db.php

Step 3: Database Connection

In db.php, write the code to connect to the database:

<?php
$host = 'localhost';
$username = 'root';
$password = ''; // Default password for XAMPP
$database = 'productdb';

$conn = new mysqli($host, $username, $password, $database);

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

Step 4: Create Product Form (create.php)

Add a form to upload product details and image:

<?php include 'db.php'; ?>

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = $_POST['name'];
    $description = $_POST['description'];
    $price = $_POST['price'];
    $color = $_POST['color'];
    $size = $_POST['size'];

    $image = $_FILES['image']['name'];
    $target = 'uploads/' . basename($image);

    if (move_uploaded_file($_FILES['image']['tmp_name'], $target)) {
        $sql = "INSERT INTO products (name, description, image, price, color, size) VALUES (?, ?, ?, ?, ?, ?)";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param('ssssss', $name, $description, $image, $price, $color, $size);

        if ($stmt->execute()) {
            echo "Product added successfully!";
        } else {
            echo "Error: " . $stmt->error;
        }
    } else {
        echo "Failed to upload image.";
    }
}
?>

<form action="" method="POST" enctype="multipart/form-data">
    <label for="name">Name:</label>
    <input type="text" name="name" required><br>

    <label for="description">Description:</label>
    <textarea name="description" required></textarea><br>

    <label for="price">Price:</label>
    <input type="number" name="price" step="0.01" required><br>

    <label for="color">Color:</label>
    <input type="text" name="color"><br>

    <label for="size">Size:</label>
    <input type="text" name="size"><br>

    <label for="image">Image:</label>
    <input type="file" name="image" required><br>

    <button type="submit">Add Product</button>
</form>

Step 5: Display Products (index.php)

Display all products in a table:

<?php include 'db.php'; ?>

<table border="1">
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Description</th>
        <th>Image</th>
        <th>Price</th>
        <th>Color</th>
        <th>Size</th>
        <th>Actions</th>
    </tr>

    <?php
    $result = $conn->query("SELECT * FROM products");
    while ($row = $result->fetch_assoc()):
    ?>
    <tr>
        <td><?= $row['id']; ?></td>
        <td><?= $row['name']; ?></td>
        <td><?= $row['description']; ?></td>
        <td><img src="uploads/<?= $row['image']; ?>" width="50" alt=""></td>
        <td><?= $row['price']; ?></td>
        <td><?= $row['color']; ?></td>
        <td><?= $row['size']; ?></td>
        <td>
            <a href="update.php?id=<?= $row['id']; ?>">Edit</a>
            <a href="delete.php?id=<?= $row['id']; ?>">Delete</a>
        </td>
    </tr>
    <?php endwhile; ?>
</table>

Step 6: Update Product (update.php)

Fetch the product by ID and update its details:

<?php include 'db.php'; ?>

<?php
$id = $_GET['id'];
$result = $conn->query("SELECT * FROM products WHERE id = $id");
$product = $result->fetch_assoc();

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = $_POST['name'];
    $description = $_POST['description'];
    $price = $_POST['price'];
    $color = $_POST['color'];
    $size = $_POST['size'];

    $image = $product['image'];
    if (!empty($_FILES['image']['name'])) {
        $image = $_FILES['image']['name'];
        $target = 'uploads/' . basename($image);
        move_uploaded_file($_FILES['image']['tmp_name'], $target);
    }

    $sql = "UPDATE products SET name=?, description=?, image=?, price=?, color=?, size=? WHERE id=?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param('ssssssi', $name, $description, $image, $price, $color, $size, $id);

    if ($stmt->execute()) {
        echo "Product updated successfully!";
    } else {
        echo "Error: " . $stmt->error;
    }
}
?>

<form action="" method="POST" enctype="multipart/form-data">
    <label for="name">Name:</label>
    <input type="text" name="name" value="<?= $product['name']; ?>" required><br>

    <label for="description">Description:</label>
    <textarea name="description" required><?= $product['description']; ?></textarea><br>

    <label for="price">Price:</label>
    <input type="number" name="price" step="0.01" value="<?= $product['price']; ?>" required><br>

    <label for="color">Color:</label>
    <input type="text" name="color" value="<?= $product['color']; ?>"><br>

    <label for="size">Size:</label>
    <input type="text" name="size" value="<?= $product['size']; ?>"><br>

    <label for="image">Image:</label>
    <input type="file" name="image"><br>
    <img src="uploads/<?= $product['image']; ?>" width="50" alt=""><br>

    <button type="submit">Update Product</button>
</form>

Step 7: Delete Product (delete.php)

Delete a product by ID:

<?php include 'db.php'; ?>

<?php
$id = $_GET['id'];
$conn->query("DELETE FROM products WHERE id = $id");
header('Location: index.php');
?>

Conclusion

You now have a fully functional PHP CRUD application with MySQL and image upload functionality. Modify the application further to meet your requirements, such as adding validations or improving the UI.

Leave a Reply

Your email address will not be published. Required fields are marked *