PHPを使用してCSVファイルのインポートとエクスポート(転送)--良い文章は共有します!

8191 ワード

まずmysqlデータテーブルを用意し,プロジェクトに学生情報を記録するテーブルstudentがあり,id,name,sex,ageが学生の名前,性別,年齢などの情報をそれぞれ記録していると仮定する.
 
CREATE TABLE `student` ( 
  `id` int(11) NOT NULL auto_increment, 
  `name` varchar(50) NOT NULL, 
  `sex` varchar(10) NOT NULL, 
  `age` smallint(3) NOT NULL default '0', 
  PRIMARY KEY  (`id`) 
) ENGINE=MyISAM  DEFAULT CHARSET=utf8; 

htmlインタラクティブページが必要です.インポートフォームとエクスポートボタンを配置します.
  <form id="addform" action="do.php?action=import" method="post" enctype="multipart/form-data"> 
    <p>       CSV  :<br/><input type="file" name="file"> <input type="submit" 
    class="btn" value="  CSV"> 
    <input type="button" class="btn" value="  CSV" onclick="window.location.href='do.php? 
    action=export'"></p>  </form> 

ローカルcsvファイルを選択したら、インポートをクリックしdoにコミットします.php?Action=import処理は、エクスポートボタンをクリックするアドレスdoを要求する.php?Action=exportでデータエクスポート処理を行います.
1.CSV導入
do.phpはgetからのパラメータに基づいて、インポートとエクスポートプロセスをそれぞれ処理する必要があります.php構造は以下の通りです.
  include_once ("connect.php"); //      
  $action = $_GET['action'];  if ($action == 'import') { //  CSV 
   //     
} elseif ($action=='export') { //  CSV 
   //     
} 

CSV処理プロセスのインポート:csvファイルの正当性の検証(本明細書では無視)->csvファイルの読み込みと解析のフィールドのオープン->各フィールド値のループ取得->データテーブルへの一括追加->完了.
  if ($action == 'import') { //  CSV 
    $filename = $_FILES['file']['tmp_name']; 
    if (empty ($filename)) { 
        echo '       CSV  !'; 
        exit; 
    } 
    $handle = fopen($filename'r'); 
    $result = input_csv($handle); //  csv 
    $len_result = count($result); 
    if($len_result==0){ 
        echo '      !'; 
        exit; 
    } 
    for ($i = 1$i < $len_result$i++) { //         
        $name = iconv('gb2312''utf-8'$result[$i][0]); //     
        $sex = iconv('gb2312''utf-8'$result[$i][1]); 
        $age = $result[$i][2]; 
        $data_values .= "('$name','$sex','$age'),"; 
    } 
    $data_values = substr($data_values,0,-1); //         
    fclose($handle); //     
    $query = mysql_query("insert into student (name,sex,age) values $data_values");//         
    if($query){ 
        echo '    !'; 
    }else{ 
        echo '    !'; 
    } 
} 

phpが持つfgetcsv関数は、ファイルポインタから1行を読み込んでCSVフィールドを解析するcsvを簡単に処理できます.次の関数はcsvファイルフィールドを解析し、配列として返します.
  function input_csv($handle) { 
    $out = array (); 
    $n = 0; 
    while ($data = fgetcsv($handle10000)) { 
        $num = count($data); 
        for ($i = 0$i < $num$i++) { 
            $out[$n][$i] = $data[$i]; 
        } 
        $n++; 
    } 
    return $out; 
} 

また、データベースにインポートするときは、1つのバーではなく一括挿入を使用します.したがって、SQL文を構築するときは、コードを参照してください.
2.CSVのエクスポート
csvファイルはカンマ分割子からなる純粋なテキストファイルであることを知っています.excelで開くことができます.効果はxlsテーブルと同じです.
CSVのエクスポート処理プロセス:学生情報テーブルの読み込み->カンマ区切りを作成するフィールド情報のループ記録->ヘッダー情報の設定->ファイルのエクスポート(ダウンロード)ローカルへ
 
... 
} elseif ($action=='export') { //  CSV 
    $result = mysql_query("select * from student order by id asc"); 
    $str = "  ,  ,  
"
;      $str = iconv('utf-8','gb2312',$str);      while($row=mysql_fetch_array($result)){          $name = iconv('utf-8','gb2312',$row['name']); //           $sex = iconv('utf-8','gb2312',$row['sex']);          $str .= $name.",".$sex.",".$row['age']."
"
//       }      $filename = date('Ymd').'.csv'//       export_csv($filename,$str); //   } 

データをローカルにエクスポートするには、header情報を変更する必要があります.コードは次のとおりです.
  function export_csv($filename,$data) { 
    header("Content-type:text/csv"); 
    header("Content-Disposition:attachment;filename=".$filename); 
    header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); 
    header('Expires:0'); 
    header('Pragma:public'); 
    echo $data; 
} 

注意インポートとエクスポートの過程では、統一UTF-8符号化を使用しているため、中国語の文字に遭遇した場合は必ずトランスコードを覚えておく必要があります.そうしないと、中国語が文字化けしてしまう可能性があります.