为什么都提示有重复了还是会提交到数据库?

时间:2022-06-02 00:20:41
象下面一段代码:数据库里没有已经存在的相同数据,但有时候提交时显示了已经存在的提示(就是您的这个网站已经在数据库中存在,不必再次提交!),但还是会往数据库里写入这条数据。这是很奇怪的,

一、为什么数据库里明明没有重复的数据却提示已经存在呢?
二、为什么都进入Then语句了,还会执行Else后面的语句呢?
晕啊,晕。

sql="select * from [Site_Data] where URL='"&URL&"'"
rs.open sql,conn,1,3
If not rs.eof Then
Errmsg=Errmsg+"您的这个网站已经在数据库中存在,不必再次提交!"
EXIT SUB
else
''''''''''开始写入数据
rs.addnew
rs("uid")=uid
rs("idate")=Date()
rs.update
ID=rs("ID")
end if
rs.close

26 个解决方案

#1


不会吧,楼主再用别的方法试试

#2


你上面那段是做成过程的形式吗?

改:If not rs.eof Then 为 If not (rs.bof and rs.eof) Then

改:EXIT SUB 为 response.end

#3


Errmsg=Errmsg+"您的这个网站已经在数据库中存在,不必再次提交!"
response.end

后面要根上response.end
知道吗?

#4


一开始我就是用If not (rs.bof and rs.eof) Then的,用response.end可以阻止继续执行,但为什么IF then后面的语句和Else后面的都会执行啊?

#5


if rst.eof or rst.bof then
  '写入数据
else
  '您的这个网站已经在数据库中存在,不必再次提交!"
end if

#6


if request("Action")="addsave" then
call addsave()
else
call main()
end if

………………

sub addsave()
sid=request.form("child")
topic=CheckStr(trim(request.form("topic")))
author=CheckStr(Trim(request.form("author")))
about=HTMLEnCode(request.form("about"))
AdText=CheckStr(request.form("AdText"))
AdURL=CheckStr(request.form("AdURL"))
If sid="" or topic="" or about="" then
Errmsg=Errmsg+"<li>您没有填写完整,信息没有发布,请返回重新填写!"
exit sub
end if
''''''''''开始写入数据
sql="select * from [Article_Joke] where topic='"&topic&"'" 
rs.open sql,conn,1,3
if rs.bof or rs.eof then
rs.addnew
rs("uid")=uid
rs("sid")=sid
rs("topic")=topic
rs("author")=author
rs("about")=about
rs("Hits")=0
rs("ETop")=0
rs("Chk")=2
IF AdText<>"" OR AdURL<>"" THEN
if AdText="" then AdText=AdURL
rs("Ad")=AdText&"|"&AdURL
Response.cookies("ceo")("AdText")=AdText
Response.cookies("ceo")("AdURL")=AdURL
END IF
rs("idate")=Date()
rs.update
else
Errmsg=Errmsg+"<li>这篇文章(<a href=/User/Show/joke.asp?ID="&RS("ID")&" target=_blank>点击这里查看</a>)在数据库里已经存在,请不要重复提交,仍然非常感谢您的参与!"
exit sub
rs.close
Response.End()
end if
rs.close
CloseDb%>


非常奇怪的一件事情,就是我自己添加一条信息,提示已经存在,不要再添加了,然后点击查看发现那条就是我添加的,说明:第一次,加入数据了,然后又调用了这段代码了。不然总不会If 和Then后面的语句都执行吧?

各位是否能帮忙找找到底哪里错了,我绝望了。

#7


if rs.eof and rs.bof then 
......

#8


if rs.eof and rs.bof then
if rs.bof or rs.eof then
if rs.eof then

这些到底什么区别啊,糊涂了。

#9


