我正在尝试用经典的asp编写,当用户点击链接时将数据添加到数据库中。但是,调用vbscript程序时遇到问题。我尝试使用<%Sub/End %>
和我使用的onclick
- onclick="<%insertdata()%>"
并且它在页面加载时运行,但我只想在用户点击时运行它。所以,我改变它如下,但它不起作用!这是我的代码:
<html>
<head>
<script language="vbscript">
Function insertdata()
Dim con
Dim objRs
Dim strSQL
Set con = Server.CreateObject("ADODB.Connection")
con.Open "DSN=***;UID=***;PWD=***"
strSQL="INSERT INTO Authen_User VALUES ('"&Session.Contents("userKey")&"','"&Session.Contents("name")&"','"&Session.Contents("Type")&"')"
set objRS = con.execute(strSQL)
con.Close
set con=Nothing
End Function
</script>
<title></title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<form><body>
<table><tr><td>
<a href="defaultpage.aspx?key="&Server.URLEncode(Session.Contents("userKey"))" language="vbscript" onclick="insertdata()">Semetral Survey</a><br>
<a href="login_2.asp">Return to Login Page</a>
</td></tr></table>
</body></form>
</html>
答案 0 :(得分:2)
因为它是ASP,您必须将要在服务器上运行的内容与要在客户端上运行的内容分开。在您的示例中,这一点并不清楚。假设,我假设您的数据库位于防火墙后面,只能由服务器访问。
其他一些说明:
我猜猜提供的asp脚本是服务器对你没有向我们展示的表单的响应吗?这不是很清楚,但也许你应该读一下w3Schools的ASP Form Collection。
您的Function insertdata()
不正确。您正在混合客户端和服务器概念。例如,Session.Contents
必须在服务器端进行评估,并且必须位于&lt;%...%&gt;内。阻止,而insertdata()函数本身属于客户端,因为,如您所示,您需要它来响应用户事件。我已经重写了insertdata的一行来说明我正在做的事情:
Sub insertdata
...
strSQL = "INSERT INTO Authen_User VALUES ("
strSQL = strSQL & "'<%=Session.Contents("userKey")%>'"
strSQL = strSQL & ",'<%=Session.Contents("name")%>'"
strSQL = strSQL & ",'<%=Session.Contents("Type")%>')"
...
End Sub
当ASP看到你的&lt;%...%&gt;它将使用正确的值替换服务器上的它们,以便在客户端看到它时,当网页到达客户端时将显示替换值:
Sub insertdata
...
strSQL = "INSERT INTO Authen_User VALUES ("
strSQL = strSQL & "'userKey12345678'"
strSQL = strSQL & ",'John Smith'"
strSQL = strSQL & ",'Mr')"
...
End Sub
即。如果用户在浏览器中执行查看页面源,他将永远不会看到&lt;%...%&gt;在源中但替换值。因此,当他点击链接时,它会做正确的事情。