@Klapanasos
Интересуюсь Веб-разработкой

Как загрузить несколько файлов на сервер?

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

<div class="addProduct">
    <div>
        <label for="photo1">Фото 1</label>
        <input class="form-control" id="photo1" type="file" name='photo1' required="required">
    </div>
    <div>
        <label for="photo2">Фото 2</label>
        <input class="form-control" id="photo2" type="file" name='photo2' required="required">
    </div>
    <div>
        <label for="photo3">Фото 3</label>
        <input class="form-control" id="photo3" type="file" name='photo3' required="required">
    </div>
</div>

$dir = '../public/images/product/';
$min_dir = '../public/images/product/thumbnails/';

if($_SERVER['REQUEST_METHOD'] == "POST" && isset($_FILES['photo1'])) {
    $new_name_big = rand(0,9999999) . $_FILES['photo1']['name'];
    $new_name_min = 'min_' . $new_name_big;
    $movefile = move_uploaded_file($_FILES['photo1']['tmp_name'], $dir . $new_name_big);
    if ($movefile){
        $resize = img_resize($dir . $new_name_big, $min_dir . 'min_' . $new_name_big, 200, 200);
        $sql = mysqli_query($conn, "INSERT INTO photos (big_url, small_url) VALUES ('$new_name_big', '$new_name_min')");
        mysqli_close($conn);
        echo "<p style='color:green;'>Файл загружен!</p>";
    } else {
        echo "<p style='color:green;'>Ошибка загрузки!</p>";
    };
    exit("<meta http-equiv='refresh' content='0; url = $_SERVER[PHP_SELF]' charset=utf-8>");
};
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
Rou1997
@Rou1997
Форму сделайте типа multipart form data.
Имя input измените на photo[], это нужно как при использовании multiple (HTML5) так и при данном варианте с несколькими input, в этих двух случаях отправляемый запрос ничем не отличается, если не считать, что незаполненные поля при вашем варианте тоже будут приходить и размер массива $_FILESбудет неизменным, это удобно если потребуется этой же формой редактировать сущность, чтобы можно было потом зайти на страницу и удалить часть фото или заменить.
Насчет обработки $_FILESготового кода под рукой нет, я делал на Yii2, разбирайтесь сами.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Klapanasos Автор вопроса
Интересуюсь Веб-разработкой
$dir = '../public/images/product/';
$min_dir = '../public/images/product/thumbnails/';

if($_SERVER['REQUEST_METHOD'] == "POST" && isset($_FILES['photo'])) {
    $photo = $_FILES['photo']['name'];
    for ($i = 0; $i < count($photo); $i++){
        $new_name_big = rand(0,9999999) . '_' . $photo[$i];
        $new_name_min = 'min_' . $new_name_big;
        $movefile = move_uploaded_file($_FILES['photo']['tmp_name'][$i], $dir . $new_name_big);
    if ($movefile){
        $resize = img_resize($dir . $new_name_big, $min_dir . 'min_' . $new_name_big, 200, 200);
        //$sql = mysqli_query($conn, "INSERT INTO photos (big_url, small_url) VALUES ('$new_name_big', '$new_name_min')");
        //mysqli_close($conn);
        echo "<p style='color:green;'>Файл загружен!</p>";
    } else {
        echo "<p style='color:green;'>Ошибка загрузки!</p>";
    };
    //exit("<meta http-equiv='refresh' content='0; url = $_SERVER[PHP_SELF]' charset=utf-8>");
   }
};
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы