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






Вы разрешаете несколько файлов, поэтому вам нужно перебрать эти несколько ссылок на файлы в массиве $_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 строками в каждом
См. добавленный код под комментарием // while testing add some error reporting Посмотрим, даст ли это нам подсказку :)
fgetcsv() ожидает, что параметр 1 будет ресурсом, задано логическое значение Эта ошибка переполнена l
Неопределенный индекс: tmp_name
Извините, мне нужно еще кофе, я ошибся с петлей. См. измененный цикл foreach
Хорошо, добавил проверку, чтобы узнать, не по какой-то причине не удалось выполнить prepare. Попробуй это
Добавьте echo $filesop[1] . '<br>';, чтобы увидеть, читаем ли мы файл csv или нет после while(($filesop = fgetcsv($handle, 10000, ",")) !== false) {
но не импортирует
Во-первых, было бы неплохо сделать какой-нибудь разумный отступ в коде. Это помогает нам читать код и, что более важно, помогает вы отлаживаете свой кодВзгляните на стандарт кодирования в ваших интересах. Вас могут попросить изменить этот код через несколько недель/месяцев, и в конце вы поблагодарите меня.