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程序
Oct 09 PHP
PHP常用代码大全(新手入门必备)
Jun 29 PHP
php下网站防IP攻击代码,超级实用
Oct 24 PHP
php数组的一些常见操作汇总
Jul 17 PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
Aug 12 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
Jun 29 PHP
Symfony数据校验方法实例分析
Jan 26 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
Oct 27 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
Oct 17 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 PHP
PHP实现简单的计算器
Aug 28 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
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
DIV菜单层实现代码
2010/11/19 Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
2011/02/12 Javascript
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
javascript制作坦克大战全纪录(2)
2014/11/27 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
JavaScript中严格判断NaN的方法
2018/02/16 Javascript
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
python基础教程之面向对象的一些概念
2014/08/29 Python
Python实现子类调用父类的方法
2014/11/10 Python
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
Python趣味入门教程之循环语句while
2020/08/26 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
高山背包:High Sierra
2017/11/23 全球购物
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
给老婆的搞笑检讨书
2014/01/12 职场文书
技校毕业生个人学习的自我评价
2014/02/21 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
Python实现智慧校园自动评教全新版
2021/06/18 Python
html5调用摄像头截图功能
2022/01/18 Javascript
一文弄懂MySQL索引创建原则
2022/02/28 MySQL