Я осмотрелся и изо всех сил пытался узнать, как загружать несколько изображений (.jpg / .png / etc). Для моей задачи я хотел загрузить 5 записей в базу данных. Пока я изо всех сил пытаюсь выгрузить 5 вместе в одной записи. Я использовал PHP с сайта Ws3, и он работает успешно, но этот код предназначен только для одного изображения.
PHP Code –
$allowedExts = array("gif", "jpeg", "jpg", "png"); $temp = explode(".", $_FILES["file"]["name"]); $extension = end($temp); if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] < 2000000) && in_array($extension, $allowedExts)) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; } else { if (file_exists("upload/" . $_FILES["file"]["name"])) { } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . uniqid() . "_" . $_FILES["file"]["name"]); } } } else { $error = "Invalid file"; }
Мой HTML выглядит следующим образом:
<label for="file">Filename:</label> <input type="file" name="file" id="file"> <input type="file" name="file" id="file"> <input type="file" name="file" id="file"> <input type="file" name="file" id="file"> <input type="file" name="file" id="file">
Любые советы очень признательны ребятам! ура
Сначала добавьте enctype="multipart/form-data"
в вашу форму. Затем измените имена полей file
на:
<input type="file" name="file[]" id="file" > <input type="file" name="file[]" id="file" > <input type="file" name="file[]" id="file" >
Это создаст массив представленных файлов. Теперь вы сможете сделать foreach
в файлах. Быстрый пример:
foreach ($_FILES['file']['name'] as $f => $name) { }
Вокруг вашего существующего кода добавьте [$f]
к каждой $_FILES["file"]
. Поэтому $_FILES["file"]["size"]
необходимо изменить на $_FILES["file"]["size"][$f]
и так далее. В foreach
я $_FILES["file"]["name"][$f]
$name
на $_FILES["file"]["name"][$f]
, поэтому вместо него можно использовать $name
.
Полный PHP-код, основанный на вашем скрипте:
foreach ($_FILES['file']['name'] as $f => $name) { $allowedExts = array("gif", "jpeg", "jpg", "png"); $temp = explode(".", $name); $extension = end($temp); if ((($_FILES["file"]["type"][$f] == "image/gif") || ($_FILES["file"]["type"][$f] == "image/jpeg") || ($_FILES["file"]["type"][$f] == "image/jpg") || ($_FILES["file"]["type"][$f] == "image/png")) && ($_FILES["file"]["size"][$f] < 2000000) && in_array($extension, $allowedExts)) { if ($_FILES["file"]["error"][$f] > 0) { echo "Return Code: " . $_FILES["file"]["error"][$f] . "<br>"; } else { if (file_exists("upload/" . $name)) { } else { move_uploaded_file($_FILES["file"]["tmp_name"][$f], "upload/" . uniqid() . "_" . $name); } } } else { $error = "Invalid file"; } }
В конце я бы предложил вам узнать больше о PHP на разных сайтах. W3schools легко, но и не самый лучший вариант. В качестве примера вы проверяете это:
if ((($_FILES["file"]["type"][$f] == "image/gif") || ($_FILES["file"]["type"][$f] == "image/jpeg") || ($_FILES["file"]["type"][$f] == "image/jpg") || ($_FILES["file"]["type"][$f] == "image/png")) && ($_FILES["file"]["size"][$f] < 2000000) && in_array($extension, $allowedExts))
Но достаточно будет только массива, например:
if ($_FILES["file"]["size"][$f] < 2000000 && in_array($extension, $allowedExts))
$_FILES["file"]["type"]
не всегда возвращает тип, как ожидалось. Мы видим это много раз в аудио и видео файлах. Другое сообщение о SO о типах MIME, относящихся к скрипту W3schools: PHP: $ _FILES ["file"] ["type"] бесполезен
Прежде чем задавать новые вопросы в StackOverflow, выполните поиск. Я просто написал длинный ответ только для вас, но то же самое делалось уже много раз для такого вопроса. https://stackoverflow.com/search?q=multiple+upload+php
Надеюсь, он ответит на ваш вопрос, и удачи в изучении PHP.
Я думаю, проблема в вашем HTML … вместо пяти из них:
<input type="file" name="file" id="file">
Попробуйте сделать это следующим образом:
<input type="file" name="file[]">
Это приведет к массиву файлов, а не к попытке отправить несколько файлов под одним и тем же именем ввода.
В качестве побочного примечания вы не должны использовать один и тот же атрибут id более чем для одного элемента. Возможно, вы хотели использовать класс?