FILE,id不一致

当图片全部是新增的时候,id和FILE一一对应,后台可以匹配处理。
array(1) {
["banner_img"] => array(5) {
["name"] => array(2) {
[0] => string(5) "2.png"
[1] => string(5) "1.png"
}
["type"] => array(2) {
[0] => string(9) "image/png"
[1] => string(9) "image/png"
}
["tmp_name"] => array(2) {
[0] => string(14) "/tmp/phpO7u01p"
[1] => string(14) "/tmp/phpQZJc7O"
}
["error"] => array(2) {
[0] => int(0)
[1] => int(0)
}
["size"] => array(2) {
[0] => int(176795)
[1] => int(150598)
}
}
}
array(2) {
["pid"] => string(1) "8"
["banner_id"] => array(2) {
[0] => string(0) ""
[1] => string(0) ""
}
}
但是,当图片是修改的时候,有些图片并不需要重新传图,于是就无法一一对应了。比如:
array(1) {
["banner_img"] => array(5) {
["name"] => array(2) {
[0] => string(5) "2.png"
[1] => string(5) "2.png"
}
["type"] => array(2) {
[0] => string(9) "image/png"
[1] => string(9) "image/png"
}
["tmp_name"] => array(2) {
[0] => string(14) "/tmp/phpbmHWr5"
[1] => string(14) "/tmp/phphRfcX9"
}
["error"] => array(2) {
[0] => int(0)
[1] => int(0)
}
["size"] => array(2) {
[0] => int(176795)
[1] => int(176795)
}
}
}
array(3) {
["pid"] => string(2) "10"
["banner_id"] => array(4) {
[0] => string(1) "1"
[1] => string(1) "2"
[2] => string(0) ""
[3] => string(0) ""
}
["banner_img"] => array(2) {
[0] => string(0) ""
[1] => string(0) ""
}
}
有一种办法,就是新图单独组合到banner_img数组中。老图单独处理。
array(2) {
["banner_img_1"] => array(5) {
["name"] => string(5) "3.png"
["type"] => string(9) "image/png"
["tmp_name"] => string(14) "/tmp/phpo2sq7A"
["error"] => int(0)
["size"] => int(171795)
}
["banner_img"] => array(5) {
["name"] => array(2) {
[0] => string(5) "2.png"
[1] => string(5) "2.png"
}
["type"] => array(2) {
[0] => string(9) "image/png"
[1] => string(9) "image/png"
}
["tmp_name"] => array(2) {
[0] => string(14) "/tmp/phpbR50hb"
[1] => string(14) "/tmp/phpPvrGsL"
}
["error"] => array(2) {
[0] => int(0)
[1] => int(0)
}
["size"] => array(2) {
[0] => int(176795)
[1] => int(176795)
}
}
}
array(3) {
["pid"] => string(2) "10"
["banner_id"] => array(4) {
[0] => string(1) "1"
[1] => string(1) "2"
[2] => string(0) ""
[3] => string(0) ""
}
["banner_img_2"] => string(0) ""
}
这里id为1的修改了,id为2的图片没有变动。剩下的两个是新图,跟banner_img中的数据一一对应。
/**
* 保存步骤二
*/
public function save_step_2() {
// 先删除之前的Banner图
M()->startTrans();
$error_count = 0;
$pid = $_POST['pid'];
$product_banner = M('product_banner');
$product_banner->where(['pid'=>$pid])->save(['status'=>0]);
$temp_all_file = $_FILES;
$temp_new_file = $_FILES['banner_img'];
unset($_FILES);
$temp_banner_id = $_POST['banner_id'];
$cursor_new = 0;
foreach ($temp_banner_id as $k=>$v) {
// 重置$data数据
$data = [];
if ($v) { // 修改
// 可能传图,也可能未传图
if ($temp_all_file['banner_img_'.$v]) { // 传图了
$_FILES['banner_img'] = $temp_all_file['banner_img_'.$v];
$file = $this->upload(1,750,750,'banner_img','banner_img');
$data['img_url'] = $file['save_name'];
if(!$data['img_url']) {
$error_count ++;
break;
}
}
$data['pid'] = $pid;
$data['status'] = 1;
$edit_flag = $product_banner->where(['id'=>$v])->save($data);
if (!$edit_flag && $edit_flag !==0 ) {
$error_count ++;
break;
}
} else { // 新增,变更游标
$file_up = array();
$file_up['name'] = $temp_new_file['name'][$cursor_new];
$file_up['type'] = $temp_new_file['type'][$cursor_new];
$file_up['tmp_name'] = $temp_new_file['tmp_name'][$cursor_new];
$file_up['error'] = $temp_new_file['error'][$cursor_new];
$file_up['size'] = $temp_new_file['size'][$cursor_new];
$_FILES['banner_img'] = $file_up;
$file = $this->upload(1,750,750,'banner_img','banner_img');
$data['img_url'] = $file['save_name'];
if(!$data['img_url']) {
$error_count ++;
break;
}
$data['pid'] = $pid;
$data['create_time'] = time();
$data['status'] = 1;
$add_flag = $product_banner->add($data);
if (!$add_flag) {
$error_count ++;
break;
}
unset($_FILES, $file_up);
$cursor_new ++;
}
}
if($error_count > 0){
M()->rollback();
$this->json->setErr(10099, '操作失败');
$this->json->Send();
}else{
M()->commit();
$this->json->setErr(0, '操作成功');
$this->json->setAttr('pid', $pid);
$this->json->Send();
}
}
至此,巧妙的处理了FILE与id不对应的问题。
FILE,id不一致的更多相关文章
- <input type="file" id="camera" multiple="multiple" capture="camera" accept="image/*"> 上传图片,手机调用相册和摄像头
<input type="file" id="camera" multiple="multiple" capture="ca ...
- 【翻译自mos文章】对于每个文件的 file.id and file.incarnation number,重命名文件别名
对于每个文件的 file.id and file.incarnation number,重命名文件别名 參考原文: Rename Alias of Datafile as Per file.id an ...
- <input type="file" id="fileID">文本框里的值清空方法
一般情况下,不允许通过脚本来对文件上传框赋值. 下面是一个变通的方法.就是创建一个新的input type="file" 把原来的替换掉. <!DOCTYPE html PU ...
- 关于Webdriver自动化测试时,页面数据与数据库id不一致的处理方式,需要使用鼠标事件
有时候Web页面需要通过onmouseout事件去动态的获取数据库的数据,在使用Webdriver进行自动化测试的时候,对于页面显示的数据,其在数据库可能会存在一个id或者code,但是id或者cod ...
- hadoop中集群节点ID不一致( java.io.IOException: Incompatible clusterIDs )
- JS调用activeX实现浏览本地文件夹功能 wekit内核只需要<input type="file" id="files" name="files[]" webkitdirectory/>即可,IE内核比较麻烦
研究了一天,js访问本地文件本身是不可能的,只能借助于插件.植入正题,IE仅支持ActiveX插件. function openDialog() { try { var Message = " ...
- 自定义input[type="file"]的样式
input[type="file"]的样式在各个浏览器中的表现不尽相同: 1. chrome: 2. firefox: 3. opera: 4. ie: 5. edge: 另外,当 ...
- input[tyle="file"]样式修改及上传文件名显示
默认的上传样式我们总觉得不太好看,根据需求总想改成和上下结构统一的风格…… 实现方法和思路: 1.在input元素外加a超链接标签 2.给a标签设置按钮样式 3.设置input[type='file' ...
- 前端开发:css技巧,如何设置select、radio 、 checkbox 、file这些不可直接设置的样式 。
前言: 都说程序员有三宝:人傻,钱多,死得早.博主身边的程序“猿”一大半应了这三宝,这从侧面说明了一个问题,只有理性是过不好日子的.朋友们应该把工作与生活分开,让生活变得感性,让工作变得理性,两者相提 ...
随机推荐
- 将表单序列化为JSON对象
将表单序列化为JSON对象的工具方法: $(function() { //工具方法,可以将指定的表单中的输入项目序列化为JSON数据 $.fn.serializeJson = function() { ...
- 纯干货:深度学习实现之空间变换网络-part2
https://www.jianshu.com/p/854d111670b6 纯干货:深度学习实现之空间变换网络-part1 在第一部分中,我们主要介绍了两个非常重要的概念:仿射变换和双线性插值,并了 ...
- nGrinder Maven工程使用
1:新建Maven groovy工程 2:SVN Checkout Maven工程 3:新建JUnit脚本,并运行,提示报错 java.lang.RuntimeException: Please ad ...
- PyCharm 安装及破解方法
PyCharm 安装及破解方法 一.安装 首先要下载Pycharm这个软件,可以在官网下载进行下载. 下载完软件之后,双击安装文件即可进行安装,双击后出现下图所示的提示,点击Next即可. 然后会出现 ...
- dubbo rpc调用抛出的Exception处理
关于dubbo的Exception堆栈被吃处理,网上已经有比较多的解决方法,在我们的应用场景中,不希望RPC调用对方抛出业务exception,而是通过Resp中的errorCode,errorMsg ...
- 12: xlrd 处理Excel文件
1.1 xlrd处理.xlsx 文件 1.xlrd常用方法 #!/usr/bin/python # coding:utf-8 # 用xlrd读取Excel文件基本用法 import sys impor ...
- nvgre
GRE RFC2784 工作原理 Structure of a GRE Encapsulated Packet A GRE encapsulated packet has the form: ---- ...
- android官方开发教程解释(一)
最近准备系统学一下android开发,这里不会照搬原文,只会针对教程中一些难以理解的部分进行解释,我只是个菜鸟. 在教程第一章——入门基础里面,讲解android主题的那个小节,大概会有以下的代码: ...
- 基础_cifar10_model
今天进一步在cifar10数据集上解决几个问题: 1.比较一下序贯和model,为什么要分成两块: 2.同样的条件下,我去比较一下序贯和model.这个例子作为今天的晚间运行. 1.比较一下序贯和mo ...
- OO第三次博客作业---透过代码看设计
不得不说的JSF 经过前几次作业的煎熬.出租车的代码量不断地增多.而出租车问题在不断的完善,这也就牵涉到一个问题,那就是最初出租车程序的设计问题,如果一开始设计的就有问题的话,那么在后来的过程中就会遇 ...