If not rs.eof Then
Errmsg=Errmsg+"您的这个网站已经在数据库中存在,不必再次提交!" '这执行了
EXIT SUB
else                                                               ,这就不可能执行了    
''''''''''开始写入数据
rs.addnew
rs("uid")=uid
rs("idate")=Date()
rs.update
ID=rs("ID")
end if


#10


如果没有数据呢就用if rs.eof and rs.bof判断

rs.eof 和rs.bof分别表示数据的最后一天的下一条和第一条的上一条记录

是不是很晕,但我只能这么给你解释

#11


这个我知道啊,那我表里已经有其他数据存在,只是查找有没有和这条数据相同的,这样的话没有用什么表示?if rs.eof and rs.bof吗?

还有我上面的代码为什么if和then后面的都执行了?

#12


用sql写吧!rs.eof就是把所有记录找一次都没有找到

#13


对啊,比如查找name="aaa"
rs.open "select * from table where name='aaa'"
if rs.eof and rs.bof then 
response.write "no data!"
else
response.write name
end if

#14


rs.open "select * from table where name='aaa'"
if rs.eof and rs.bof then 
response.write "no data!"
else
response.write name
end if

我的就是这么写的啊。
但真的会发生——写入数据,然后告诉我该数据已经存在,不要再提交了,后来我专门加了句代码看已经存在的是那条记录,结果发现就是我刚刚加的那条,狂晕。
我想是重复执行了。但也找不到哪里重复了。代码都在上面贴出来了。

http://net.auak.com/User/Net/site_new.asp
大家到这个网站登陆页面看看,或许就会遇到这种情况,有时候有没有的。

#15


up

#16


这段是我在用的
Set Rs = Server.CreateObject("ADODB.RecordSet")
Rs.Open "select * from musiclist where title='"&ad_title&"' and url='"&Ad_url&"'",Conn,1,3
If Rs.Eof Then
Rs.Addnew
Rs("title")=Ad_title
Rs("url")=Ad_url
Rs("class")=Ad_class
Rs("type")=Ad_type
Rs("lyric")=Ad_lyric
Rs.Update
%>
<script>alert('添加成功,返回请刷新页面!');history.back();</script>
<%else%>
<script>alert('此歌曲已存在!');history.back();</script>
<%
End If
Rs.Close
set rs = nothing%>

#17


我出现的情况是,写入数据较少的时候,可能会重复写入2次,但信息量较大的时候就不大会写入2次,

如果判断是否有重复的化酒会提示已经存在了,但这条记录其实就是刚刚提交的数据,就是2次里的第一次。

比如这么一个过程:
1-获取表单内容
2-写入数据
3-提示成功信息

1操作几次不知道,2就是上面我说的情况,3在没有判断的情况下是提示成功信息一次,否则会提示已经存在。

奇怪,奇怪

#18


代码看不出有什么问题

但你的问题存在,说明肯定有问题

把你的SQL语句response.write 看看,是不是你所要的
看看库里的记录跟查询的条件是不是完全相同

#19


if rs.eof then
'写记录
else
'提示
end if
这样的结构不会错的,你提示最好放到后面,或者加上response.end不然提示可能会出错误

#20


不是代码的问题,是你的浏览器的问题,
我都碰到无数次了,明明有问题的页面,
第一次刷新是500错误,第二次刷新又没错误了,
但是新开一个浏览器再第一次打开那页面又是500错误。

你的可能也是一样的错误,刷新时,掉出了以前的缓冲页面。

#21


可能是你的代码里面别处有问题,被浏览器诬赖到这段代码了 :p

#22


不是啊,我一直用myie的,现在用ie还是这样啊。
我把代码全部整理出来了,大家帮忙看看啊。
http://www.zugou.com/a.rar
添加那个页面的所有相关页面都在里面了,就4个页面,不是很大,派托各位大哥帮忙看看啊。

#23


if rs.eof and rs.bof then

#24


代码如下,各位帮忙看看啊,要钱也可以的,急啊
http://club.zugou.com/ShowPost.asp?id=14

#25


if rst.eof or rst.bof then
  '写入数据
else
  '您的这个网站已经在数据库中存在,不必再次提交!"
end if

#26


没看到你的代码里面有你提到的相关代码
就从这个现象看,肯定是你的这段代码被执行了2次。

#1


不会吧,楼主再用别的方法试试

#2


你上面那段是做成过程的形式吗?

改:If not rs.eof Then 为 If not (rs.bof and rs.eof) Then

改:EXIT SUB 为 response.end

#3


Errmsg=Errmsg+"您的这个网站已经在数据库中存在,不必再次提交!"
response.end

后面要根上response.end
知道吗?

#4


一开始我就是用If not (rs.bof and rs.eof) Then的,用response.end可以阻止继续执行,但为什么IF then后面的语句和Else后面的都会执行啊?

#5


if rst.eof or rst.bof then
  '写入数据
else
  '您的这个网站已经在数据库中存在,不必再次提交!"
end if

#6


if request("Action")="addsave" then
call addsave()
else
call main()
end if

………………

sub addsave()
sid=request.form("child")
topic=CheckStr(trim(request.form("topic")))
author=CheckStr(Trim(request.form("author")))
about=HTMLEnCode(request.form("about"))
AdText=CheckStr(request.form("AdText"))
AdURL=CheckStr(request.form("AdURL"))
If sid="" or topic="" or about="" then
Errmsg=Errmsg+"<li>您没有填写完整,信息没有发布,请返回重新填写!"
exit sub
end if
''''''''''开始写入数据
sql="select * from [Article_Joke] where topic='"&topic&"'" 
rs.open sql,conn,1,3
if rs.bof or rs.eof then
rs.addnew
rs("uid")=uid
rs("sid")=sid
rs("topic")=topic
rs("author")=author
rs("about")=about
rs("Hits")=0
rs("ETop")=0
rs("Chk")=2
IF AdText<>"" OR AdURL<>"" THEN
if AdText="" then AdText=AdURL
rs("Ad")=AdText&"|"&AdURL
Response.cookies("ceo")("AdText")=AdText
Response.cookies("ceo")("AdURL")=AdURL
END IF
rs("idate")=Date()
rs.update
else
Errmsg=Errmsg+"<li>这篇文章(<a href=/User/Show/joke.asp?ID="&RS("ID")&" target=_blank>点击这里查看</a>)在数据库里已经存在,请不要重复提交,仍然非常感谢您的参与!"
exit sub
rs.close
Response.End()
end if
rs.close
CloseDb%>


