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 相关文章推荐
杏林同学录(六)
Oct 09 PHP
PHP中通过ADO调用Access数据库的方法测试不通过
Dec 31 PHP
PHP实时显示输出
Oct 02 PHP
IP攻击升级,程序改进以对付新的攻击
Nov 23 PHP
新手学习PHP的一些基础知识分享
Jul 27 PHP
用php解析html的实现代码
Aug 08 PHP
PHP中使用localhost连接Mysql不成功的解决方法
Aug 20 PHP
PHP中函数gzuncompress无法使用的解决方法
Mar 02 PHP
PDO::_construct讲解
Jan 27 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
Mar 07 PHP
PHP常见的几种攻击方式实例小结
Apr 29 PHP
laravel dingo API返回自定义错误信息的实例
Sep 29 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
JS弹出对话框实现方法(三种方式)
2015/12/18 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
简单实现js浮动框
2016/12/13 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
2020/08/25 Javascript
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
python中的格式化输出用法总结
2016/07/28 Python
详谈python http长连接客户端
2017/06/12 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
Django文件上传与下载(FileFlid)
2019/10/06 Python
python re模块常见用法例举
2021/03/01 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
秋季运动会广播稿
2014/02/22 职场文书
加薪通知
2015/04/25 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技