PHP / MYSQL Загрузить, импортировать CSV-файл в mysql-process-table design

Я хочу, чтобы пользователи загружали свои контакты из CSV-файла (экспортированного из различных программ управления контактами) на сервер, а затем сохраняли его в mysql. Из того, что я прочитал в SO и в других местах, MYSQL может импортировать данные с помощью LOAD DATA INFILE. Также кажется, что есть ЛОКАЛЬНЫЙ вариант, чтобы получить его со стороны клиента. Мой вопрос из трех частей: нужно ли использовать загрузку файла, чтобы получить файл на сервере, или я могу получить к нему доступ через LOCAL вариант LOAD DATA INFILE? Поскольку приложение будет обслуживать нескольких пользователей с их контактами, я должен поместить все контакты в одну таблицу? Так как разные пользователи будут иметь разные структуры в своих CSV-файлах, что лучше всего подходит для обработки несоответствий в fieldnames / schema в разных CSV-файлах?

Ориентировочный код:

<html> <body> <form action="getcsvile.php" method="post" enctype="multipart/form-data"> <input type="file" size=12 name="file" id="file" /><input type="submit" name="submit" value="Upload CSV File" /></form> <body> </html> <?php $userid = $_SESSION['userid']; //error checking to make sure .csv file and other requirements met...then //get extension, set to $ext $target = "csvfiles/".$userid.".".$ext; move_uploaded_file($_FILES["file"]["tmp_name"],$target); //NEED TO PARSE DATA USING fgetcsv or something to examine, clean up csv data? $sql = "LOAD DATA LOCAL INFILE '$target' INTO TABLE contacts FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES";// IS LOCAL right? MySQL_query($sql); $sql2 = "UPDATE contacts SET userid = '$userid'; MySQL_query($sql2); echo "success; 

Это похоже на правильный подход? Насколько трудно, вероятно, разместить различные файлы csv от разных пользователей?

Большое спасибо.

  1. Помните, что «клиент» с точки зрения MySQL – это приложение, которое напрямую связано с ним. В вашем случае это PHP. Тот факт, что «клиент» PHP является веб-браузером пользователя, не имеет значения – и вы почти наверняка не хотите, чтобы ваши пользователи напрямую подключались к серверу MySQL.

    Таким образом, вы можете использовать LOCAL для передачи файла с PHP на MySQL, если они работают на разных компьютерах, но это было бы лишним, если бы они находились на одной машине, а MySQL имеет доступ к чтению из того места, где PHP написал файл ,

  2. Это действительно зависит от того, что вы собираетесь делать с данными, но в целом – да, положите все это на одну таблицу.

  3. В инструкции LOAD DATA вы можете указать MySQL, какие столбцы на карте CSV, в которые в таблице – вы могли бы либо сделать некоторые догадки на основе содержимого файла (особенно, если оно содержит строку заголовка), либо на основе подсказки, предоставленной пользователь, например, с какого программного обеспечения возникло CSV; или, если вы не можете решить, как CSV сопоставляется с таблицей, вы можете представить короткий образец пользователю в браузере и попросить его разрешить его.

Выполните следующие шаги для импорта файла контактов csv

Шаг 1. Загрузите файл, используя форму HTML. Шаг 2. Откройте файл, используя fopen.

 Example $file=fopen($_FILES['file1']['tmp_name'],'r'); 

Шаг 3. Прочитайте содержимое файла, используя fgetcsv. здесь вам нужно использовать цикл while

Пример: –

 while($data = fgetcsv ($handle, 3000, ",")) { //write sql query to insert data in database $q="insert into contacts values($data[0],$data[1])"; } 

Если вы хотите разрешить нескольким пользователям загружать файлы с различными структурами. Создайте устройство сопоставления столбцов. Например, дайте им что-то вроде следующего

 User File Fields Mapping Fields (Database table fields) Field 1 Name //Here you have to give a drop down menu Field 2 Phone Number //Here you have to give a drop down menu Field 3 Email Address //Here you have to give a drop down menu