0

この問題に関するいくつかの質問を見ましたが、どれも私を助けることができませんでした.

これは私が使用しているスクリプトです。

<?php  

//connect to the database 
$connect = mysql_connect("localhost","username","password"); 
mysql_select_db("mydatabase",$connect); //select the table 
// 

if ($_FILES[csv][size] > 0) { 

    //get the csv file 
    $file = $_FILES[csv][tmp_name]; 
    $handle = fopen($file,"r"); 

    //loop through the csv file and insert into database 
    do { 
        if ($data[0]) { 
            mysql_query("INSERT INTO contacts (contact_first, contact_last, contact_email) VALUES 
                ( 
                    '".addslashes($data[0])."', 
                    '".addslashes($data[1])."', 
                    '".addslashes($data[2])."' 
                ) 
            "); 
        } 
    } while ($data = fgetcsv($handle,1000,",","'")); 
    // 

    //redirect 
    header('Location: import.php?success=1'); die; 

} 

?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Import a CSV File with PHP & MySQL</title> 
</head> 

<body> 

<?php if (!empty($_GET[success])) { echo "<b>Your file has been imported.</b><br><br>"; } //generic success notice ?> 

<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
  Choose your file: <br /> 
  <input name="csv" type="file" id="csv" /> 
  <input type="submit" name="Submit" value="Submit" /> 
</form> 

</body> 
</html> 

このままでも問題なく動作しますが、ヘッダー行を定義することはできません。

私がやりたいことは、可能であれば、最初の行から各列を取得し、それを使用して、データベース内でアイテムが配置される列を定義することです。

$data[0]だから私はcsvファイルで定義された各列に分割したい. 使ってみLOAD DATA LOCAL INFILEたのですが、なぜかうまくいきません。

4

1 に答える 1

2

最初の行を最初に取得し、そこから列リスト文字列を作成したい場合があります。

<?php

if ($_FILES[csv][size] > 0) { 

    //get the csv file 
    $file = $_FILES[csv][tmp_name]; 
    $handle = fopen($file,"r"); 

    // get headers
    $columns = fgetcsv($handle,1000,",","'");
    $column_list = implode(",",$columns);

    //loop through the csv file and insert into database 
    while ($data = fgetcsv($handle,1000,",","'")) { 
        if ($data[0]) { 
        for ($i=0;$i<count($columns);$i++){
            $data[$i]="'".mysql_real_escape_string($data[$i])."'";
        }
        $values = implode(",",$data);

        $query = "INSERT INTO contacts ($column_list) ($values)";

        mysql_query($query);

        } 
    }

    //redirect 
    header('Location: import.php?success=1'); die; 

} 
于 2012-11-15T23:32:56.633 に答える