Смена фото в профиле пользователя

186
04 апреля 2022, 01:50

Я начинающий в разроботке сайтов, сечас я делаю личный кабинет пользователя. У меня возникла проблема с реализацией смены фото у пользователя.

Мне нужно чтобы по нажатию на кнопку открывалось окно проводника, человек выбирал фото и оно загружалось в бд, а потом при заходе в профиль фото выгружалось на страницу

Мне нужно понять как сделать загрузку фото в бд и как его выгружать из бд на php.

Answer 1

HTML форма:

 <form action="/accept.php" enctype="multipart/form-data" method="post">
    <label for="file">Прикрепить файл:</label>
    <input type="file" name="file" id="file">
    <input value="Отправить" type="submit">
</form>

Прием файла в accept.php:

$uploadfile = basename($_FILES['file']['name']);
if (move_uploaded_file($_FILES['file']['tmp_name'], './' . $uploadfile)) {
    echo "Файл успешно загружен.\n";
}

Источник с информацией по передаче файлов

Для сохранения файла рекомендую создать какое-то хранилище на сервере и кидать данные в по генерированному пути, чтобы избежать дублирования файлов. Пример кода как это можно реализовать:

/**
 * Расчитать новый путь в хранилище
 * 
 * @param string $storagePath
 * @param string $originalPath
 * @param boolean $saveOriginalFileName
 */
protected function calculatePath($storagePath, $originalPath, $saveOriginalFileName = false)
{
    $path = $this->calculateMiddlePath($storagePath, $originalPath);
    if (!file_exists($path)) {
        mkdir($path, 0777, true);
    }
    return $path  . '/' . $this->calculateFileName($originalPath, $saveOriginalFileName);
}
/**
 * Сгенерировать путь до файла
 * 
 * @param string $storagePath
 * @param string $originalPath
 */
private function calculateMiddlePath($storagePath, $originalPath)
{
    $pathMid = str_split(md5($originalPath . strtotime('now')), 4);
    $pathMid = implode('/', $pathMid);
    return $storagePath . $pathMid;
}
/**
 * Сгенерировать новое имя файла
 * 
 * @param string $originalPath
 * @param bool $saveOriginalFileName
 */
private function calculateFileName($originalPath, $saveOriginalFileName)
{
    if ($saveOriginalFileName) {
        return basename($originalPath);
    }
    return md5($originalPath) . '.' . pathinfo($originalPath, PATHINFO_EXTENSION);
}

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

P.S Не стоит увлекаться с генерацией длинного пути)

READ ALSO
Стилизация Pandas DataFrame Multiindex

Стилизация Pandas DataFrame Multiindex

Каким образом стилизовать (раскрасить) значения DataFrame из одной части колоночного индекса на основании значений из другой части колоночного...

140
nw.js не работает с php файлами

nw.js не работает с php файлами

Сделал сайт на php, решил сделать десктопный клиент, используя nwjs, но столкнулся с проблемой: при запуске nw

200
Слои в html один рисунок на другой

Слои в html один рисунок на другой

У меня проблема мне нужно сделать чтобы одна картинка была внизу а другая как бы поверх егоНо получается все наоборот знает кто нибудь как...

207
Неправильно отображается картинка

Неправильно отображается картинка

Я пытаюсь создать мало-мальски нормальную плашку, но мало того что при не моем формате экрана сливаются слова, так еще и картинка не отображаетсяОна...

120