2012-01-15 12 views
0

次のスクリプトを使用して、CSVファイルからmysqlデータベースにデータをインポートしています。 CSVは、このような設定である:私が午前問題は、いくつかのためであるCSVファイルをアップロードしてエラーを返すmysqlにインポートする

name,postcode 
frank,ng435tj 

:上記

Name Postcode 
fred hd435hg 
bob dh345fj 

メモ帳で見る生のcsv形式で、それはこのようになり、それはExcelで次のようになりますなぜなら、郵便番号列がまったくインポートされない理由は、ヘッダー行もレコードとしてインポートされているからです。最初の行をスキップすることは可能ですか?私はコードを読んでいて、郵便番号が引き込まれていない理由を見ることができません。それは非常に奇妙です。

 <?php 
    //database connect info here 

    //check for file upload 
    if(isset($_FILES['csv_file']) && is_uploaded_file($_FILES['csv_file']['tmp_name'])){ 

     //upload directory 
     $upload_dir = "./csv"; 

     //create file name 
     $file_path = $upload_dir . $_FILES['csv_file']['name']; 

     //move uploaded file to upload dir 
     if (!move_uploaded_file($_FILES['csv_file']['tmp_name'], $file_path)) { 

      //error moving upload file 
      echo "Error moving file upload"; 

     } 

     //open the csv file for reading 
     $handle = fopen($file_path, 'r'); 


     while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) { 

      //Access field data in $data array ex. 
      $name = $data[0]; 
      $postcode = $data[1]; 

      //Use data to insert into db 
      $sql = sprintf("INSERT INTO test (name, postcode) VALUES ('%s',%d)", 
         mysql_real_escape_string($name), 
         $postcode 
         ); 
      mysql_query($sql) or (mysql_query("ROLLBACK") and die(mysql_error() . " - $sql")); 
     } 


     //delete csv file 
     unlink($file_path); 
    } 
    ?> 

答えて

2

あなたのCSVファイルは実際にはTSVファイルのようです。コンマは使用しませんが、フィールドを区切るための表を使用します。

したがって、fgetcsvコールを変更する必要があります。一方のブロックの前に別ののどfgetcsvを追加し、

while (($data = fgetcsv($handle, 1000, "\t") ... 

また、ヘッダー行をスキップする:最初の行をスキップし

fgetcsv($handle); 
while (...) { 

を代わり','のタブを使用します。 (シンプルfgetsも行うだろう。)


ちょうど気づいああ、:あなたは$postcodeためsprintfプレースホルダ%dと小数として文字列に変換しCONCATので、郵便番号も削除される可能性があります。あなたの例のように、フィールドに実際に文字が含まれていれば、動作しません。 - 私はそれがちょうど間違った例のプリントアウトだと推測していますが。

+0

こんにちは、申し訳ありませんthatsの私はExcelで開いたので、私はメモ帳で開く場合には、この – user1148760

+0

名、率直郵便番号 のように見え、ng435tj – user1148760

+0

ええとああ、わかりました。それから、今までの私の理論をすべて無視してください。 – mario

0

これを試してください。

$file = $_FILES['file']['tmp_name']; 

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

     while(($fileop = fgetcsv($handle,1000,",")) !==false) 
     { 
      $username = $fileop[0]; 
      $name = $fileop[1]; 
      $address = $fileop[2]; 

      $sql = mysql_query("INSERT INTO ...... "); 
     } 
関連する問題