php数据导出为txt文档和导入txt文档解析数据

来源:互联网 发布:阿里云幕布 高清下载 编辑:程序博客网 时间:2024/06/05 09:20

首先页面需要添加导出按钮,注意:导出数据JS不能用异步请求(ajax请求属于异步请求);可以使用重定向。

一、下面是我项目中自己写的导出数据代码(项目中用到了Yii框架和angularjs ;实际情况可以根据自己)

1、html添加按钮,点击事件传两个参数title和id

<input type="button" ng-click="exportTxt(title,id)" style="display:inline;witdh:54px" class="btn btn-danger btn-xs" value="导出"/>

2、JS中使用重定向调用控制器方法

//confirm写一个简单的弹窗提示;然后调用activity控制器中exportTxt方法传递两个参数

$scope.exportTxt = function(title,id){
        if(confirm("你确定导出"+title+"活动数据吗?")){
        location.href="/activity/exportTxt" + "?title="+title+"&id="+id;
        }
        }

3、控制器中导出txt文件函数(结束)

//活动模板导出数据
    public function actionExportTxt(){
        $id = intval($this->getParam("id"));

//GameManagerHelper::getDbMainConnection()是自己封装的获取mainDb的方法

        $mainDb = GameManagerHelper::getDbMainConnection();
        $sql = "select * from activity_template where id = $id";

//Yii的查询数据方法
        $result = $mainDb->createCommand($sql)->queryRow();
        if (count($result)){
            $fileName = $result['title'];

//把查到的数据转换成json数据,用于后面写入txt文档
            $resultStr = json_encode($result);

//这是最简单的导出txt方法

            header('Content-type:text/plain;charset=utf-8');
            header('Content-Disposition:attachment;filename="'.$fileName.'.txt"');

//echo是向txt中把json字符串写入进去
            echo $resultStr;
        }
    }


二、导入txt文档解析数据

1、在需要添加的html文件合适weizform表单用于提交txt文档(style根据自己需求修改合适的样式)

//action使用了Yii方法,根据自己需求修改

<form style="display: inline-block;" enctype="multipart/form-data" method="post" id="uploadData" 

action="<?php echo Yii::app()->getController()>createUrl('activity/uploadActivityTemplate');?>">

<button  type="button" style="font-size:14px" onclick = "bindFileClick()">导入文件</button> 

//把input隐藏;使用上面的button来调用(注意:button它带有默认的表单提交,我们需要把默认表单提交禁用掉,解决方法:button添加 type="button" 属性
<input type="file" id="activityTemplate" onchange="importFile()" name="activityTemplate" style="opacity: 0;position: absolute;top:0px;" />
</form>

2、JS中函数调用

<script type="text/javascript">
function bindFileClick(){

//button调用input点击事件
$("#activityTemplate").click();
}
function importFile(){
    if(confirm('确定上传一条活动模板数据吗?')){

//表单提交
          $("#uploadData").submit();
    }else{
 //清除选中文件
    }
}
</script>

3、控制器读取txt文件数据函数

public function actionUploadActivityTemplate(){

//default是上面获取数据库里表含有的字段,用于后面记录读取的数据
        $default = array(
            'type'        => 1,
            'isDefault'   => 0,
            'title'       => '',
            'startTime'   => '',
            'endTime'     => '',
            'timingStartTime' => '',
            'releaseTime' => 0,
            'cycle'       => '',
            'items'       => '',
            'exValues'    => '',
            'content'     => '',
            'isOpen'      => 1,
            'sort'        => 0,
            'exValues2'   => '[]',
            'exData'      => '',
            'isCirculation' => 0,
        );

//   $_FILES函数用户获取之前html中name ='activityTemplate'的文件
       $activityFile = $_FILES['activityTemplate']['tmp_name']; 

//读取文件数据

$activityData = file_get_contents($activityFile);

       $activityTemplate = json_decode($activityData,true);

//之前存数据txt的时候包含id字段,需要去除该字段
       unset($activityTemplate['id']);
       $data = array();
       foreach ($default as $key => $value){

           $data[$key] = $activityTemplate[$key];
       }

//下面两行是封装的插入数据库数据的方法,可以根据自己需要自己写插入表的sql
       $uwActivityTemplate = new UwActivityTemplate();
       $result = $uwActivityTemplate->create($data);

//重定向刷新页面
       header('location: '.$_SERVER['HTTP_REFERER']);
    }

2 0
原创粉丝点击