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中的实现trim函数代码
Mar 19 PHP
Smarty安装配置方法
Apr 10 PHP
PHP 判断常量,变量和函数是否存在
Apr 26 PHP
mysql,mysqli,PDO的各自不同介绍
Sep 19 PHP
php加密解密实用类分享
Jan 07 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 PHP
phpnow php探针环境检测代码
Nov 04 PHP
php使用timthumb生成缩略图的方法
Jan 22 PHP
PHP程序员的技术成长规划
Mar 25 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
Dec 02 PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 PHP
解决laravel查询构造器中的别名问题
Oct 17 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 购物车实例(申精)
2009/05/11 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
javascript 屏蔽鼠标键盘的几段代码
2008/01/02 Javascript
xss文件页面内容读取(解决)
2010/11/28 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
浅谈jQuery双事件多重加载的问题
2016/10/05 Javascript
简单理解js的prototype属性及使用
2016/12/07 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
利用js实现前后台传送Json的示例代码
2018/03/29 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
Python代码实现KNN算法
2017/12/20 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
python实现串口自动触发工作的示例
2019/07/02 Python
Python 多线程其他属性以及继承Thread类详解
2019/08/28 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
苹果Mac升级:MacSales.com
2017/11/20 全球购物
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
电话销售经理岗位职责
2013/12/07 职场文书
酒店总经理岗位职责
2014/03/17 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
红楼梦读书笔记
2015/06/25 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python
python自动化之如何利用allure生成测试报告
2021/05/02 Python
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
python Django框架快速入门教程(后台管理)
2021/07/21 Python