Maison  >  Article  >  développement back-end  >  PHP implémente les fonctions d'importation et d'exportation de données au format CSV

PHP implémente les fonctions d'importation et d'exportation de données au format CSV

墨辰丷
墨辰丷original
2018-06-06 17:00:592364parcourir

Cet article présente principalement comment PHP implémente la fonction d'importation et d'exportation de données au format CSV. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Nous préparons d'abord la table de données MySQL. Supposons que le projet ait une table student qui enregistre les informations sur l'étudiant, et qu'il dispose d'un identifiant, d'un nom, d'un sexe, d'un âge pour enregistrer respectivement le nom, le sexe, l'âge et d'autres informations de l'étudiant.

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;

Nous avons également besoin d'une page html interactive pour placer le formulaire d'importation et le bouton d'exportation.

<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>

Après avoir sélectionné le fichier csv local, cliquez sur Importer et soumettez-le à do.php?action=import pour traitement, puis cliquez sur le bouton Exporter pour demander l'adresse do.php?action=export pour les données. traitement d'exportation.

1. Importer CSV
do.php doit gérer les processus d'importation et d'exportation séparément en fonction des paramètres obtenus :

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

Flux de traitement d'importation CSV : Vérifier la légalité du fichier csv (ignoré dans cet article) ->Ouvrir les champs du fichier csv qui sont lus et analysés ->Boucler pour obtenir les valeurs de chaque champ - > Ajouter au tableau de données par lots ->

if ($action == &#39;import&#39;) { //导入CSV 
 $filename = $_FILES[&#39;file&#39;][&#39;tmp_name&#39;]; 
 if(emptyempty ($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;; 
 } 
}

Notez que la propre fonction fgetcsv de PHP peut facilement gérer le csv. Utilisez cette fonction pour lire une ligne à partir du pointeur de fichier et analyser le champ CSV. La fonction ci-dessous analyse les champs du fichier csv et les renvoie sous forme de tableau.

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; 
}

De plus, lors de l'importation dans la base de données, nous utilisons l'insertion par lots au lieu d'insérer un par un, donc lors de la construction de l'instruction SQL, nous devons faire un petit traitement, voir le code.

2. Exporter CSV
Nous savons que le fichier csv est un fichier texte brut composé de délimiteurs par virgules. Vous pouvez l'ouvrir avec Excel et l'effet est le même que celui du tableau xls.
Exporter le flux de traitement CSV : lire le tableau d'informations sur l'étudiant-> boucler les enregistrements pour construire des informations de champ séparées par des virgules-> définir les informations d'en-tête-> Pour exporter les données vers l'ordinateur local, vous devez modifier les informations d'en-tête. Le code est le suivant :

... 
}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); //导出 
}

Résumé : Ce qui précède représente l'intégralité du contenu de cet article. tout le monde apprend.

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; 
}
Recommandations associées :

Analyse des concepts et exemples d'utilisation de classes abstraites et de méthodes abstraites en PHP

Exemples d'héritage et d'utilisation de classes en PHP Explication détaillée

Comment PHP implémente la fonction d'affichage de pagination de données

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn