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 url地址栏传中文乱码解决方法集合
Jun 25 PHP
PHP新手NOTICE错误常见解决方法
Dec 07 PHP
PHP中如何判断AJAX提交的数据
Feb 05 PHP
PHP的基本常识小结
Jul 05 PHP
php增删改查示例自己写的demo
Sep 04 PHP
php使用glob函数快速查询指定目录文件的方法
Nov 15 PHP
19个Android常用工具类汇总
Dec 30 PHP
php中静态类与静态变量用法的区别分析
Jan 15 PHP
PHP读书笔记_运算符详解
Jul 01 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
PHP convert_cyr_string()函数讲解
Feb 13 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 清除网页病毒的方法
2008/12/05 PHP
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
php 获取一个月第一天与最后一天的代码
2010/05/16 PHP
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
php实现文件编码批量转换
2014/03/10 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
Dom在ajax技术中的作用说明
2010/10/25 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
手机端转换rem适应
2017/04/01 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
Python简单进程锁代码实例
2015/04/27 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
HEMA英国:荷兰原创设计
2018/08/28 全球购物
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
abstract class和interface有什么区别
2013/08/04 面试题
北大研究生linux应用求职信
2013/10/29 职场文书
留守儿童工作方案
2014/06/02 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
CSS link与@import的区别和用法解析
2023/05/07 HTML / CSS