Загрузка изображения в базу данных на PHP

Загрузка изображения в базу данных на PHP

от автора

в

В наше время сложно представить веб-приложение без изображений. Будь то аватарка пользователя, галерея товаров или просто декоративные элементы — изображения везде. Но как же правильно хранить эти изображения? Один из методов — загрузка изображения в базу данных с помощью PHP. Сегодня мы подробно рассмотрим этот процесс.

Что потребуется?

Прежде чем начать, убедитесь, что у вас есть следующее:

  1. Веб-сервер с установленным PHP и MySQL (или MariaDB).
  2. База данных для хранения изображений.
  3. Форма загрузки для получения изображений от пользователей.

Если у вас этого нет, не беда! Мы сейчас разберём, как всё это настроить.

Настройка среды

Установка веб-сервера

Если у вас ещё нет веб-сервера, вы можете воспользоваться XAMPP или MAMP. Эти пакеты включают в себя Apache, MySQL и PHP, что делает их отличным выбором для локальной разработки.

Создание базы данных

Создадим базу данных и таблицу для хранения наших изображений. Назовём базу данных image_db, а таблицу — images.

CREATE DATABASE image_db;

USE image_db;

CREATE TABLE images (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    type VARCHAR(50) NOT NULL,
    image LONGBLOB NOT NULL
);

Таблица images будет содержать три поля: name для хранения имени файла, type для MIME-типа и image для самого изображения.

Создание формы загрузки

Теперь, когда наша база данных готова, давайте создадим HTML-форму для загрузки изображений.

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Загрузка изображения</title>
</head>
<body>
    <h1>Загрузить изображение</h1>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="image" accept="image/*" required>
        <button type="submit">Загрузить</button>
    </form>
</body>
</html>

Обработка загрузки изображения

Теперь нам нужен PHP-скрипт, который будет обрабатывать форму и сохранять изображение в базе данных.

Создадим файл upload.php:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "image_db";

// Создание подключения
$conn = new mysqli($servername, $username, $password, $dbname);

// Проверка подключения
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if (isset($_FILES['image'])) {
    $imageName = $_FILES['image']['name'];
    $imageType = $_FILES['image']['type'];
    $imageData = file_get_contents($_FILES['image']['tmp_name']);

    $stmt = $conn->prepare("INSERT INTO images (name, type, image) VALUES (?, ?, ?)");
    $stmt->bind_param("sss", $imageName, $imageType, $imageData);

    if ($stmt->execute()) {
        echo "Изображение успешно загружено!";
    } else {
        echo "Ошибка: " . $stmt->error;
    }

    $stmt->close();
}

$conn->close();
?>

В этом скрипте мы выполняем следующие шаги:

  1. Подключаемся к базе данных.
  2. Проверяем, был ли файл загружен.
  3. Получаем имя файла, тип и содержимое изображения.
  4. Подготавливаем SQL-запрос для вставки данных.
  5. Выполняем запрос и выводим результат.

Вывод изображений

Теперь давайте создадим страницу, которая будет выводить загруженные изображения. Создадим файл display.php:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "image_db";

// Создание подключения
$conn = new mysqli($servername, $username, $password, $dbname);

// Проверка подключения
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, name, type FROM images";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo '<div>';
        echo '<h2>' . $row["name"] . '</h2>';
        echo '<img src="view.php?id=' . $row["id"] . '" alt="' . $row["name"] . '">';
        echo '</div>';
    }
} else {
    echo "Нет изображений.";
}

$conn->close();
?>

Этот скрипт получает данные обо всех изображениях из базы данных и выводит их на страницу.

Отображение изображения

Для отображения конкретного изображения создадим файл view.php:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "image_db";

// Создание подключения
$conn = new mysqli($servername, $username, $password, $dbname);

// Проверка подключения
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if (isset($_GET['id'])) {
    $id = intval($_GET['id']);

    $stmt = $conn->prepare("SELECT type, image FROM images WHERE id = ?");
    $stmt->bind_param("i", $id);
    $stmt->execute();
    $stmt->bind_result($type, $image);
    $stmt->fetch();

    header("Content-Type: " . $type);
    echo $image;

    $stmt->close();
}

$conn->close();
?>

Этот скрипт получает изображение по ID из базы данных и выводит его с правильным MIME-типом.

Вот так мы создали полное веб-приложение, которое позволяет загружать изображения в базу данных и выводить их на страницу. Конечно, это лишь основа, и вы можете улучшить этот код, добавив обработку ошибок, валидацию файлов и другие полезные функции.


Автор статьи:

Обновлено:

26.05.2024


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *