Heim  >  Artikel  >  Backend-Entwicklung  >  [Technischer Fortschritt] So importieren und exportieren Sie CSV-Dateien mit PHP

[Technischer Fortschritt] So importieren und exportieren Sie CSV-Dateien mit PHP

黄舟
黄舟Original
2017-02-07 09:35:051541Durchsuche

Wir bereiten zunächst die MySQL-Datentabelle vor. Gehen wir davon aus, dass das Projekt über eine Tabelle „Schüler“ verfügt, in der die Schülerinformationen aufgezeichnet werden, und dass die ID, der Name, das Geschlecht und das Alter des Schülers entsprechend aufgezeichnet werden.

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;

Wir benötigen außerdem eine interaktive HTML-Seite, um das Importformular und die Exportschaltfläche zu platzieren.

<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=&#39;do.php? 
    action=export&#39;"></p> 
</form>

Nachdem Sie die lokale CSV-Datei ausgewählt haben, klicken Sie auf Importieren und senden Sie sie zur Verarbeitung an do.php?action=import. Klicken Sie dann auf die Schaltfläche Exportieren, um die Adresse do.php?action=export für Daten anzufordern Exportabwicklung.

CSV importieren

do.php muss die Import- und Exportprozesse entsprechend den erhaltenen Parametern separat verarbeiten. Die PHP-Struktur ist wie folgt:

include_once ("connect.php"); //连接数据库 
 
$action = $_GET[&#39;action&#39;]; 
if ($action == &#39;import&#39;) { //导入CSV 
   //导入处理 
} elseif ($action==&#39;export&#39;) { //导出CSV 
   //导出处理 
}

CSV importieren Verarbeitungsablauf: Überprüfung der Rechtmäßigkeit der CSV-Datei (in diesem Artikel ignoriert) -> Öffnen Sie die Lese- und Analysefelder in der CSV-Datei

-> -> Der Datentabelle stapelweise hinzufügen ->

if ($action == &#39;import&#39;) { //导入CSV 
    $filename = $_FILES[&#39;file&#39;][&#39;tmp_name&#39;]; 
    if (empty ($filename)) { 
        echo &#39;请选择要导入的CSV文件!&#39;; 
        exit; 
    } 
    $handle = fopen($filename, &#39;r&#39;); 
    $result = input_csv($handle); //解析csv 
    $len_result = count($result); 
    if($len_result==0){ 
        echo &#39;没有任何数据!&#39;; 
        exit; 
    } 
    for ($i = 1; $i < $len_result; $i++) { //循环获取各字段值 
        $name = iconv(&#39;gb2312&#39;, &#39;utf-8&#39;, $result[$i][0]); //中文转码 
        $sex = iconv(&#39;gb2312&#39;, &#39;utf-8&#39;, $result[$i][1]); 
        $age = $result[$i][2]; 
        $data_values .= "(&#39;$name&#39;,&#39;$sex&#39;,&#39;$age&#39;),"; 
    } 
    $data_values = substr($data_values,0,-1); //去掉最后一个逗号 
    fclose($handle); //关闭指针 
    $query = mysql_query("insert into student (name,sex,age) values $data_values");//批量插入数据表中 
    if($query){ 
        echo &#39;导入成功!&#39;; 
    }else{ 
        echo &#39;导入失败!&#39;; 
    } 
}

Beachten Sie, dass die PHP-eigene Funktion fgetcsv CSV problemlos verarbeiten kann. Verwenden Sie diese Funktion, um eine Zeile aus dem Dateizeiger zu lesen und das CSV-Feld zu analysieren. Die folgende Funktion analysiert die Felder der CSV-Datei und gibt sie als Array zurück.

function input_csv($handle) { 
    $out = array (); 
    $n = 0; 
    while ($data = fgetcsv($handle, 10000)) { 
        $num = count($data); 
        for ($i = 0; $i < $num; $i++) { 
            $out[$n][$i] = $data[$i]; 
        } 
        $n++; 
    } 
    return $out; 
}

Außerdem verwenden wir beim Importieren in die Datenbank die Stapeleinfügung, anstatt sie einzeln einzufügen. Daher müssen wir beim Erstellen der SQL-Anweisung eine kleine Verarbeitung durchführen, siehe Code.

CSV exportieren

Wir wissen, dass die CSV-Datei eine reine Textdatei ist, die aus Komma-Trennzeichen besteht. Sie können sie mit Excel öffnen und der Effekt ist der gleiche wie bei einer XLS-Tabelle.

CSV-Verarbeitungsablauf: Lesen Sie die Schülerinformationstabelle – > Schleifendatensätze, um durch Kommas getrennte Feldinformationen zu erstellen – >

... 
} elseif ($action==&#39;export&#39;) { //导出CSV 
    $result = mysql_query("select * from student order by id asc"); 
    $str = "姓名,性别,年龄\n"; 
    $str = iconv(&#39;utf-8&#39;,&#39;gb2312&#39;,$str); 
    while($row=mysql_fetch_array($result)){ 
        $name = iconv(&#39;utf-8&#39;,&#39;gb2312&#39;,$row[&#39;name&#39;]); //中文转码 
        $sex = iconv(&#39;utf-8&#39;,&#39;gb2312&#39;,$row[&#39;sex&#39;]); 
        $str .= $name.",".$sex.",".$row[&#39;age&#39;]."\n"; //用引文逗号分开 
    } 
    $filename = date(&#39;Ymd&#39;).&#39;.csv&#39;; //设置文件名 
    export_csv($filename,$str); //导出 
}

Um die Daten lokal zu exportieren, müssen Sie die Header-Informationen ändern. Der Code lautet wie folgt:

function export_csv($filename,$data) { 
    header("Content-type:text/csv"); 
    header("Content-Disposition:attachment;filename=".$filename); 
    header(&#39;Cache-Control:must-revalidate,post-check=0,pre-check=0&#39;); 
    header(&#39;Expires:0&#39;); 
    header(&#39;Pragma:public&#39;); 
    echo $data; 
}

Achten Sie auf den Import- und Exportprozess, denn wir Wenn Sie die einheitliche UTF-8-Kodierung verwenden, müssen Sie bei der Begegnung mit chinesischen Zeichen daran denken, diese zu transkodieren, da die chinesischen Zeichen sonst möglicherweise verstümmelt werden.

Das Obige ist [Technischer Fortschritt] So importieren und exportieren Sie CSV-Dateien in PHP. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn