1

ユーザーが .csv ファイル (さまざまな連絡先管理プログラムからエクスポートされたもの) から連絡先をサーバーにアップロードし、それを mysql に保存できるようにしたいと考えています。SO などで読んだことから、MYSQL は LOAD DATA INFILE を使用してデータをインポートできます。また、クライアント側から取得するための LOCAL オプションがあるようです。私の 3 つの質問は次のとおりです。サーバーにファイルを取得するためにファイル アップロードを使用する必要がありますか、それとも LOAD DATA INFILE の LOCAL オプションを介して直接アクセスできますか? アプリケーションは連絡先を持つ複数のユーザーにサービスを提供するため、すべての連絡先を 1 つのテーブルに配置する必要がありますか? ユーザーごとに .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 の「クライアント」がユーザーの Web ブラウザーであるという事実は関係ありません。また、ユーザーが MySQL サーバーに直接接続することはほぼ確実に望ましくありません。

    したがって、LOCAL異なるマシンで実行されている場合は、PHP から MySQL にファイルを渡すために使用できますが、それらが同じマシン上にあり、PHP がファイルを書き込んだ場所から MySQL が読み取るアクセス権を持っている場合は不要です。

  2. それは実際にデータをどうするかによって異なりますが、全体としては - はい、すべてを 1 つのテーブルにまとめます。

  3. ステートメントではLOAD DATA、CSV のどの列がテーブルのどの列にマップされるかを MySQL に伝えることができます。ファイルの内容 (特にヘッダー行が含まれている場合) に基づいて推測するか、ユーザーから提供されたヒントに基づいて推測することができます。 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 に答える