非常奇怪的一件事情,就是我自己添加一条信息,提示已经存在,不要再添加了,然后点击查看发现那条就是我添加的,说明:第一次,加入数据了,然后又调用了这段代码了。不然总不会If 和Then后面的语句都执行吧?

各位是否能帮忙找找到底哪里错了,我绝望了。

#7


if rs.eof and rs.bof then 
......

#8


if rs.eof and rs.bof then
if rs.bof or rs.eof then
if rs.eof then

这些到底什么区别啊,糊涂了。

#9


If not rs.eof Then
Errmsg=Errmsg+"您的这个网站已经在数据库中存在,不必再次提交!" '这执行了
EXIT SUB
else                                                               ,这就不可能执行了    
''''''''''开始写入数据
rs.addnew
rs("uid")=uid
rs("idate")=Date()
rs.update
ID=rs("ID")
end if


#10


如果没有数据呢就用if rs.eof and rs.bof判断

rs.eof 和rs.bof分别表示数据的最后一天的下一条和第一条的上一条记录

是不是很晕,但我只能这么给你解释

#11


这个我知道啊,那我表里已经有其他数据存在,只是查找有没有和这条数据相同的,这样的话没有用什么表示?if rs.eof and rs.bof吗?

还有我上面的代码为什么if和then后面的都执行了?

#12


用sql写吧!rs.eof就是把所有记录找一次都没有找到

#13


对啊,比如查找name="aaa"
rs.open "select * from table where name='aaa'"
if rs.eof and rs.bof then 
response.write "no data!"
else
response.write name
end if

#14


rs.open "select * from table where name='aaa'"
if rs.eof and rs.bof then 
response.write "no data!"
else
response.write name
end if

我的就是这么写的啊。
但真的会发生——写入数据,然后告诉我该数据已经存在,不要再提交了,后来我专门加了句代码看已经存在的是那条记录,结果发现就是我刚刚加的那条,狂晕。
我想是重复执行了。但也找不到哪里重复了。代码都在上面贴出来了。

http://net.auak.com/User/Net/site_new.asp
大家到这个网站登陆页面看看,或许就会遇到这种情况,有时候有没有的。

#15


up

#16


这段是我在用的
Set Rs = Server.CreateObject("ADODB.RecordSet")
Rs.Open "select * from musiclist where title='"&ad_title&"' and url='"&Ad_url&"'",Conn,1,3
If Rs.Eof Then
Rs.Addnew
Rs("title")=Ad_title
Rs("url")=Ad_url
Rs("class")=Ad_class
Rs("type")=Ad_type
Rs("lyric")=Ad_lyric
Rs.Update
%>
<script>alert('添加成功,返回请刷新页面!');history.back();</script>
<%else%>
<script>alert('此歌曲已存在!');history.back();</script>
<%
End If
Rs.Close
set rs = nothing%>

#17


我出现的情况是,写入数据较少的时候,可能会重复写入2次,但信息量较大的时候就不大会写入2次,

如果判断是否有重复的化酒会提示已经存在了,但这条记录其实就是刚刚提交的数据,就是2次里的第一次。

比如这么一个过程:
1-获取表单内容
2-写入数据
3-提示成功信息

1操作几次不知道,2就是上面我说的情况,3在没有判断的情况下是提示成功信息一次,否则会提示已经存在。

奇怪,奇怪

#18


代码看不出有什么问题

但你的问题存在,说明肯定有问题

把你的SQL语句response.write 看看,是不是你所要的
看看库里的记录跟查询的条件是不是完全相同

#19


if rs.eof then
'写记录
else
'提示
end if
这样的结构不会错的,你提示最好放到后面,或者加上response.end不然提示可能会出错误

#20


不是代码的问题,是你的浏览器的问题,
我都碰到无数次了,明明有问题的页面,
第一次刷新是500错误,第二次刷新又没错误了,
但是新开一个浏览器再第一次打开那页面又是500错误。

你的可能也是一样的错误,刷新时,掉出了以前的缓冲页面。

#21


可能是你的代码里面别处有问题,被浏览器诬赖到这段代码了 :p

#22


不是啊,我一直用myie的,现在用ie还是这样啊。
我把代码全部整理出来了,大家帮忙看看啊。
http://www.zugou.com/a.rar
添加那个页面的所有相关页面都在里面了,就4个页面,不是很大,派托各位大哥帮忙看看啊。

#23


if rs.eof and rs.bof then

#24


代码如下,各位帮忙看看啊,要钱也可以的,急啊
http://club.zugou.com/ShowPost.asp?id=14

#25


if rst.eof or rst.bof then
  '写入数据
else
  '您的这个网站已经在数据库中存在,不必再次提交!"
end if

#26


没看到你的代码里面有你提到的相关代码
就从这个现象看,肯定是你的这段代码被执行了2次。