先说症状,做了一个简答的修改功能,前台填写数据,后台update 数据,就这么简单。
就这么简单的问题,令人蛋疼的事情发生了。怎么保存也保存不成功!!!!
立马开始怀疑人生了。都感觉是不是ET来了,跟我闹着玩呢???
纳尼? 这样也行??
写了10几年的asp 代码了,连个update 搞不定,这个太郁闷了。耐心查吧,一行一行的删代码,看看哪行代码影响了。
最后删了n多代码。终于发现问题在哪里了。
由于网页头部包含一个 top.asp 文件,这个asp 文件里 有一个 header() 函数,这个函数里有一个img 标签。是这样写的 <img src="#" /> .
save 程序 在这个 img 标签之后开始运行的。
然后问题来了,死活更新不上,删掉这个 img 标签里 的 “#”,一切正常,加上就update 失败 ,
诡异的是,当时update成功了,select 检查结果显示也更新成功了。当你打开数据库一看,没成功!!!
感觉像被回滚了一样。 诡异的是还不是回滚了。 回滚了数据会恢复到原来的。 他的情况是 给你留一半 写死的数据,request()的数据给你删掉,然后保存到数据库里。
实在诡异。看图。
有兴趣的兄弟姐妹可以研究一下。只有为什么 不知道! 汗~~
代码如下:
<%
response.Charset="utf-8"
session.CodePage=65001
%>
<img src="#" />
<%
sub bug(str)
if str="" then
response.Write "<br>------------------------------QS:------------------------------<br>"&vbcrlf&vbcrlf
for each item in request.QueryString
response.Write item&"="&server.HTMLEncode(request.QueryString(item))&"<br>"&vbcrlf
next
response.Write "------------------------------form:------------------------------<br>"&vbcrlf&vbcrlf
for each item in request.form
response.Write item&"="&server.HTMLEncode(request.form(item))&"<br>"&vbcrlf&vbcrlf
next
end if
response.Write server.HTMLEncode(str)&vbcrlf&vbcrlf
response.Write "<br>------------------------------------------------------------<br>"&vbcrlf&vbcrlf
end sub
dim server_1,user_1,pw_1,sql_1
Function getConnectionText() '//获取连接语句
db = "Dat.mdb" 'ACCESS数据库的文件名,请使用相对于网站根目录的的绝对路径
getConnectionText = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Server.MapPath(db)
End Function
dim conn, MM_conn_STRING
Set conn = Server.Createobject("ADODB.Connection")
MM_conn_STRING = getConnectionText()
conn.commandtimeout=1200
conn.open MM_conn_STRING
dim errmsg
if err.number=0 then
errmsg="数据库操作成功!"
else
Response.write "连接错误"
response.End()
end if
Act_ion = Request("Act_ion")
'Call header()
If Act_ion="Save" Then
bug ""
Addr = Trim(Request("Address"))
response.Write "<br><br>"
'response.Write "update XSD_User set address='"&request("address")&"' where [number]='18661658621'" & "---Address=" & Addr &"|<br>"
Sql="Select * From XSD_User Where [number]='18661658621'"
Set Rs=Server.CreateObject("ADODB.Recordset")
Rs.Open Sql,Conn,1,1
response.Write "更新之前的 address=" & rs("address") &"<br><br>"
rs.close
sql= "update XSD_User set address='777" & Addr & "' where ID=491"
response.Write sql
conn.execute(sql)
Sql="Select * From XSD_User Where [number]='18661658621'"
Set Rs=Server.CreateObject("ADODB.Recordset")
Rs.Open Sql,Conn,1,1
response.Write "<br><br>更新之后的 address=" & rs("address") &"<br><br>"
rs.close
response.Write "<font color=red>请打开数据库查看数据库里面的数据,就会发现491行数据 并不是“777" & Addr & "”,而是777,去掉第一行的 img标签里的井号就正常了,真奇怪了。</font>"
response.End()
End If
Sql="Select * From XSD_User Where Number='18661658621'"
response.Write sql
Set Rs=Server.CreateObject("ADODB.Recordset")
Rs.Open Sql,Conn,1,1
%>
<form action="?Act_ion=Save" method="post" name="frm" id="frm" target=" _blank">
<div id="config_one" class="tabs_wrapper"><div class="tabs_main">
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="formtable">
<tr>
<td class="formtd_left">会员编号:</td>
<td class="formtd_right"><%=Rs("Number")%></td>
</tr>
<tr >
<td class="formtd_left">联系地址:</td>
<td class="formtd_right"><input type="text" name="Address" id="Address" value="<%=rs("Address")%>" class="text write long" /></td>
</tr>
<tr <%if ("ZipCode")=false then%>style="display:none"<%end if%>>
<td class="formtd_left">邮政编码:</td>
<td class="formtd_right"><input type="text" name="ZipCode" id="ZipCode" disabled = "hidden" value="<%=("ZipCode")%>" class="text write short" /></td>
</tr>
</table>
</div></div>
<div class="actionBox"><span id="btnSpan"><input name="s" id="s" type="button" onClick="document.getElementById('frm').submit();" value="确 定" class="btn save" /> <input name="cancelBtn" id="cancelBtn" type="reset" value="取 消" class="actionBtn cancel" /></span></div>
</form>
<%
rs.close
conn.close
%>
数据库: