PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解

来源:脚本之家  责任编辑:小易  

用ajax的同步提交。当提交后返回你成功的时候,你用js支持删除该html就好了。

本文实例讲述了PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作。分享给大家供大家参考,具体如下:

你在PHP里边打印一下 $_FILES 就明白了。 在表单加这个 enctype="multipart/form-data" 不要编码

2019-07-04更新

这个,可以这样,文件上传后,并不是马上就保存到了指定的目录下 而是在服务器端的一个缓存副本中,(这个缓存副本目录是由php.ini指定的,这里可以不用管他) 这个时候,把这个副本读取出来并显示于网页上,如果用户满意,就点击保存,这个时候

更新修改原因:

    前台界面ui显示不好看 后台处理逻辑混乱,涉及到多张图片处理起来很麻烦,所以修改成通过ajax上传/删除图片。

进入php源程序目录中的ext目录中,这里存放着各个扩展模块的源代码,选择你需要的模块,比如curl模块:cd curl执行phpize生成编译文件! phpize在PHP安装目录的bin目录/usr/local/php5/bin/phpize运行时, 可能会报错:Cannot find autoconf. Pl

效果:

上传前:

在这里插入图片描述

上传后:

有个ajax插件ajaxFileUpload,具体用法参考下列网页 http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html

在这里插入图片描述

撤销后:

论UI,Flyme不会比MIUI差。小米有MIX,魅族有什么?小米有小米6,魅族有PRO7?或许,PRO7的设计会令人耳目一新,但到底会有多少人愿意为这样的设计买单?再者,从热度和销量来讲,PRO7和小米6也不是一个量级的。小米有红米,魅族有魅蓝?去年一年,相对于红米而言,魅蓝显得很被动。至于销量,也相差不小。小米有小米之家,魅族有魅族专卖?无论是从布局还是着眼未来来看,魅族已经被小米甩下一大截,应该很难追得上了。如果三星给点力,如果联发科给点力,如果和高通对抗时魅族不那么强硬,魅族也不至于落得今天的境地。即使年底用高通处理器的真旗舰可以上市,魅族也只是没那么窘迫而已,要追上小米,难。

在这里插入图片描述

以下是更新的代码:

1.3L夏利两厢,没花钱,别人送的!本来就是想弄来开着玩玩,但是没想到这款车的动力这么强!这台丰田8A的机子,真是不是闹着玩的。一档起步稍微猛一点,一定会烧胎!在市区开,一不留神就会超速。由于采用拉线式节气门,动力来的特别直接,毫不夸张的说,论这种感官上的加速感受,比飞度强。但是..这台车除了发动机,哪哪都垃圾,底盘软如烂泥,方向没有助力,沉的让你思考人生。挂挡,基本没有感觉,跟搅屎区别不大,全车杂音各种各样。车架锈蚀严重,车窗还得手摇。总之,我相信这一台8A发动机的寿命比车长的多。真是可惜了这台发动机!

HTML 代码:

谢邀,楼主这个问题使许多人非常惊讶,与一些城市的高级白领收入相当,农民工月收入真的可以达到上万吗?坤鹏论经过分析如下:一、农民工的真实收入水平首先农民工在城市中可以从事哪些方面的工作,由于农民工基本没有受过高等的教育,所以工作会受到许多限制,所能选择的职业主要以体力劳动为主,专业知识比较低的行业进行打工。例如建筑行业,服装工人、电子工厂、保姆、保安等工作。我们不可否认,建筑行业和装修行业的工资一般都是比较高的,单纯力工的工资也达到每日200-300。一些技术含量高如木工、瓦工等具有五年工作经验以上的大工们工资更高。但是工地的活大家都知道,工期一般都在八九个月,如北方等地由于受季节影响,工期了就

<div class="form-group"> <label for="username" class="col-sm-2 control-label no-padding-right">缩略图 </label> <div class="col-sm-6"> <input type="hidden" id="pic" value="" name="pic"> <!-- 要将父布局的position设置为relative,父布局将无法包裹input --> <a href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="btn btn-palegreen" style="position: relative;margin-right: 10px;" id="xian"> <!--设置input的position为absolute,使其不按文档流排版,并设置其包裹整个布局 --> <!-- 设置opactity为0,使input变透明 --> <input type="file" name="pic" accept="image/*" style="opacity: 0;position: absolute">上传图片</a> <a href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="btn btn-magenta" onclick="delimg(this)" style="display: none" id="che">撤销图片</a> </div> </div>

