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 相关文章推荐
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
gd库图片下载类实现下载网页所有图片的php代码
Aug 20 PHP
PHP中array_map与array_column之间的关系分析
Aug 19 PHP
php中file_exists函数使用详解
May 08 PHP
PHP统计目录中文件以及目录中目录大小的方法
Jan 09 PHP
yii2 页面底部加载css和js的技巧
Apr 21 PHP
基于php中echo用逗号和用点号的区别详解
Jan 23 PHP
PHP面向对象程序设计之对象的遍历操作示例
Jun 12 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 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
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
JavaScript中创建类/对象的几种方法总结
2013/11/29 Javascript
Jquery遍历checkbox获取选中项value值的方法
2014/02/13 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
JavaScript判断输入是否为数字类型的方法总结
2017/09/28 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
Java Varargs 可变参数用法详解
2020/01/28 Javascript
介绍Python的Django框架中的QuerySets
2015/04/20 Python
用Python编写web API的教程
2015/04/30 Python
Python内建数据结构详解
2016/02/03 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
Python程序退出方式小结
2017/12/09 Python
详解Python中is和==的区别
2019/03/21 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
Python hashlib模块加密过程解析
2019/11/05 Python
Python数据可视化:饼状图的实例讲解
2019/12/07 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
介绍一下write命令
2014/08/10 面试题
初中生学习的自我评价
2013/11/14 职场文书
《大海那边》教学反思
2014/04/09 职场文书
环保标语口号
2014/06/13 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
房产遗嘱范本
2015/08/06 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript