Вставлять файлы в mysql и каталог, но записывается только последний вставленный файл

У меня есть ввод, который хранит несколько файлов в базе данных и каталоге.

<input id = "attachment_file" name = "attachment_file" type = "file" value = "<?=$_POST["attachment_file"]?>" class = "form-control hidden" multiple />

если загружено 2 файла, я просто хочу записать их в БД и переместить в другой каталог, но странно то, что запись относится только к последнему вставленному файлу... Вот код:

for ($i=0; $i < count($_FILES['attachment_file']); $i++) { 
        
        $file_name = $_FILES["attachment_file"]["name"][$i];
        $tmp_name = $_FILES['attachment_file']['tmp_name'][$i];
        $docs_dir = F_FS_PATH_USER_PHOTOS."files/docs/";

        if (!is_dir($docs_dir)) {
            mkdir($docs_dir, 0777, true);
            chmod($docs_dir, 0777);
        }

        $new_dir = move_uploaded_file($tmp_name, $docs_dir.$file_name);
        $docs_url = F_WS_PATH_USER_PHOTOS."files/docs/".$_FILES["attachment_file"]["name"][$i];

        
     
        
        query("INSERT INTO orders_documents SET
        id = NULL,
        date_added = now(),
        site_id  = ".forsql($_SESSION["SA"]["site_id"]).",
        order_id  = ".forsql($order_id).",
        doc_type  = ".forsql($_FILES["attachment_file"]["type"][$i]).",
        doc_url  = ".forsql($docs_url).",
        doc_id  = ".forsql('1').",
        doc_name  = ".forsql($_FILES["attachment_file"]["name"][$i]));
    }

я также попытался вставить 3 файла "random.pdf", "alter_tables.txt", "testfile.txt" и просто проверить, все ли файлы сохранены в переменной $_FILE, например:

print_r($_FILES);
        exit();

но ответ я получаю:

    Array
(
    [attachment_file] => Array
        (
            [name] => testfile.txt
            [type] => text/plain
            [tmp_name] => C:\xampp\tmp\phpB3DC.tmp
            [error] => 0
            [size] => 150
        )
)

и, как я уже сказал, я получаю запись в БД и каталоге только этого файла, но не двух других?

я пытался добавить [] к имени ввода, но ничего не изменилось? я буквально не знаю, что еще я должен попытаться проверить, зачем хранить только последний файл в $_FILES

также форма есть enctype = "multipart/form-data"

Что вы пытались решить проблему? Насколько я вижу, вы не выполняете запрос в данном коде. Кроме того, имейте в виду, что код широко открыт для SQL-инъекций - посмотрите подготовленные операторы, чтобы избежать взлома.

Nico Haase 08.04.2022 14:07

если в переменной $_FILES нет записи обо всех вставленных файлах, что еще мне попробовать?

Someone Somewhere 08.04.2022 14:09

А как ты понял, что я его не исполнял?

Someone Somewhere 08.04.2022 14:14

В руководстве по PHP есть страница Загрузка нескольких файлов.

brombeer 08.04.2022 14:15

я уже видел эту страницу, но мне это не помогло...

Someone Somewhere 08.04.2022 14:18

Почему вы отредактировали свой пост, чтобы он был просто тарабарщиной?

aynber 08.04.2022 14:41

Пожалуйста, нет испортите свои сообщения (отредактировано)!

desertnaut 08.04.2022 14:42

«И как вы поняли, что я его не выполнял» — вы не поделились таким кодом, так что это было просто предположение. Если вы выполнили его делал, поделитесь соответствующим кодом вместе с вашими попытками решить проблему.

Nico Haase 08.04.2022 14:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
8
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Атрибут name должен показывать, что вы получите массив. Измените его на input, чтобы разрешить передачу массива обратно на ваш сервер.

<input id = "attachment_file" name = "attachment_file[]" type = "file" value = "<?=$_POST["attachment_file"]?>" class = "form-control hidden" multiple />

я пробовал так но ничего не изменилось

Someone Somewhere 08.04.2022 14:22

печать ($_FILES); все то же самое с 1 файлом в нем

Someone Somewhere 08.04.2022 14:23

У вас есть только одна запись массива, НО у вас есть несколько записей для name, type и т. д.

Andrea Olivato 08.04.2022 14:26

Другие вопросы по теме