问题:

学习使用TP框架做电商网站是,添加商品表单需要上传商品logo和商品图片pics,有两个上传域,第一个上传域是logo,只上传一张,第二个上传域是pics,上传多张图片。使用如下代码,总是报错:非法上传文件!

$upload = \Think\Upload;
$info=$upload->upload();

解决方法:

有多个上传域时,应如下使用upload方法,指定要处理的上传域:

$upload = \Think\Upload;
$info1 = $upload->upload(array('logo'=>$_FILES['logo']);
$info2 = $upload->upload(array('pics'=>$_FILES['pics']);

参考资料:

Title:

TP框架上传图片时报错“非法上传"处理

Content:

TP框架上传图片时报错“非法上传"处理,主要注意以下两点:

1.$_FILES中有多个上传域问题,所以针对不同的上传域,区别命名;

2.如同个上传域中有一些没有上传图片,则要重新收集好上传的信息(收集成非空的一维数组);

具体代码如下;

第一种情况:

if($this->_hasImg())
02. {
03. // 只上传表单中name叫做jqimg的图片
04. $info = $upload->upload(array('jqimg'=>$_FILES['jqimg']));
05. if(!$info)
06. redirect(U('Ad/Ad/save/id/'.$ad_id), 3, $upload->getError());
07. // 循环每一张图片,插入到jq-info表
08. foreach ($info as $k => $v)
09. {
10. $url = $v['savepath'] . $v['savename'];
11. $this->execute("INSERT INTO sh_ad_jq_info(img_url,ad_link,ad_id) VALUES('$url','{$_POST['jqtxt'][$k]}',$ad_id)");
12. }
13. }
14. // 处理修改的图片
15. if(isset($_POST['oldjqtxt']))
16. {
17. // 先上传图片修改的图片
18. $info = $upload->upload(array('oldjqimg'=>$_FILES['oldjqimg']));
19. $_k = 0;
20. foreach ($_POST['oldjqtxt'] as $k => $v)
21. {
22. // 有没有上传新图片
23. if($info && isset($info[$_k]))
24. {
25. // 上传了新图片
26. // 先删除原图
27. $_ourl = $this->query('SELECT img_url FROM sh_ad_jq_info WHERE id = '.$k);
28. @unlink(IMG_URL_HD . $_ourl[0]['img_url']);
29. // 再更新为新图
30. $_url = $info[$_k]['savepath'] . $info[$_k]['savename'];
31. $this->execute("UPDATE sh_ad_jq_info SET ad_link='$v',img_url='$_url' WHERE id=$k");
32. }
33. else
34. {
35. $this->execute("UPDATE sh_ad_jq_info SET ad_link='$v' WHERE id=$k");
36. }
37. $_k++;
38. }
39. }
40. }

第二种情况:

foreach($_FILES['imgjq_url']['tmp_name'] as $k=>$v)
02. {
03.
04. if($v)
05. {
06. //删除原有硬盘图片
07. $img_url = $this->query("SELECT imgjq_url FROM sh_ad_jq_info WHERE id = $k");
08.
09. @unlink(IMG_URL_HD .$img_url[0]['imgjq_url'] );
10.
11.
12. //收集图片信息
13. $arr = array();
14. $arr['name'] = $_FILES['imgjq_url']['name'][$k];
15. $arr['type'] = $_FILES['imgjq_url']['type'][$k];
16. $arr['tmp_name'] = $_FILES['imgjq_url']['tmp_name'][$k];
17. $arr['error'] = $_FILES['imgjq_url']['error'][$k];
18. $arr['size'] = $_FILES['imgjq_url']['size'][$k];
19.
20.
21. //上传图片处理
22. $imgInfo = $upload->upload(array('imgjq_url' =>$arr ));
23.
24. if (!$imgInfo) {
25. echo $upload->getError();die;
26. }
27.
28. $imgjq_url = $imgInfo['imgjq_url']['savepath'].$imgInfo['imgjq_url']['savename'];
29.
30. //更新到数据库
31. $this->execute("UPDATE sh_ad_jq_info SET imgjq_url = '$imgjq_url' WHERE id = $k");
32.
33. }
34. }

TP框架多上传域上传图片的更多相关文章

  1. tp框架-----文件上传

    之前也做过文件上传,现在学了tp,用tp怎么做呢? 第一步:做一个Wenjian控制器: <?php namespace Ceshi\Controller; use Think\Controll ...

  2. tp 框架 -文件上传

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <?ph ...

  3. ssh框架文件上传下载

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 第二百七十三节,Tornado框架-文件上传

    Tornado框架-文件上传 第一.普通表单上传文件 self.request.files["fafafa"] 获取上传文件信息,参数["上传文件框的name名称&quo ...

  5. TP框架在做上传时候提示:没有上传的文件!

      这个一般是由于上传的文件超过了php.ini里面的限制.修改一下参数就行了 具体,打开php.ini 文件 搜索post_max_size upload_max_filesize 改一个比较大的, ...

  6. laravel框架图片上传

    1.建控制器方法 2.建立路由 绑定控制器方法 3.进行图片上传的配置 修改图片上传的路径 a) config/filesystems.php 修改disks->local->root(图 ...

  7. layui框架图片上传至服务器

    注意:只可用于数据量较小的项目,数据量庞大的项目不要用这个,否则会造成图片数量庞大,至服务器运行速度变慢或瘫痪 HTML代码 //前端使用的是layui框架<div class="la ...

  8. 如何使用PHP上传文件,上传图片,php上传教程,php表单文件上传教程

    使用PHP进行文件上传,主要使用到表单功能和PHP内置的$_FILES函数功能.接下来我们看如何实现PHP上传功能.例子效果图,此例子是在Mac下进行调试成功的. PHP上传图片文件的功能代码如下: ...

  9. Android采取async框架文件上传

    页面效果 须要的权限 <uses-permission android:name="android.permission.INTERNET"/> 网络訪问权限; 布局文 ...

随机推荐

  1. WebGL on iOS8 最终等到了这一天

    WWDC2014刚结束,这次的大会是名符事实上的开发人员大会.更贴切的应该说的确是一次软件开发人员的大会.对于OSX和iOS的很多其它功能特性让人兴奋.Swift新语言促成了如上图片 但我更感兴趣的是 ...

  2. ADO.Net的小知识(连接数据库)二

    上次提到数据库连接有两种形式断开式连接和打开式连接,断开式连接我已经讲解了,下面我来给大家讲解一下打开式连接 (1)引入命名空间:using System.Data.SqlClient; 该语句用于导 ...

  3. Paginator

    Paginator There are several ways to paginate items. The simplest is by using the paginate method on ...

  4. Android之利用HTTP网络通信实现与PHP的交互(三)

    Android与PHP的交互是通过Http网络编程来实现的,利用php访问数据库,并且操作数据库中的数据,利用php作为接口,使Android连接数据库. 一般情况下,我们使用Json格式进行传输,利 ...

  5. LNMP一键安装包-CentOS 5/6下自动编译安装Nginx,MySQL,PHP

    适用环境: 系统支持:CentOS-5 (32bit/64bit).CentOS-6 (32bit/64bit) 内存要求:≥128M 安装了什么: 1.Nginx-1.2.0 2.MySQL 5.5 ...

  6. PHP微信开发ReplyModel(封装验证,数据获取,信息返回)

    <?phpclass ReplyModel{ //验证token, public function ValidationToken($token){ if(isset($_GET["e ...

  7. 【字符串排序,技巧!】UVa 10905 - Children’s Game

    There are lots of number games for children. These games are pretty easy to play but not so easy to ...

  8. C#一些小知识点

    1. 在Load时候由代码来做控件PictureBox,并且用代码将图片加载进去: private void Form2_Load(object sender, EventArgs e) { Dire ...

  9. [记录]使用setTimeout实现不同时间进行切换文本的颜色

    开始使用的是setinterval(),但是setinterval()的time是固定的,假如我想改变time,就需要每次clearInterval()一次. 如: setInterval(funct ...

  10. NetBeans自定义代码折叠块,类似vs中的#region

    //<editor-fold defaultstate="collapsed" desc="测试代码折叠"> echo '<script ty ...