娱乐圈中的事情我们外人终究是不清楚不明白的,作为圈中的老大哥成龙准备在他死后100年才把娱乐圈黑幕爆出来,一方面是怕危害到自己的家人,还有是想让人们都看清娱乐圈并不是天堂,每个人都如履薄冰。事实上,真相都是留给后来的人揭开的,这种事情难道还屡见不鲜么,过去有多少悬疑、内幕、真相都是在经过多少年之后的沉淀才敢揭开的。闲话少说,既然成龙大哥说100年后才公开娱乐圈真正的内幕,那我们现在不妨来猜一下他要公开的内幕都有哪些!1、beyond—黄家驹我们都知道,黄家驹是因为从舞台上跌落,撞击到后脑,最后才逝世的,但是现实真的是这样么?虽然撞到后脑,但大家都觉得并没有那么严重,被送往东京女子医科大学医院抢

要点: 重点都在注释里了。

参考: JS+HTML实现自定义上传图片按钮并显示图片

JS 代码:

//上传图片 //对input[type=file]监听 $("input[name=pic]").on('change',function () { var e=$(this); var file=e[0].files[0]; var formData=new FormData(); formData.append("pic",file);//这里给图片赋的name要与下面php中接收的post值对应 $.ajax({ url: "{:url('upimg')}", type:'POST', cache: false, //上传文件不需要缓存 data:formData, processData: false, // 告诉jQuery不要去处理发送的数据(规定通过请求发送的数据是否转换为查询字符串。默认是 true。) contentType: false, // 告诉jQuery不要去设置Content-Type请求头(发送数据到服务器时所使用的内容类型。默认是:"application/x-www-form-urlencoded"。) success:function (data) { if (data){ $("#xian").hide(); $("#che").show(); $("#pic").val(data); e.parents(".col-sm-6").append("[外链图片转存失败(img-wg119lWd-1562224226091)(https://mp.csdn.net/mdeditor/%22+data+%22)]"); layer.msg('上传成功', {icon: 6}) } else{ layer.msg('上传失败', {icon: 5}) } } }) }) //删除图片 function delimg(e) { layer.confirm('确定删除?', {icon: 3, title:'提示'}, function(index){ //do something var id="{$article.id}"; var imgpath = $(e).siblings('img:last').attr('src'); $.ajax({ url:"{:url('delimg')}", type:'post', data: {pic:imgpath}, success:function (data) { if(data){ $("#xian").show(); $("#che").hide(); $("#pic").val(""); $(e).siblings('img').hide(); layer.msg('删除成功', {icon: 6}) }else{ layer.msg('删除失败', {icon: 5}) } } }) layer.close(index); }); }

这里有句代码展示有问题,源码如下:

在这里插入图片描述

要点

JS formDate的使用

上传成功后返回图片路径,塞到input[type=hidden]框里,之后会随着表单提交上去,保存在数据库中。

参考: JavaScript实现图片上传并预览并提交ajax

PHP 代码:

//ajax上传图片 public function upimg() { $file = request()->file('pic');//这里接收到的图片name要与上面js中formData赋值对应 if ($file) { $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads' . DS . 'articleimg'); $imgpath = '/uploads/articleimg/' . $info->getSaveName(); return $imgpath; }else{ return 0; } } //ajax删除图片 public function delimg() { $data = input('post.'); if ($pic = $data['pic']) { $imppath = ROOT_PATH . 'public' . $pic; if (@unlink($imppath)) { //这里要对数据库中的Pic字段进行即时修改。嗯嗯 $re=db('article')->where('id', $data['id'])->setField('pic', ''); if ($re!==false){ return 1; } } else { return 0; } } else { return '参数错误'; } }

分割线(下面是前几天写的答案,逻辑混乱。。。就不要看了吧)


    前台处理:
添加一个<input type="hidden" value="" name="pic">,会随着post一起提交到后台中去。

在这里插入图片描述

    后台处理分为两步
收到的post数据data中pic字段值为空时,且该栏目之前有图片,则执行删除原来图片操作; 如果上传了新图片,则移动到指定目录下,并查询该栏目之前是否有图片,如果有,则执行删除原来图片操作;

html代码

