Загрузка файла CSV в базу данных mysql с помощью php

Я изо всех сил пытаюсь загрузить информацию из файла csv с помощью PHP и хочу сохранить содержимое csv (номера мобильных телефонов) в таблицу базы данных mysql. Содержимое файла выглядит следующим образом:

Содержимое файла CSV (отдельная запись в одной строке без запятых)

44762126064    
447508751    
4474669756    
44771466603    
444584871    
445574805    
447455471039    
44777451345
447460345819    
44793342963    
44734838672    
44752845528    
4474537291    
44779645078

Я пытаюсь загрузить файл csv с помощью формы и отправить. Код читает файл csv и пытается записать содержимое в таблицу mysql. Проблема в том, что код возвращает все записи csv в одном элементе массива, например:

Array( 
    [0] => 44762126064 447508751 4474669756 44771466603 444584871 445574805 447455471039 44777451345 447460345819 44793342963 44734838672 44752845528 4474537291 44779645078 
);

и вставка всего массива в виде одной записи, а не одного мобильного номера на строку в таблице mysql.

Код :

if (isset($_POST['submit'])) {
    if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
        echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>";
    echo "<h2>Displaying contents:</h2>";
    #    readfile($_FILES['filename']['tmp_name']);
}

//Import uploaded file to Database
$handle = fopen($_FILES['filename']['tmp_name'], "r");

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

           $import="INSERT into mobilecsv(phoneMobile,status) values('$data[0]',0)";

    mysql_query($import) or die(mysql_error());
}

fclose($handle);

print "Import done";

}

Я пробовал explode(), array_slice() и т. д., но ни один из них не помог мне разделить содержимое этого массива, чтобы сохранить его как отдельные записи/номера телефонов в базе данных mysql.

Как я могу разделить отдельное содержимое первого элемента массива (как в моем случае), чтобы сохранить его как отдельные отдельные записи, которые появляются в моем CSV? Я новый программист и был бы признателен за вашу помощь в этом отношении. Спасибо


person user3489398    schedule 13.08.2014    source источник
comment
Вы пытались взорвать (' ', $ data [0])?   -  person Webice    schedule 13.08.2014
comment
Если ваш файл на самом деле представляет собой просто одно значение в строке, тогда нет необходимости в бизнесе fgetcsv(). просто сделай $lines = file('whatever.csv'); foreach($lines as $line) { insert into db }   -  person Marc B    schedule 13.08.2014
comment
@Webice да, я пытался, но это не работает   -  person user3489398    schedule 13.08.2014
comment
Массив $data пополняется новыми данными, то же самое с запросом на выборку из MySQL. Вы не можете вывести результаты всех строк функции fgetcsv, если не сохраните каждую найденную строку в новый массив. Если вы добавите $lines = array(); Где-то перед циклом while. И добавьте это $lines[] = $data[0]; внутрь цикла while. Затем вы можете print_r() или var_dump массив $lines после цикла while все телефонные номера в правильном массиве.   -  person Rimble    schedule 13.08.2014
comment
@MarcB не работает, потому что значение находится в одном элементе массива :)   -  person user3489398    schedule 13.08.2014
comment
@TomKriek.it по-прежнему показывает тот же массив, что и выше. Без успеха :(   -  person user3489398    schedule 13.08.2014
comment
тогда у вас есть символы EOL в этом файле, которые php не понимает. например загрузка файла в Windows, когда это текстовый файл unix.   -  person Marc B    schedule 13.08.2014


Ответы (1)


Проблема в том, что fgetcsv не обнаруживает запятую, которая лежит в основе файла значений, разделенных запятыми (CSV). Добавьте эту строку вверху вашего файла после открывающего тега php:

ini_set("auto_detect_line_endings", true);

измените код импорта на:

//Import uploaded file to Database
$handle = fopen($_FILES['filename']['tmp_name'], "r");
while(($data = fgetcsv($handle)) !== FALSE){
$phoneMobile = $line[0];

$import="INSERT into mobilecsv(phoneMobile,status) values('$phoneMobile',0)";
mysql_query($import) or die(mysql_error());
}

fclose($handle);

print "Import done";

}
person Len_D    schedule 13.08.2014
comment
Квадратная скобка рядом с $phoneMobile - person Rimble; 13.08.2014
comment
Спасибо, Лен_Д. У меня сработало. Нужны небольшие правки. Великолепно :) - person user3489398; 13.08.2014