2015-11-12 3 views
2

Я пишу скрипт PHP, который импортирует данные CSV от множества клиентов. Данные имеют 12 строк и 10 столбцов (см. Ниже). Когда я использую импорт MySQL phpMyAdmin, нет проблемы (все 12 строк импортируются в порядке!) Однако, когда я пытаюсь импортировать с использованием PHP-скрипта, он импортирует только первую строку или последнюю строку. У меня есть много разных способов написать один и тот же скрипт безрезультатно. Цель состоит в том, чтобы пользователь мог автоматически загружать CSV в таблицу.Импорт CSV-файла в MySQL с помощью PHP

if ($_FILES[csv][size] > 0) { 
//get the csv file 
$file = $_FILES[csv][tmp_name]; 
$handle = fopen($file,"r"); 

//loop through the csv file and insert into database 
do { 
    if ($data) { 
     mysql_query("INSERT INTO summary_td (customer_id, month, Income, Savings, Revolving_Expenses, Utilities, Services, Luxuries, Charities, month_id) VALUES 
      ( 
       '".addslashes($data[0])."', 
       '".addslashes($data[1])."', 
       '".addslashes($data[2])."', 
       '".addslashes($data[3])."', 
       '".addslashes($data[4])."', 
       '".addslashes($data[5])."', 
        '".addslashes($data[6])."', 
        '".addslashes($data[7])."', 
        '".addslashes($data[8])."', 
        '".addslashes($data[9])."' 
      ) 
     "); 
    } 
} while ($data = fgetcsv($handle,1000,",","'")); 


    //redirect 
    header('Location: import.php?success=1'); die; 
    } 
    ?> 

CSV данных:

1, январь, 5000,899,899,899,899,899,899,1 1, февраль, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 2 1, Март, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 3 1, April, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 4 1, May, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 5 1, Июнь, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 6 1, Июль, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 7 1,ugust, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 8 1, сентябрь, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 9 1, октябрь, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 10 1, ноябрь, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 11 1, декабрь, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 12

+0

[Другой способ, чтобы написать сценарий] (http://stackoverflow.com/questions/11448307/importing-csv-data-using-php-mysql) – Terminus

+0

использование if ($ data [0]) вместо if ($ data) –

+0

@William, спасибо за Ответить! Я попробовал это. Никаких изменений в выходе данных. Он по-прежнему добавляет только первую строку. – esneaker

ответ

2

Это отлично работает для меня -

function upload(){ 
     ini_set('auto_detect_line_endings',TRUE); 

     if (($handle = fopen($_FILES['userfile']['tmp_name'], "r")) !== FALSE) { 
     $firstRow = true; 
     while (($data = fgetcsv($handle, 4096, ",",'"')) !== FALSE) 
     { 
      $num = count($data); 

         $data1 = array(
         'name' => $data[0], 
         'nric' => $data[1], 
         'email' => $data[2], 
         'address' => $data[3] , 
         'postal' => $data[4], 
         'mobile_country_code' => $data[5], 
         'mobile' => $data[6], 
         'gender' => $data[7], 
         'country' => $data[8], 
         'nationality' => $data[9], 
         'dob' => $dob, 
         'notes' => $data[11], 
         'newsletter' => $data[12], 
         'delete' => $data[13] 
         ); 
         //echo "<pre/>";print_r($data) ;exit(); 
          $this->db->insert('members', $data1); 
          $member_id = $this->db->insert_id(); 
      } 

    //echo "<pre/>";print_r($data) ;exit(); 
     fclose($handle); 
     } 
    ini_set('auto_detect_line_endings',FALSE);    
       } 

    } 
+0

как я это реализовать ? Я пробовал код, как вы написали ... Я изменил имена переменных, чтобы соответствовать моей информации, и закрепил функцию между тегами php и вызываемой загрузкой(), и я не получаю никаких результатов в своей таблице. ничего. Что я делаю не так? Опять ... Я новичок. Первый раз работа с функциями в php. В очередной раз благодарим за помощь!! – esneaker

+0

вам не нужно называть его функцией, вы можете просто отредактировать код внутри функции загрузки и добавить его в свой раздел –

+0

ok.Один вопрос. Являются ли «$ member_id» и «insert_id» ваши PK для вашей таблицы базы данных? Я думаю, что это то, где я терплю неудачу в своем коде. – esneaker

Смежные вопросы