ASP数组循环的问题

kimee 2008-09-05 10:30:57
是这样一个问题,一个分类信息网站,我想从数据库中批量删除数据,并且用FSO删除这条数据里面的图片

首先用Split 函数获取一个数组,这个数组就是我选择的需要删除的数据的ID。
然后循环数组,
先找到这条数据ID
删除图片(代码略)
然后删除信息
结束循环

问题就出来了,始终无法找到这条数据,如果不删除,就能找到。明明是先查找,再删除,但是始终找不到数据,这个问题困扰我很多年了,至今想不通。希望高人解答。

代码里面我都注释了,用rstp.eof来判断是否正确,老是得到true,然后过一会儿(几分钟)操作,居然会得到flase,然后再操作就一直得到true。这问题也太玄了吧,难道是ASP的BUG?我就不明白为什么先查找,居然找不到数据,希望高人解答。


<!--#include file=conn.asp--> 
<!--#include file=cookies.asp-->
<%
'Split 函数 '返回一个从零开始的一维数组,其中包含指定数量的子字符串。
'UBound 函数 '返回指定数组维数的最大可用下标。
id=trim(request("selectedid"))
str2=split(id,",")

for i=0 to ubound(str2)

e=cint(trim(str2(i))) 'ID
response.Write "<li>"&e 'ID 输出信息,以便验证

'查找
set rstp=server.createobject("adodb.recordset")
sqltp="select * from xinxi where id="&e&""
rstp.open sqltp,conn,3,2

'输出信息,以便验证
response.Write "<li>"&sqltp 'SQL语句
response.write "<li>"&rstp.eof '是否到最后,老是得到true,就是找不到数据

'删除
exec="delete * from xinxi where id="&e&""
conn.execute exec

response.write "<li>删除信息成功!——"&e 'ID
next

Erase str2 '释放数组,不知道对吗

response.write "<meta http-equiv=refresh content=""2;URL=xinxi.asp"">"
response.End()
%>
...全文
507 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
kimee 2008-09-07
  • 打赏
  • 举报
回复
基本解决了,谢谢大家
zl_c 2008-09-06
  • 打赏
  • 举报
回复
最奇怪的问题,往往出在最简单的地方.
建议通篇仔细检查一下代码,先在数据库的查询分析器里调试一下.
  • 打赏
  • 举报
回复
还有你检查这个response.write "<li>"&rstp.eof '是否到最后,老是得到true,就是找不到数据
再这里没有意义,不是什么漏洞,你本身就只有一条记录,哪还有下一条
  • 打赏
  • 举报
回复
这种情况不要用split分割再循环,影响效率
kimee 2008-09-06
  • 打赏
  • 举报
回复
明天来结贴
kimee 2008-09-06
  • 打赏
  • 举报
回复
可能是我自己搞晕了,明天再认真测试,谢谢大家了
chinmo 的方法也很不错,我也想用EACH,但是不太熟悉这个,没写出来,现在学会了,很感谢你。
同时还学会了参数方法,在vb.net里面这个我就不理解,原来ASP里面也有这个方法,谢谢chinmo
kimee 2008-09-06
  • 打赏
  • 举报
回复
都不行,还是要出现问题,我快崩溃了
  • 打赏
  • 举报
回复
exec="delete * from xinxi where id="
sqltp="select * from xinxi where id="
for each id in request("selectedid")
Set rstp = conn.Execute(sqltp&id) '查找记录
If Not rstp.Eof Then '如果有此条记录
'...这里进行删除图片等操作
conn.execute(exec&id)
End If
next


简单点的
kimee 2008-09-06
  • 打赏
  • 举报
回复
zl_c 的代码我测试过了,简直奇怪了,这真是漏洞吗?
  • 打赏
  • 举报
回复
没有必要这么麻烦

最简单的做法:
exec="delete * from xinxi where id="
sqltp="select * from xinxi where id="&e&""
for each id in request("selectedid")
Set rstp = conn.Execute(sqltp&id) '查找记录
If Not rstp.Eof Then '如果有此条记录
'...这里进行删除图片等操作
conn.execute(exec&id)
End If
next


没有必要用split拆分再循环
kimee 2008-09-06
  • 打赏
  • 举报
回复
非常感谢 zl_c 的耐心解答!你讲的很详细
结果还不知道,我试试再说。
zl_c 2008-09-06
  • 打赏
  • 举报
回复
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!--#include file=conn.asp-->
<!--#include file=cookies.asp-->
<%
'定义变量
Dim id,str2
Dim i,e
Dim rstp,exec

id = Trim(Request("selectedid"))
str2 = Split(id,",") '将ID存入数组
For i = 0 To Ubound(str2) '循环取出ID号 进行删除处理
e = Cint(Trim(str2(i)))
Set rstp = conn.Execute("select * from xinxi where id=" & e) '查找记录
If Not rstp.Eof Then '如果有此条记录
'...这里进行删除图片等操作
conn.Execute("delete * from xinxi where id=" & e) '删除整条记录 如果是SQL数据库 去掉*号
Response.Write("<li>删除信息成功!——" & e)
End If
Next
Set rstp = Nothing

Response.Write("<meta http-equiv=refresh content=""2;URL=xinxi.asp"">")
Response.End()
%>
jiangpingchang 2008-09-05
  • 打赏
  • 举报
回复
1、for lbound(str2) to ubound(str2)
2、dim e 将e定义一下
3、改成e=cint(str2(i))试试,你确认输出来的e不相同吗?
4、简化Sql语句sqltp="select * from xinxi where id="&e
5、rstp.open sqltp,conn,1,1试试
6、不释放数组试试

28,391

社区成员

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

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