删除产品信息和删除文章时,除了删除数据库记录,怎么同时删除其中的附件

guda9sex0 2014-03-26 09:48:43
文章和产品信息都是放在news表内。
1,文章是用编辑器写的,图片的路径信息和文章内容混合在一起,放在字段:cntnt 内,其物理存放路径随编辑器设置变动;
2,产品信息的图片路径和文件名信息是放在pic1,pic2,pic3,pic4,pic5这五个字段内的,其中可以有空值(因为并不是每个产品都有5个图片),其物理存放路径基本是固定在一个大文件夹下的.

删除数据库记录很容易,一句rs.delete就行,可是如何才能同时删除这条数据库记录内的图片信息呢。
...全文
475 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Go 旅城通票 2014-03-27
  • 打赏
  • 举报
回复
引用 8 楼 guda9sex0 的回复:
谢谢,产品信息中的图片倒是可以用专门的数据库字段来存放; 可是新闻文章中的图片如何实现单独存放?因为文章内容是用UEDITOR编辑器做的。 [quote=引用 6 楼 showbo 的回复:] 再删除数据库记录前用fso删除记录的图片就好了,文章中上传的图片楼主最好用另外一个字段记录下来,要不就需要从文章中用正则提取出图片,麻烦
set fso=server.CreateObject("scripting.filesystemobject")
function delfile(folderpath,filename)'folderpath为你的当前页面相对于文件的存储路径
  if trim(filename&"")<>"" then'判断文件名是否为空再执行是否删除操作
    filepath=server.MapPath(folderpath&"/"&filename)
    fso.DeleteFile filepath
  end if
end function


delfile("../xxx/xxxx",rs("pic1"))
delfile("../xxx/xxxx",rs("pic2"))
delfile("../xxx/xxxx",rs("pic3"))
delfile("../xxx/xxxx",rs("pic4"))
delfile("../xxx/xxxx",rs("pic5"))
set fso=nothing
[/quote] 要修改编辑器保存图片的代码,用session保存下图片地址,写数据库的时候从session中获取图片内容存入数据库后清空session
guda9sex0 2014-03-27
  • 打赏
  • 举报
回复
谢谢,产品信息中的图片倒是可以用专门的数据库字段来存放; 可是新闻文章中的图片如何实现单独存放?因为文章内容是用UEDITOR编辑器做的。
引用 6 楼 showbo 的回复:
再删除数据库记录前用fso删除记录的图片就好了,文章中上传的图片楼主最好用另外一个字段记录下来,要不就需要从文章中用正则提取出图片,麻烦
set fso=server.CreateObject("scripting.filesystemobject")
function delfile(folderpath,filename)'folderpath为你的当前页面相对于文件的存储路径
  if trim(filename&"")<>"" then'判断文件名是否为空再执行是否删除操作
    filepath=server.MapPath(folderpath&"/"&filename)
    fso.DeleteFile filepath
  end if
end function


delfile("../xxx/xxxx",rs("pic1"))
delfile("../xxx/xxxx",rs("pic2"))
delfile("../xxx/xxxx",rs("pic3"))
delfile("../xxx/xxxx",rs("pic4"))
delfile("../xxx/xxxx",rs("pic5"))
set fso=nothing
scscms太阳光 2014-03-27
  • 打赏
  • 举报
