1

我想让用户将他们的联系人从 .csv 文件(从各种联系人管理程序导出)上传到服务器,然后将其保存在 mysql 中。根据我在 SO 和其他地方阅读的内容,MYSQL 可以使用 LOAD DATA INFILE 导入数据。似乎还有一个本地选项可以从客户端获取它。我的三部分问题是:我需要使用文件上传将文件上传到服务器还是可以通过 LOAD DATA INFILE 的 LOCAL 选项直接访问它?由于该应用程序将使用他们的联系人为多个用户提供服务,我应该将所有联系人放在一张表中吗?由于不同的用户在他们的 .csv 文件中会有不同的结构,在不同的 .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 文件可能有多难?

非常感谢。

4

2 回答 2

3
  1. 请记住,从 MySQL 的角度来看,“客户端”是直接连接到它的应用程序。在你的情况下,那就是 PHP。PHP 的“客户端”是用户的网络浏览器这一事实是无关紧要的——而且您几乎肯定不希望您的用户直接连接到 MySQL 服务器。

    因此,LOCAL如果它们在不同的机器上运行,您可能会使用将文件从 PHP 传递到 MySQL,但如果它们在同一台机器上并且 MySQL 有权从 PHP 写入文件的任何位置读取,则这是不必要的。

  2. 这实际上取决于您将如何处理数据,但总的来说 - 是的,将它们全部放在一张表中。

  3. LOAD DATA语句中,您可以告诉 MySQL CSV 中的哪些列映射到表中的哪些列 - 您可以根据文件内容(特别是如果它包含标题行)或根据用户提供的提示进行一些猜测,例如CSV 源自哪个软件;或者,如果您无法决定 CSV 如何映射到表格,您可以在浏览器中向用户展示一个简短的示例并要求他们解决它。

于 2012-05-18T17:45:06.463 回答
0

按照以下步骤导入 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
于 2012-05-18T18:01:13.550 回答