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数组及条件,循环语句学习
Nov 11 PHP
PHP递归算法的详细示例分析
Feb 19 PHP
php获取数组长度的方法(有实例)
Oct 27 PHP
使用ThinkPHP+Uploadify实现图片上传功能
Jun 26 PHP
PHP获取当前所在目录位置的方法
Nov 26 PHP
js+php实现静态页面实时调用用户登陆状态的方法
Jan 04 PHP
php使用post数组的键值创建同名变量并赋值的方法
Apr 03 PHP
php文件缓存类用法实例分析
Apr 22 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
Apr 20 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默认安装产生系统漏洞
2006/10/09 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
php使用include 和require引入文件的区别
2017/02/16 PHP
php异常处理捕获错误整理
2019/09/23 PHP
javascript中检测变量的类型的代码
2010/12/28 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
JavaScript利用正则表达式替换字符串中的内容
2016/12/12 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
JS设计模式之状态模式概念与用法分析
2018/02/05 Javascript
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
vue.js父子组件通信动态绑定的实例
2018/09/28 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
Python中os.path用法分析
2015/01/15 Python
pandas DataFrame 删除重复的行的实现方法
2019/01/29 Python
Python新手学习函数默认参数设置
2020/06/03 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
护理自我鉴定范文
2013/10/06 职场文书
童装店创业计划书
2014/01/09 职场文书
建议书标准格式
2014/03/12 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
2014年财务工作总结范文
2014/11/11 职场文书
2014年路政工作总结
2014/12/10 职场文书
人事文员岗位职责
2015/02/04 职场文书
小学少先队活动总结
2015/05/08 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android