<div class="form-group"> <label for="username" class="col-sm-2 control-label no-padding-right">栏目图片</label> <div class="col-sm-6"> <input type="hidden" name="pic" value="{$ca.pic}" id="pic"> <input type="file" id="file" accept="image/*" name="pic" style="display: inline-block"> <a href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="btn btn-warning shiny" id="returnimg"><i class="menu-icon fa fa-repeat"></i>撤销图片</a> {notempty name='$ca.pic'} <img src="{$ca.pic}" alt="图片" id="img" style="width: 50px;margin-top:10px;display: block"> {else/} <img src="" alt="图片" id="img" style="width: 50px;margin-top:10px;display: none"> {/notempty} </div> </div>

js代码

<script> //图片撤销 $("#returnimg").on('click', function () { let img = $("#img").attr('src'); if (img) { layer.confirm('确定撤销图片?', {icon: 3, title: '提示'}, function (index) { $("#pic").val(""); $("#img").attr('src', '').css('display', 'none'); layer.close(index); }); } else { layer.msg('未选择图片', {icon: 0}); } }) </script>

php代码

//1.如果栏目原来有图片&&现在撤销了,就删除旧图片 if (($cate['pic'] != false) && ($data['pic'] == false)) { @unlink(ROOT_PATH . 'public' . $cate['pic']); } //如果上传了新的图片 $file = request()->file('pic'); // 移动到框架应用根目录/public/uploads/ 目录下 if ($file) { $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads' . DS . 'cateimg'); if ($info) { // 成功上传后 获取上传信息 $pic = '/uploads/cateimg/' . $info->getSaveName(); $data['pic'] = $pic; //2.新的图片上传成功后,如果栏目原来有图片,删除原来栏目图片 if ($cate['pic']) { @unlink(ROOT_PATH . 'public' . $cate['pic']); } } else { // 上传失败获取错误信息 $this->error($file->getError()); } }

更多关于PHP相关内容可查看本站专题:《PHP+ajax技巧与应用小结》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

用jquery实现ajax 上传图片提交到PHP

$.ajax({

type: "POST",

url: "some.php",

data: "name=John&location=Boston",

success: function(msg){

alert( "Data Saved: " + msg );

}

});

先看一个简单的ajax提交数据功能

some.php就是你提交到后台进行操作的php data就是参数根据自己的需要而定饿。

当数据与php提交有效或者说后台成功返回时 success就是成功返回到前台的方法操作msg就是后台操作前台提交的数据所返回的 xml或者json或者字符串的信息 根据您自己所定义的信息进行数据操作。

您的是上传功能。那么您所提供的数据有图片地址。和一个上传功能的php函数。这个函数当您提交action的php。当这个php被执行时正确的返回为1时为上传成功、0为上传失败(或者将返回失败的信息返回给前台)、success: function(msg){

alert( "Data Saved: " + msg );

}

这里就可以处理您的返回信息了。具体的流程是这样的需要您自己去看看。追问enctype="multipart/form-data" 这个属性怎么搞?

急!ajax上传图片,PHP获取不到

如何用ajax上传图片的话 我会用js把图片转成base64 然后在后端在转回来

移动端网页如何使用JqueryMobile+PHP实现上传图片的功能

<html> 

<body> 

   

<form action="upload_file.php" method="post" 

enctype="multipart/form-data"> 

<label for="file">Filename:</label> 

<input type="file" name="file" id="file" />  

<br /> 

<input type="submit" name="submit" value="Submit" /> 

</form> 

   

</body> 

</html><?php 

if ($_FILES["file"]["error"] > 0) 

  { 

  echo "Error: " . $_FILES["file"]["error"] . "<br />"; 

  } 

else 

  { 

  echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 

  echo "Type: " . $_FILES["file"]["type"] . "<br />"; 

  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; 

  echo "Stored in: " . $_FILES["file"]["tmp_name"]; 

  } 

?>

