thinkphp 跨模块调用调用数据问题

ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
本文所述实例是使用在Thinkphp的开发框架上,要是使用在其他框架也是同样的方法,很多人可能不能正确的实现的导入导出,问题基本上都是php的核心类引用路径出错造成的,如果有问题大家务必要对路劲是否引用正确进行测试。
具体操作步骤如下:
(一)导入Excel
第一,在前台html页面进行上传文件:如:
&form method="post" action="php文件" enctype="multipart/form-data"&
&h3&导入Excel表:&/h3&&input type="file" name="file_stu" /&
&input type="submit" value="导入" /&
第二,在对应的php文件进行文件的处理
if (! empty ( $_FILES ['file_stu'] ['name'] ))
$tmp_file = $_FILES ['file_stu'] ['tmp_name'];
$file_types = explode ( ".", $_FILES ['file_stu'] ['name'] );
$file_type = $file_types [count ( $file_types ) - 1];
/*判别是不是.xls文件,判别是不是excel文件*/
if (strtolower ( $file_type ) != "xls")
$this-&error ( '不是Excel文件,重新上传' );
/*设置上传路径*/
$savePath = SITE_PATH . '/public/upfile/Excel/';
/*以时间来命名上传的文件*/
$str = date ( 'Ymdhis' );
$file_name = $str . "." . $file_
/*是否上传成功*/
if (! copy ( $tmp_file, $savePath . $file_name ))
$this-&error ( '上传失败' );
*对上传的Excel数据进行处理生成编程数据,这个函数会在下面第三步的ExcelToArray类中
注意:这里调用执行了第三步类里面的read函数,把Excel转化为数组并返回给$res,再进行数据库写入
$res = Service ( 'ExcelToArray' )-&read ( $savePath . $file_name );
重要代码 解决Thinkphp M、D方法不能调用的问题
如果在thinkphp中遇到M 、D方法失效时就加入下面一句代码
//spl_autoload_register ( array ('Think', 'autoload' ) );
/*对生成的数组进行数据库的写入*/
foreach ( $res as $k =& $v )
if ($k != 0)
$data ['uid'] = $v [0];
$data ['password'] = sha1 ( '111111' );
$data ['email'] = $v [1];
$data ['uname'] = $v [3];
$data ['institute'] = $v [4];
$result = M ( 'user' )-&add ( $data );
if (! $result)
$this-&error ( '导入数据库失败' );
第三:ExcelToArrary类,用来引用phpExcel并处理Excel数据的
此处注意:ExcelToArrary类建在根目录下的 addons /services/ExcelToArrary.class.php中
class ExcelToArrary extends Service{
public function __construct() {
/*导入phpExcel核心类 注意 :你的路径跟我不一样就不能直接复制*/
include_once('./Excel/PHPExcel.php');
* 读取excel $filename 路径文件名 $encode 返回数据的编码 默认为utf8
*以下基本都不要修改
public function read($filename,$encode='utf-8'){
$objReader = PHPExcel_IOFactory::createReader('Excel5');
$objReader-&setReadDataOnly(true);
$objPHPExcel = $objReader-&load($filename);
$objWorksheet = $objPHPExcel-&getActiveSheet();
$highestRow = $objWorksheet-&getHighestRow();
$highestColumn = $objWorksheet-&getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
$excelData = array();
for ($row = 1; $row &= $highestR $row++) {
for ($col = 0; $col & $highestColumnI $col++) {
$excelData[$row][] =(string)$objWorksheet-&getCellByColumnAndRow($col, $row)-&getValue();
return $excelD
第四,以上就是导入的全部内容,phpExcel包附在最后。
(二)Excel的导出(相对于导入简单多了)
第一,先查出数据库里面要生成Excel的数据,如:
$data= M('User')-&findAll(); //查出数据
$name='Excelfile'; //生成的Excel文件文件名
$res=service('ExcelToArrary')-&push($data,$name);
第二,ExcelToArrary类,用来引用phpExcel并处理数据的&&&
class ExcelToArrary extends Service{
public function __construct() {
/*导入phpExcel核心类 注意 :你的路径跟我不一样就不能直接复制*/
include_once('./Excel/PHPExcel.php');
/* 导出excel函数*/
public function push($data,$name='Excel'){
error_reporting(E_ALL);
date_default_timezone_set('Europe/London');
$objPHPExcel = new PHPExcel();
/*以下是一些设置 ,什么作者 标题啊之类的*/
$objPHPExcel-&getProperties()-&setCreator("转弯的阳光")
-&setLastModifiedBy("转弯的阳光")
-&setTitle("数据EXCEL导出")
-&setSubject("数据EXCEL导出")
-&setDescription("备份数据")
-&setKeywords("excel")
-&setCategory("result file");
/*以下就是对处理Excel里的数据, 横着取数据,主要是这一步,其他基本都不要改*/
foreach($data as $k =& $v){
$num=$k+1;
$objPHPExcel-&setActiveSheetIndex(0)
//Excel的第A列,uid是你查出数组的键值,下面以此类推
-&setCellValue('A'.$num, $v['uid'])
-&setCellValue('B'.$num, $v['email'])
-&setCellValue('C'.$num, $v['password'])
$objPHPExcel-&getActiveSheet()-&setTitle('User');
$objPHPExcel-&setActiveSheetIndex(0);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition:filename="'.$name.'.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter-&save('php://output');
第三,以上就是导出的全部内容,phpExcel本站下载地址
顶一下(0) 踩一下(0)
热门标签:2013年5月 总版技术专家分月排行榜第一
2016年7月 总版技术专家分月排行榜第二2016年3月 总版技术专家分月排行榜第二2015年12月 总版技术专家分月排行榜第二2014年8月 总版技术专家分月排行榜第二2014年7月 总版技术专家分月排行榜第二2013年6月 总版技术专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
本博客内容为学习笔记,教程大多为传智播客培训中心和公益讲师燕十八的视频。
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
修改数据调用Model.class.php下的save()方法第一种方法:$data中包含有自动增长字段uid,则uid作为where条件&?phpclass UserAction extends Action{ public function updateUser(){
$user = D('User');//实例化Model
$data = array('uid'=&5,'username'=&'王美人','email'=&'');//$data中包含有自动增长字段uid
$res = $user-&save($data);//调用Model下的save()函数进行数据的修改
var_dump($res); }}?&第二种方法:$data中没有自动增长字段uid,则需要增加where条件&?phpclass UserAction extends Action{ public function updateUser(){
$user = D('User');//实例化Model
$data = array('username'=&'王美人','email'=&'');//$data中没有自动增长字段uid
$res = $user-&where('uid=5')-&save($data);//需要增加where条件。调用Model下的save()函数进行数据的修改
var_dump($res);//返回影响的行数 }}?&补充说明:(1)如果$data中没有自动增加字段,而save()又没有where条件,则无法执行。因为如果没有条件,那一执行语句就会修改所有的数据,Thinkphp很好的避免了这种情况的发生(语句无法执行)。(2)也可以不使用$data数组形式,使用对象属性方式也可以传递数据。与增加数据add()的方式一致。如上面的数据$data = array('username'=&'王美人','email'=&'');可以修改为:$user-&username = '王美人';$user-&email = '';
阅读(3124)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'thinkphp第11课:数据库操作之修改一条数据',
blogAbstract:'thinkphp第11课:数据库操作之修改一条数据修改数据调用Model.class.php下的save()方法第一种方法:$data中包含有自动增长字段uid,则uid作为where条件&?phpclass UserAction extends Action{ public function updateUser(){
$user = D(\'User\');//实例化Model
$data = array(\'uid\'=&5,\'username\'=&\'王美人\',\'email\'=&\'\');//$data中包含有自动增长字段uid
$res = $user-&save($data);//调用Model下的save()函数进行数据的修改',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:1,
publishTime:6,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'本博客内容为学习笔记,教程大多为传智播客培训中心和公益讲师燕十八的视频。',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}模板数据调用不出来 打印数据 显示一些信息 - ThinkPHP框架
控制器代码:$volid&=&I('get.volid');
$certificate&=&M('certificate');
$certificate&-&&where(array('volid'=&$volid))-&limit(10)-&select();
$this-&assign('cercon',$certificate);
$this-&display();模板代码:&volist&name=&cercon&&id=&vo&&
&&&&&tr&class=&success&&
&&&&&&&td&{$vo.name}&/td&
&&&&&&&td&{$vo.sex}&/td&
&&&&&&&td&{$vo.education}&/td&
&&&&&&&td&{$vo.origin}&/td&
&&&&&&&td&{$vo.level}&/td&
&&&&&&&td&{$vo.entrance}&/td&
&&&&&&&td&{$vo.lsstime}&/td&
&&&&&&&td&{$vo.idnumber}&/td&
&&&&&&&td&{$vo.cerno}&/td&&
&&&&&&&td&{$vo.phone}&/td&
&&&&&&&td&&a&href=&&&删除&/a&&a&href=&&&修改&/a&&a&href=&&&详细&/a&&/td&
&/volist&提示网页无法打开:
然后打印了下数据
能看看什么问题???
dump($certificate);
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

我要回帖

更多关于 thinkphp调用数据库 的文章

 

随机推荐