回复
说白了就是正侧读取html里面的图片地址: 删除新闻同时删除新闻图片参考:
<%
dim conter
center="新闻内容...."
'==读取文章内容里的图片地址
Dim objRegExp,Matches,Match,s_str,fso,path
set fso=server.CreateObject("scripting.filesystemobject") '设置fso对像
	Set objRegExp = New Regexp '建立正则规则
	objRegExp.IgnoreCase = True 
	objRegExp.Global = True 
	objRegExp.Pattern = "src\=.+?\.(gif|jpg|jpeg|png|bmp)" '提取的是这几种图片格式
	Set Matches =objRegExp.Execute(center) '开始搜索
	For Each Match in Matches	'循环执行
		s_str=Lcase(replace(Match.Value,"src=","")) '替换字符并转成小写
		s_str=replace(replace(s_str,"""",""),"'","") '替换单双引号
		If left(s_str,13)="/fuploadfile/" Then '判断是不是本站图片地址
			path=Server.MapPath(s_str) '获取服务器物理路径
			If fso.FileExists(path) Then '判断文件是否存在
				fso.deleteFile(path) '删除文件
			End If
		End If
	Next
%>
Go 旅城通票 2014-03-27
  • 打赏
  • 举报
回复
再删除数据库记录前用fso删除记录的图片就好了,文章中上传的图片楼主最好用另外一个字段记录下来,要不就需要从文章中用正则提取出图片,麻烦
set fso=server.CreateObject("scripting.filesystemobject")
function delfile(folderpath,filename)'folderpath为你的当前页面相对于文件的存储路径
  if trim(filename&"")<>"" then'判断文件名是否为空再执行是否删除操作
    filepath=server.MapPath(folderpath&"/"&filename)
    fso.DeleteFile filepath
  end if
end function


delfile("../xxx/xxxx",rs("pic1"))
delfile("../xxx/xxxx",rs("pic2"))
delfile("../xxx/xxxx",rs("pic3"))
delfile("../xxx/xxxx",rs("pic4"))
delfile("../xxx/xxxx",rs("pic5"))
set fso=nothing
  • 打赏
  • 举报
回复
这些是很简单的问题的,不要考虑太复杂了
dim conter
    center=rs("cntnt")'取得新闻内容
    '==下面读取文章内容里的图片地址
    Dim objRegExp,Matches,Match,s_str,fso,path
    set fso=server.CreateObject("scripting.filesystemobject") '设置fso对像
    Set objRegExp = New Regexp '建立正则规则
    objRegExp.IgnoreCase = True 
    objRegExp.Global = True 
    'objRegExp.Pattern = "src\=.+?\.(gif|jpg|jpeg|png|bmp)" '提取的是这几种图片格式
    objRegExp.Pattern = "\s+src\s*=\s*['""]?([^\s'"">]+\.(jpg|jpeg|gif|png|bmp))" '提取的是这几种图片格式
    Set Matches =objRegExp.Execute(center) '开始搜索
    For Each Match in Matches    '循环执行
        s_str=LCase(Match.submatches(0)) '替换字符并转成小写
       ' If left(s_str,28)="/images/aloesky_uploadfiles/" Then '判断是不是本站图片地址(小写),这里这么写是有BUG的,因为图片很有可能会带本站的网址,所以要换成
        if   instr(s_str,,"本站的网址")>0 or  left(s_str,28)="/images/aloesky_uploadfiles/" then
            path=Server.MapPath(s_str) '获取服务器物理路径
            If fso.FileExists(path) Then '判断文件是否存在
                fso.deleteFile(path) '删除文件
            End If
        End If
    Next
scscms太阳光 2014-03-27
  • 打赏
  • 举报
回复
    dim conter
    center=rs("cntnt")'取得新闻内容
	'==下面读取文章内容里的图片地址
    Dim objRegExp,Matches,Match,s_str,fso,path
    set fso=server.CreateObject("scripting.filesystemobject") '设置fso对像
    Set objRegExp = New Regexp '建立正则规则
    objRegExp.IgnoreCase = True 
    objRegExp.Global = True 
    'objRegExp.Pattern = "src\=.+?\.(gif|jpg|jpeg|png|bmp)" '提取的是这几种图片格式
	objRegExp.Pattern = "\s+src\s*=\s*['""]?([^\s'"">]+\.(jpg|jpeg|gif|png|bmp))" '提取的是这几种图片格式
    Set Matches =objRegExp.Execute(center) '开始搜索
    For Each Match in Matches    '循环执行
        s_str=LCase(Match.submatches(0)) '替换字符并转成小写
        If left(s_str,28)="/images/aloesky_uploadfiles/" Then '判断是不是本站图片地址(小写)
            path=Server.MapPath(s_str) '获取服务器物理路径
            If fso.FileExists(path) Then '判断文件是否存在
                fso.deleteFile(path) '删除文件
            End If
        End If
    Next
aloesky 2014-03-27
  • 打赏
  • 举报
回复
哦,不对,文字被删除了,图片没被删除
aloesky 2014-03-27
  • 打赏
  • 举报
回复
我也搞懵了,刚好也做到这个程度:
 
     id=trim(request("id"))
      if id = "" then
         response.write "<SCRIPT language=JavaScript>alert('您没有选择删除项!');"
         response.write"this.history.back(-1);></SCRIPT>" 
         response.end
	  else 
	     idlist=id '取得上一个页面传过来的待删除id值
         if instr(idlist,",")>0 then  'instr函数用于判断上一个页面传过来的id数量,其值大于0,就表示是批量选择
            idarr=split(idlist)       '构建id数组。
            for i = 0 to ubound(idarr)  '开始遍历,以id数组的最大个数为循环次数-ubound:数组的最大下标
                nid=cint((idarr(i)))
                call deleteannounce(nid)  '循环删除每个id值的新闻以及图片的函数。
            next
         else           '如果不是批量,只有一个id值,就表示只删除一笔
                call deleteannounce(idlist)  '直接调用删除函数。
         end if	  
	  end if
      call connclose()
	  response.write "<SCRIPT language=JavaScript>alert('删除成功 \n \n 点击确定返回列表');"
      response.write"this.location.href='news_mgr.asp';</SCRIPT>" 
      response.end
	  
sub deleteannounce(ID)
	sqlDel="select * from News where ID=" & ID
	Set rs= Server.CreateObject("ADODB.Recordset")
	rs.open sqlDel,conn,1,3
	
    dim conter
    center=rs("cntnt")'取得新闻内容
	
	'==下面读取文章内容里的图片地址
    Dim objRegExp,Matches,Match,s_str,fso,path
    set fso=server.CreateObject("scripting.filesystemobject") '设置fso对像
    Set objRegExp = New Regexp '建立正则规则
    objRegExp.IgnoreCase = True 
    objRegExp.Global = True 
    objRegExp.Pattern = "src\=.+?\.(gif|jpg|jpeg|png|bmp)" '提取的是这几种图片格式
    Set Matches =objRegExp.Execute(center) '开始搜索
    For Each Match in Matches    '循环执行
        s_str=Lcase(replace(Match.Value,"src=","")) '替换字符并转成小写
        s_str=replace(replace(s_str,"""",""),"'","") '替换单双引号
        If left(s_str,28)="/images/aloesky_UploadFiles/" Then '判断是不是本站图片地址
            path=Server.MapPath(s_str) '获取服务器物理路径
            If fso.FileExists(path) Then '判断文件是否存在
                fso.deleteFile(path) '删除文件
            End If
        End If
    Next
	
    rs.delete
	rs.update
	call rsclose
end sub
报错,加上On Error Resume Next后,不但图片删除不了,连文字都删除不了
guda9sex0 2014-03-27
  • 打赏
  • 举报
回复
先来尝试把UEDITOR的上传路径改一下: 1:在根目录下建立upload目录,用于存放上传文件。 2:修改editor_config.js文件,找到imagePath : URL + 'server/upload/', 修改为:imagePath :'', 3:修改server/upload/asp/imageUp.asp文件,找到uploadPath = "../uploadimages/" 修改为:uploadPath = "/upload/"
guda9sex0 2014-03-27
  • 打赏
  • 举报
回复
引用 7 楼 xzy21com 的回复:
说白了就是正侧读取html里面的图片地址: 删除新闻同时删除新闻图片参考:
<%
dim conter
center="新闻内容...."
'==读取文章内容里的图片地址
Dim objRegExp,Matches,Match,s_str,fso,path
set fso=server.CreateObject("scripting.filesystemobject") '设置fso对像
	Set objRegExp = New Regexp '建立正则规则
	objRegExp.IgnoreCase = True 
	objRegExp.Global = True 
	objRegExp.Pattern = "src\=.+?\.(gif|jpg|jpeg|png|bmp)" '提取的是这几种图片格式
	Set Matches =objRegExp.Execute(center) '开始搜索
	For Each Match in Matches	'循环执行
		s_str=Lcase(replace(Match.Value,"src=","")) '替换字符并转成小写
		s_str=replace(replace(s_str,"""",""),"'","") '替换单双引号
		If left(s_str,13)="/fuploadfile/" Then '判断是不是本站图片地址
			path=Server.MapPath(s_str) '获取服务器物理路径
			If fso.FileExists(path) Then '判断文件是否存在
				fso.deleteFile(path) '删除文件
			End If
		End If
	Next
%>
这句:If left(s_str,13)="/fuploadfile/" Then '判断是不是本站图片地址 这里不太好判断,用什么函数截取更准确些呢?因为编辑器里,我上传的图片路径是这样的:
http://127.0.0.1/adminP/adminP_ueditor/asp/adminP_upload1/20140327/13958995628520384.jpg
域名字数在变化,最右边最终的文件夹名称也是变化的。
guda9sex0 2014-03-27
  • 打赏
  • 举报
回复
引用 7 楼 xzy21com 的回复:
说白了就是正侧读取html里面的图片地址: 删除新闻同时删除新闻图片参考:
<%
dim conter
center="新闻内容...."
'==读取文章内容里的图片地址
Dim objRegExp,Matches,Match,s_str,fso,path
set fso=server.CreateObject("scripting.filesystemobject") '设置fso对像
	Set objRegExp = New Regexp '建立正则规则
	objRegExp.IgnoreCase = True 
	objRegExp.Global = True 
	objRegExp.Pattern = "src\=.+?\.(gif|jpg|jpeg|png|bmp)" '提取的是这几种图片格式
	Set Matches =objRegExp.Execute(center) '开始搜索
	For Each Match in Matches	'循环执行
		s_str=Lcase(replace(Match.Value,"src=","")) '替换字符并转成小写
		s_str=replace(replace(s_str,"""",""),"'","") '替换单双引号
		If left(s_str,13)="/fuploadfile/" Then '判断是不是本站图片地址
			path=Server.MapPath(s_str) '获取服务器物理路径
			If fso.FileExists(path) Then '判断文件是否存在
				fso.deleteFile(path) '删除文件
			End If
		End If
	Next
%>
这方法不错,谢谢,我来测试一下
guda9sex0 2014-03-26
  • 打赏
  • 举报
回复
Microsoft VBScript 运行时错误 (0x800A01A8) 缺少对象: 'rs' D:\WWW\ASP\../include/conn.asp, 第 24 行 conn.asp是一个数据库连接公用文件:

<!--#include file="code.asp"-->
<!--#include file="adovbs.inc"-->
<%
Set conn=server.CreateObject("adodb.connection")
connstr="provider=microsoft.jet.oledb.4.0;Jet OLEDB:Database Password=;data source="&server.mappath("/dbs/# @XXX.mdb")
conn.open connstr
If Err Then
   err.Clear
   call connclose()
   response.write"<SCRIPT language=JavaScript>alert('数据库后台配置被更改,请联络开发者!');"
   response.write"javascript:history.go(-1)</SCRIPT>"
   response.end
End If


sub connclose()
  conn.close
  set conn=nothing
end sub

sub rsclose()
  rs.close
  set rs=nothing
end sub

sub rs1close()
  rs1.close
  set rs1=nothing
end sub

sub rs2close()
  rs2.close
  set rs2=nothing
end sub

sub rs3close()
  rs3.close
  set rs3=nothing
end sub

sub rs4close()
  rs4.close
  set rs4=nothing
end sub

sub rs5close()
  rs5.close
  set rs5=nothing
end sub

sub rs6close()
  rs6.close
  set rs6=nothing
end sub

sub rs7close()
  rs7.close
  set rs7=nothing
end sub

sub rs8close()
  rs8.close
  set rs8=nothing
end sub


sub rs9close()
  rs9.close
  set rs9=nothing
end sub

sub rs10close()
  rs10.close
  set rs10=nothing
end sub

sub rsXclose()
  rsX.close
  set rsX=nothing
end sub
%>
guda9sex0 2014-03-26
  • 打赏
  • 举报
回复
select cntnt from.. 试了,没用,报错对象不存在
guda9sex0 2014-03-26
  • 打赏
  • 举报
回复
楼上有个问题:文章中的图片信息是用编辑器做的图文混排,图片信息均是用绝对路径的方式:

<img src="http://127.0.0.1/user/user_ueditor/asp/upload1/20140326/13958410089191923.jpg" style="float:none;" title="2.jpg"/>
那么取数据的删除语句:
sql="select D_SavePathFileName from news where news_id="&did
应该怎么取?直接:select cntnt from...吗? 再则,我测试了一下,用了SUB后,数据库conn.asp内的sub开始报错了
aloesky 2014-03-26
  • 打赏
  • 举报
回复
仅供参考:

<%
'前面数据库连接语句...
dim id,idlist,idarr,nid
if  isempty(trim(request("chkid"))) then '这里的chkid相当于你的文章或者产品id.
    response.write "<SCRIPT language=JavaScript>alert('非法请求,您未选择删除项!');"
    response.write"this.history.back(-1);></SCRIPT>" 
    response.end
else
idlist=trim(request("chkid")) '取得上一个页面传过来的待删除id值
 if instr(idlist,",")>0 then  'instr函数用于判断上一个页面传过来的id数量,其值大于0,就表示是批量选择
   idarr=split(idlist)       '构建id数组。
    for i = 0 to ubound(idarr)  '开始遍历,以id数组的最大个数为循环次数
     nid=cint((idarr(i)))
     call deleteannounce(nid)  '循环删除每个id值的新闻以及图片的函数。
   next
 else           '如果不是批量,只有一个id值,就表示只删除一笔
  call deleteannounce(idlist)  '直接调用删除函数。
 end if
end if 

 conn.close
 set conn=nothing

response.write "<SCRIPT language=JavaScript>alert('删除成功!');"
response.write"this.location.href='news_list.asp';</SCRIPT>" 
response.end

sub deleteannounce(did)    '用于删除数据(包括数据库记录和附件)的函数定义
 
dim rs,sql,picstr
set rs=server.createobject("adodb.recordset")
sql="select D_SavePathFileName from news where news_id="&did
rs.open sql,conn,1,1
picstr=rs("D_SavePathFileName")
rs.close
set rs=nothing
if picstr<>"" then
picstr=replace(picstr,"/","\")
Set FObject=Server.CreateObject("Scripting.FileSystemObject")'建立对象 
if instr(picstr,"|")>0 then  '如果是多张图片,就循环删除
dim picArr
picArr=split(picstr,"|")
for i=0 to ubound(picArr)
 
if Fobject.FileExists(Server.MapPath(picArr(i))) then '判断文件是否存在 
        Fobject.deleteFile server.mapPath(picArr(i)) 
end if 
next
else   '如果是单张图片,就直接判断删除。
if Fobject.FileExists(Server.MapPath(picstr)) then '判断文件是否存在 
        Fobject.deleteFile server.mapPath(picstr) 
end if 
end if
set FObject=nothing
 
end if
 
sql="delete from news where news_id="&(did)   '删除新闻的数据。
conn.execute sql
sql1="delete from newspl where ssnews="& did   '删除相关的评论。
conn.execute sql1
if err.Number<>0 then
err.clear
response.write "删 除 失 败 !<br>"
end if
End sub
conn.close
set conn=nothing
%>
guda9sex0 2014-03-26
  • 打赏
  • 举报
回复
在提交删除页面:

'单条删除
<a href="act.asp?method=del&id=<%=rs("id")%>" target=_self> 点此删除</a>
当然,也要考虑多条删除的问题,就是在文章(产品)列表前,给个复选框来实现批量删除记录。

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