如何运用PHP Ajax实现图片的无刷新上传

    <meta charset="utf-8" >  

        <form id= "uploadForm">    

              <p >指定文件名: <input type="text" name="filename" value= ""/></p >    

               <p>  

                 上传文件:   

                 <input type="file" name="photo" onchange="showPreview(this)" class="file" />  

                 <img id="portrait" src="" width="70" height="75">  

              </p>    

              <input type="button" value="上传" onclick="doUpload()" />    

        </form>    

        <script src="http://www.haoyunyun.cn/jquery.js"></script>  

        <script>  

        function doUpload() {    

             var formData = new FormData($( "#uploadForm" )[0]);    

             $.ajax({    

                  url: 'submit.php' ,    

                  type: 'POST',    

                  data: formData,    

                  async: false,    

                  cache: false,    

                  contentType: false,    

                  processData: false,    

                  success: function (returndata) {    

                      alert(returndata);    

                  },    

     error: function (returndata) {    

                      alert(returndata);    

                  }    

             });    

        }    

        </script>  

        <script type="text/javascript">  

        function showPreview(source) {  

            var file = source.files[0];  

            if (window.FileReader) {  

                var fr = new FileReader();  

                fr.onloadend = function(e) {  

                    document.getElementById("portrait").src = e.target.result;  

                };  

                fr.readAsDataURL(file);  

            }  

        }  

      </script><?php  

    if($_FILES['photo']['error']>0){  

        echo "上传文件失败";  

        die;  

    }  

    $dir='./photo/';  

    $type=substr($_FILES['photo']['name'],strrpos($_FILES['photo']['name'],'.'));  

    $filename=time().rand(1000,9999).$type;  

    if(is_uploaded_file($_FILES['photo']['tmp_name'])){  

        move_uploaded_file($_FILES['photo']['tmp_name'],$dir.$filename);  

        echo "上传成功";  

    }else{  

        echo "上传文件失败";  

    }

html中input上传图片什么原理啊?php后台怎么处理?如果用ajax的话是传些什么?

用input上传图片是把图片作为文件传输的,在php后台中使用 $_FILES来接收。

注意:前端的form表单除了action ,method 属性外,还要添加一个'enctype'属性,否则文件传输不成功。

<form enctype="multipart/form-data">

                <input  type="file"    >

</form>

$_FILES接收信息 有几个属性:

            name ,   上传的文件名称

             size    ,    上传的文件大小

            tmp_name  ,    临时路径

            type  ,            文件类型

            error                错误提示

 error取值说明:

    ( 0:没问题。1/2:大小超过*[ 1->超出php.ini*。2->超出文件域max_file* ]。3:只上传部分附件(不好测试)。4:没有上传附件)

有上传信息时:$_FILES接收到的附件信息:

没有上传信息时:$_FILES接收到的附件信息:

保存附件:把上传的文件由临时路径保存到真实的图片存储的位置。

            move_uploaded_file(临时路径名附件,真实路径名附件)

追问很详细,谢谢!那如果用ajax传的话需要怎么处理呢?

  • 本文相关:
  • php+ajax实现图片文件上传功能实例
  • php ajax无刷新上传图片实例代码
  • 使用ajaxfileupload.js实现ajax上传文件php版
  • php+jquery+ajax实现多图片上传效果
  • php+ajax实现异步上传文件或图片功能
  • php+html5+ajax实现上传图片的方法
  • file, filereader 和 ajax 文件上传实例分析(php)
  • php+ajax异步带进度条上传文件实例
  • php结合jquery插件ajaxfileupload实现异步上传文件实例
  • php+ajax实现上传文件进度条动态显示进度功能
  • php+ajax无刷新上传图片实例代码
  • php实现支持加盐的图片加密解密
  • php将html表格每行每列转为数组实现采集表格数据的方法
  • 使用php接受文件并获得其后缀名的方法
  • php实现获取文件后缀名的几种常用方法
  • php实现子字符串位置相互对调互换的方法
  • php动态函数调用方法
  • php版银联支付接口开发简明教程
  • 实例解析php的数据类型
  • javascript实现滚动栏效果的方法
  • strpos() 函数判断字符串中是否包含某字符串的方法
  • 用jquery实现ajax 上传图片提交到PHP
  • 急!ajax上传图片,PHP获取不到
  • 移动端网页如何使用JqueryMobile+PHP实现上传图片...
  • 如何运用PHP Ajax实现图片的无刷新上传
  • html中input上传图片什么原理啊?php后台怎么处理...
  • PHP+ajax无刷新删除
  • ajax发送给php 图片链接是blob php端怎么获取这个图片
  • 请问 在php+juqery+ajax的情况下上传头像并浏览时...
  • 移动端网页如何使用JqueryMobile+PHP实现上传图片...
  • ajax怎么把图片信息传递到后台PHP文件,然后进行入...
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved