0

現時点では、Web サーバーに手動でアップロードした「data.csv」という CSV ファイルからデータを取得できます。その後、データをデータベースにアップロードできますが、これはすべて正常に機能します。

私ができる必要があるのは:

  1. ファイルを Web サーバーのルート ディレクトリにアップロードするだけです。
  2. CSV ファイルのヘッダーの順序に関係なく、たとえば、あるユーザーが列の順序が (名前 | メール | アドレス) である CSV ファイルをアップロードしたとしても、別のユーザーが CSV ファイルの順序が列はそうです(メール | アドレス | 名前)。したがって、基本的に、CSV ヘッダーの名前がテーブル内のフィールド名の名前と一致する正しいデータベース フィールドに適切なデータをアップロードする必要がありますか?

以下のコード:

アップロード.php

<?php

include('config.php');

$file = "data.csv";
$separator = ",";
$length = 0; 
$fields = array('title', 'firstName', 'secondName', 'emailAddress', 'houseNumber', 'mobileNumber', 'address1', 'address2', 'address3', 'address4', 'postcode'); 

$handle = fopen($file, "r");

$header = array_flip(fgetcsv($handle, $length, $separator));

$values = array();

$i = 1;

while(($csvData = fgetcsv($handle, $length, $separator)) !== false){

$values = array();

echo $i." - You have inserted another row of data into the database.<br>";

    foreach ($fields as $field){
        $values[] = $csvData[$header[$field]];
    }

    mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES ('" . implode("','", $values) . "')"); 

$i++;

}

fclose($handle);

?>

私がこれを適切に説明していないかどうか尋ねてください。

前もって感謝します。

4

1 に答える 1

2

以下はあなたにとって完全な解決策になるはずです。

あなたのhtmlで

<form enctype="multipart/form-data" action="sompepage.php" method="POST">
<!-- MAX_FILE_SIZE must precede the file input field -->
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<!-- Name of input element determines name in $_FILES array -->
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>

PHP の場合 (somepage.php)

<?php
include('config.php');
$file = $_FILES['userfile']['tmp_name'];
$separator = ",";
$length = 0; 
$fields = array('title', 'firstName', 'secondName', 'emailAddress', 'houseNumber', 'mobileNumber', 'address1', 'address2', 'address3', 'address4', 'postcode'); 

$handle = fopen($file, "r");

$header = array_flip(fgetcsv($handle, $length, $separator));

$values = array();

$i = 1;

while(($csvData = fgetcsv($handle, $length, $separator)) !== false){

$values = array();

echo $i." - You have inserted another row of data into the database.<br>";

    foreach ($fields as $field){
        $values[] = $csvData[$header[$field]];
    }
    $values = array_map("mysql_real_escape_string", $values);
    mysql_query("INSERT INTO csv (" . implode(',', $fields) . ") VALUES ('" . implode("','", $values) . "')"); 

$i++;

}

fclose($handle);

?>
于 2013-07-09T19:31:04.667 に答える