2015-08-10 2 views
1

Я пытаюсь импортировать файлы csv в свою таблицу. Поиск в Интернете, я нашел код, который работает и что я изменил, основываясь на моих потребностях.Импортировать несколько файлов с помощью php

К сожалению, он работает только при вставке одного файла. Я также попытался отредактировать его, но он просто вставляет последний файл, который находится в каталоге. Любая помощь будет высоко ценится.

//get the csv file 
    $dir = "Files/"; 
    $currentFile = glob($dir."*.csv"); 
    $counter = count($currentFile); 

     foreach ($currentFile as $filename) { 
      $handle = fopen($filename,"r"); 
     } 

     $file = basename($filename); 
     //loop through the csv file and insert into database 
    do { 

     if ($data[0]) { 
      mysql_query("INSERT INTO tblCoordinates (gps_id,lat,lng,time,cmt,cnt,cty,str,cde,lnt,hgt,name) VALUES 
       ( 
        '$file', 
        '".mysql_real_escape_string($data[0])."', 
        '".mysql_real_escape_string($data[1])."', 
        '".mysql_real_escape_string($data[2])."', 
        '".mysql_real_escape_string($data[3])."', 
        '".mysql_real_escape_string($data[4])."', 
        '".mysql_real_escape_string($data[5])."', 
        '".mysql_real_escape_string($data[6])."', 
        '".mysql_real_escape_string($data[7])."', 
        '".mysql_real_escape_string($data[8])."', 
        '".mysql_real_escape_string($data[9])."', 
        '".mysql_real_escape_string($data[10])."' 
       ) 
      "); 
     } 
    } while ($data = fgetcsv($handle,1000,",","'")); 
    // 

в $ счетчик действительно говорит, что у меня есть 4 файла в моем $dir, который является истинным и имена файлов "5729.csv", "4563.csv", "8718.csv", "4494.csv".

Моя проблема: код вставляет только последний файл «4494.csv». Как я могу вставить все файлы?

+0

Вы закрываете свой 'foreach' петлю слишком рано. – MaggsWeb

+0

спасибо. сделано и работает. можете ли вы опубликовать это как ответ, чтобы я мог его пометить? снова спасибо – user3201441

ответ

0

Расширьте свой предка. В настоящее время вы назначаете только переменную $handle в вашем цикле, но цикл do находится за пределами foreach, поэтому он отображает только последний файл.

foreach ($currentFile as $filename) { 
    // Your loop only keeps setting the $handle 
    $handle = fopen($filename,"r"); 
} 

// At this point, only the last entry from $currentFile is parsed 

Так оно и должно быть что-то вроде этого:

foreach ($currentFile as $filename) { 
    $handle = fopen($filename,"r"); 

    $file = basename($filename); 

    //loop through the csv file and insert into database 
    do { 
     // Your parse logic here... 
    } while ($data = fgetcsv($handle,1000,",","'")); 
} // foreach ends here 
+0

спасибо, сэр. Примите это, когда смогу. – user3201441

1

Ваш foreach цикл закрывается слишком рано

foreach ($currentFile as $filename) { 
    $handle = fopen($filename,"r"); 

    // process your files here 

} // close 'foreach' 
Смежные вопросы