当前位置:Gxlcms > php框架 > php实现批量上传数据到数据库(.csv格式)的案例

php实现批量上传数据到数据库(.csv格式)的案例

时间:2021-07-01 10:21:17 帮助过:45人阅读

友情提示:上传数据的文档需要转化为.csv格式的文档

前端代码:

  1. <form name="importForm" action="import.php" method="POST" enctype="multipart/form-data">
  2. <input type="hidden" value="import_goods" name="file">
  3. <table cellpadding="2" cellspacing="1" class="tb">
  4. <tbody>
  5. <tr>
  6. <td width="200">选择批量上传文档:</td>
  7. <td><input type="file" name="upfilename" id="upfilename" value=""></td>
  8. </tr>
  9. <tr>
  10. <td colspan="2">
  11. <input type="submit" name="submit" value="提交" class="btn">
  12. </td>
  13. </tr>
  14. </tbody>
  15. </table>
  16. </form>

后端代码:import.php文件(这里只粘贴主要代码,具体实现方法需自己完成)

  1. if(isset($_POST['submit'])){
  2. stripos(PHP_OS, "WIN") !== false ? setlocale(LC_ALL, '') : setlocale(LC_ALL,'zh_CN.GBK');
  3. $fext = substr($_FILES['upfilename']['name'], strrpos($_FILES['upfilename']['name'], '.') + 1);
  4. if ($fext != 'csv') {
  5. die('请上传csv格式的文件',HTTP_REFERER);
  6. }
  7. $handle = @fopen($_FILES['upfilename']['tmp_name'], "rb");
  8. $i = 0;
  9. $import_type = '';
  10. if ($handle)
  11. {
  12. while($line_data = fgetcsv($handle, 4096, ','))
  13. {
  14. if ($i == 0) {
  15. $import_type = trim($line_data[0]);
  16. $i = 1;
  17. } elseif (intval($line_data[0])) {
  18. $line_list[] = $line_data;
  19. }
  20. }
  21. }
  22. //循环转换数据格式
  23. foreach ($line_list as $i=> $v)
  24. {
  25. foreach ($v as $j=> $value)
  26. {
  27. $line_list[$i][$j] = iconv('GBK', 'UTF-8//IGNORE',$line_list[$i][$j]);
  28. }
  29. }//编码转换
  30. fclose($handle);
  31. if(!empty($line_list))
  32. {
  33. // 登记号
  34. $sn = array();
  35. $top_catid = 0;
  36. $name = '';
  37. $func_name = '';
  38. switch ($import_type) {
  39. case 'patent';
  40. $top_catid = 5;
  41. $name = '专利申请号';
  42. $func_name = 'deal_import_patent';
  43. break;
  44. case 'trademark';
  45. $top_catid = 4;
  46. $name = '商标注册号';
  47. $func_name = 'deal_import_trademark';
  48. break;
  49. case 'copyright';
  50. $top_catid = 2185;
  51. $name = '登记号';
  52. $func_name = 'deal_import_copyright';
  53. break;
  54. default:
  55. die('上传文档未明确指定知产类型!');
  56. break;
  57. }
  58. if ($import_type == 'patent') {
  59. foreach($line_list as $lkey => $lval) {
  60. $lval[2] = trim($lval[2]);
  61. if ($lval[2] == '专利技术') {
  62. // 技术专利
  63. if(!empty($lval[1])) {
  64. if(in_array($lval[1],$sn))
  65. {
  66. die('列表中序号为'.$lval[0].'的知产的'.$name.$lval[1].'与前面的出现重复!');//判断是否有重复的数据(根据自己所需判断)
  67. }
  68. $sn[] = trim($lval[1]);
  69. } else {
  70. die('列表中序号为'.$lval[0].'的知产的'.$name.'为空!');
  71. }
  72. } else {
  73. // 非技术专利
  74. $line_list[$lkey][1] = '';
  75. }
  76. }
  77. } elseif ($import_type == 'trademark') {
  78. foreach($line_list as $lkey => $lval) {
  79. if(!empty($lval[1])) {
  80. if(in_array($lval[1],$sn))
  81. {
  82. die('列表中序号为'.$lval[0].'的知产的'.$name.'与前面的出现重复!');
  83. }
  84. $sn[] = $lval[1];
  85. } else {
  86. die('列表中序号为'.$lval[0].'的知产的'.$name.'为空!');
  87. }
  88. }
  89. }
  90. if (!empty($sn)) {
  91. $sql = 'SELECT serial_number FROM ' .$table_name. ' WHERE top_catid = '.$top_catid.' AND serial_number IN (\'' .implode("','", $sn). '\')';
  92. $result = $goods_db->query($sql);
  93. $r = $goods_db->fetch_array();
  94. $exist = array();
  95. foreach ($r as $k=>$v){
  96. $exist[] = $v['serial_number'];
  97. }
  98. if (!empty($exist)) die($name.'为:'.implode(',',$exist).'的知产已存在');//数据库中是否有相同的数据(根据自己所需判断)
  99. }
  100. // 调用处理函数
  101. self::$func_name($line_list);//此时$line_list即为你上传文档的数据,数组格式,根据自己所需将数据导入数据库
  102. die('批量导入完成!');
  103. }
  104. }

.csv文档的格式为:

以上这篇php实现批量上传数据到数据库(.csv格式)的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

人气教程排行