Загрузка нескольких CSV в mysql с помощью PHP

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

<form name = "import" method = "post" enctype = "multipart/form-data">
    <div class = "col-lg-6 col-xs-6">
        <input type = "file" name = "file[]" multiple /><br />
    </div><!-- ./col -->
    <input type = "submit"  class = "form-control"name = "submit" value = "Submit" />
</form>

<?php
    include ("connection.php");

    if (isset($_POST["submit"]))
    { 
        $file = $_FILES['file']['tmp_name'];

        $handle = fopen($file, "r");
        $c = 0;
        fgetcsv($handle);
        while(($filesop = fgetcsv($handle, 10000, ",")) !== false)
        {
            $ITEM_CODE_MX =$filesop[1];
            $addqtyqry = mysqli_query($link,"INSERT INTO salesreceiptlinedetail
                        (ItemRef_FullName)
                VALUES ('".$ITEM_CODE_MX."')");
            $c = $c + 1;
        }       
    }
?>

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

RiggsFolly 12.06.2019 16:28

хорошо, сэр, спасибо

Mia Santos 12.06.2019 16:30

Я не очень хорошо разбираюсь в PHP, но обычно существует цикл Do until EOF (конец файла), указывающий на конкретную папку для достижения того, что вам нужно на других языках. Это было бы обернуто вокруг вашего текущего кода, или вы могли бы условно И <> EOF (!= EOF) для вашего идентификатора submit установить условно. Я не вижу, где этот блок кода будет повторяться, кроме как если установлена ​​отправка.

Wookies-Will-Code 12.06.2019 16:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
0
3
545
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы разрешаете несколько файлов, поэтому вам нужно перебрать эти несколько ссылок на файлы в массиве $_FILES.

Your script was also open to SQL Injection Attack Even if you are escaping inputs, its not safe! So I used a prepared and parameterised query prepared parameterized statements

Один раз подготовить оператор и выполнить его несколько раз — это один из способов использовать подготовленные операторы для экономии времени выполнения.

<form name = "import" method = "post" enctype = "multipart/form-data">
    <div class = "col-lg-6 col-xs-6">
        <input type = "file" name = "file[]" multiple /><br />
    </div><!-- ./col -->
    <input type = "submit"  class = "form-control"name = "submit" value = "Submit" />
</form>

<?php

    include ("connection.php");

    if (isset($_POST["submit"])) { 
        //prepare the insert before you start looping
        $ins_stmt = $link->prepare('INSERT INTO salesreceiptlinedetail
                                    (ItemRef_FullName) VALUES(?)';

        // check the prepare worked and the the query is correctly coded
        if (FALSE === $ins_stmt) {
            echo 'Error: '.$link->error;
            exit;
        }

        foreach ( $_FILES['file']['tmp_name'] as $file ) {

            $handle = fopen($file, "r");
            $c = 0;

            // read and ignore headers
            fgetcsv($handle);


            while(($filesop = fgetcsv($handle, 10000, ",")) !== false) {

                $ins_stmt->bind_param('s', $filesop[1]);
                $ins_stmt->execute();
                $c++;
            }       
        }
    }
?>

когда я отправил форму, она просто загружалась в течение длительного времени, и данные не вставлялись, я пробовал два csv с 3 строками в каждом

Mia Santos 12.06.2019 16:55

См. добавленный код под комментарием // while testing add some error reporting Посмотрим, даст ли это нам подсказку :)

RiggsFolly 12.06.2019 17:05

fgetcsv() ожидает, что параметр 1 будет ресурсом, задано логическое значение Эта ошибка переполнена l

Mia Santos 12.06.2019 17:11

Неопределенный индекс: tmp_name

Mia Santos 12.06.2019 17:11

Извините, мне нужно еще кофе, я ошибся с петлей. См. измененный цикл foreach

RiggsFolly 12.06.2019 17:15

Хорошо, добавил проверку, чтобы узнать, не по какой-то причине не удалось выполнить prepare. Попробуй это

RiggsFolly 12.06.2019 17:32

Добавьте echo $filesop[1] . '<br>';, чтобы увидеть, читаем ли мы файл csv или нет после while(($filesop = fgetcsv($handle, 10000, ",")) !== false) {

RiggsFolly 12.06.2019 17:45

но не импортирует

Mia Santos 12.06.2019 17:58

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