yii2.0框架实现上传excel文件后导入到数据库的方法示例


Posted in PHP onApril 13, 2020

本文实例讲述了yii2.0框架实现上传excel文件后导入到数据库的方法。分享给大家供大家参考,具体如下:

Model模型

<?php
/**
 * 描述...
 * @author zcy
 * @date 2019/8/13
 */

namespace app\models;

use yii\base\Model;
use yii\db\ActiveRecord;
use yii\web\UploadedFile;

class uploadForm extends ActiveRecord
{
  public $file;

  public function rules()
  {
    return [
      [['file'],'file', 'skipOnEmpty' => false,'extensions' => 'xls,xlsx'],
    ];
  }

  public function attributeLabels()
  {
    return [
      'file'=> '上传文件'
    ];
  }

  public function upload()
  {
    $file = UploadedFile::getInstance($this, 'file');

    if ($this->rules()) {
      $tmp_file = $file->baseName . '.' . $file->extension;
      $path = 'upload/' . 'Files/';
      if (is_dir($path)) {
        $file->saveAs($path . $tmp_file);
      } else {
        mkdir($path, 0777, true);
      }
      $file->saveAs($path . $tmp_file);
      return true;
    } else {
      return '验证失败';
    }
  }

}

Views视图

<?php

use yii\widgets\ActiveForm;

$model = new app\models\uploadForm();
$form = ActiveForm::begin([
  'id' => 'upload',
  'options' => ['enctype' => 'multipart/form-data'],
])
?>

<?= $form->field($model,'file')->fileInput(['multiple'=>'multiple']) ?>

  <button>上传</button>
<?php ActiveForm::end() ?>

Controller控制器

<?php
/**
 * 描述...
 * @author zcy
 * @date 2019/8/16
 */

namespace app\controllers;

use app\models\uploadForm;
use Yii;
use yii\web\Controller;
use yii\web\UploadedFile;

class UploadController extends Controller
{
  /**
   * 导入
   * @author zcy
   * @date 2019/8/16
   */
  public function actionImport()
  {
    $model = new uploadForm();

    if (Yii::$app->request->isPost) {
      $model->file = UploadedFile::getInstance($model,'file');
//      if ($model->upload()) {
//        print <<<EOT
// <script>alert('上传成功')</script>
//EOT;
//      } else {
//        print <<<EOT
// <script>alert('上传失败')</script>
//EOT;
//      }
      if (!$model->upload()) {
        print <<<EOT
 <script>alert('上传失败')</script>
EOT;
      }
    }

    $ok = 0;
    if ($model->load(Yii::$app->request->post())) {
      $file = UploadedFile::getInstance($model,'file');

      if ($file) {
        $filename = 'upload/Files/' . $file->name;
        $file->saveAs($filename);

        if (in_array($file->extension,array('xls','xlsx'))) {
          $fileType = \PHPExcel_IOFactory::identify($filename);//文件名自动判断类型
          $excelReader = \PHPExcel_IOFactory::createReader($fileType);

          $phpexcel = $excelReader->load($filename)->getSheet(0);//载入文件并获取第一个sheet
          $total_line = $phpexcel->getHighestRow();//总行数
          $total_column = $phpexcel->getHighestColumn();//总列数

          if (1 < $total_line) {
            for ($row = 2;$row <= $total_line;$row++) {
              $data = [];
              for ($column = 'A';$column <= $total_column;$column++) {
                $data[] = trim($phpexcel->getCell($column.$row));
              }

              $info = Yii::$app->db->createCommand()
->insert('{{%shop_info}}',['shop_name' => $data[0],'shop_type' => $data[1]])
->execute();

              if ($info) {
                $ok = 1;
              }
            }
          }

          if ($ok == 1) {
            echo "<script>alert('导入成功');window.history.back();</script>";
          } else {
            echo "<script>alert('操作失败');window.history.back();</script>";
          }
        }
      }
    } else {
      return $this->render('import',['model' => $model]);
    }
  }
}

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP和ACCESS写聊天室(八)
Oct 09 PHP
?算你??的 PHP 程式大小
Dec 06 PHP
PHP之数组学习
May 29 PHP
php计算2个日期的差值函数分享
Feb 02 PHP
php获取访问者IP地址汇总
Apr 24 PHP
php计算整个目录大小的方法
Jun 01 PHP
phpcms中的评论样式修改方法
Oct 21 PHP
PHP 搜索查询功能实现
Nov 29 PHP
谈谈php对接芝麻信用踩的坑
Dec 01 PHP
PHP实现对xml的增删改查操作案例分析
May 19 PHP
在php的yii2框架中整合hbase库的方法
Sep 20 PHP
PHP使用OB缓存实现静态化功能示例
Mar 23 PHP
php回调函数处理数组操作示例
Apr 13 #PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 #PHP
laravel使用数据库测试注意事项
Apr 10 #PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 #PHP
再谈Yii Framework框架中的事件event原理与应用
Apr 07 #PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 #PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 #PHP
You might like
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
JS实现的样式切换功能tableCSS实例
2016/12/30 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
2019/06/18 jQuery
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
django rest framework之请求与响应(详解)
2017/11/06 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
Django实现发送邮件功能
2019/07/18 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
留学自荐信的技巧
2013/10/17 职场文书
春节联欢会策划方案
2014/05/16 职场文书
2014年副班长工作总结
2014/12/10 职场文书
2015年考研复习计划
2015/01/19 职场文书
赞助商致辞
2015/07/30 职场文书
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技