Html 在a href onclick(经典ASP)中调用VBScript子脚本

Html 在a href onclick(经典ASP)中调用VBScript子脚本,html,asp-classic,vbscript,Html,Asp Classic,Vbscript,我试图在经典asp中编写,在用户单击链接时将数据添加到数据库中。但是,我在调用vbscript过程时遇到问题。我尝试与一起使用,在onclick中我使用了-onclick=“”,它在页面加载时运行,但我只想在用户单击时运行它。所以,我改变了它如下,但它不工作!这是我的密码: <html> <head> <script language="vbscript"> Function insertdata() Dim con Dim objRs Dim strSQL

我试图在经典asp中编写,在用户单击链接时将数据添加到数据库中。但是,我在调用vbscript过程时遇到问题。我尝试与
一起使用,在
onclick
中我使用了-
onclick=“”
,它在页面加载时运行,但我只想在用户单击时运行它。所以,我改变了它如下,但它不工作!这是我的密码:

<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>

函数insertdata()
暗箱操作
模糊对象
Dim strSQL
Set con=Server.CreateObject(“ADODB.Connection”)
con.打开“DSN=***;UID=***;PWD=***”
strSQL=“插入到Authen_用户值(“&Session.Contents(“userKey”)&“,”&Session.Contents(“name”)&“,”&Session.Contents(“Type”)&“)”
set objRS=con.execute(strSQL)
结案
设置con=Nothing
端函数


因为是ASP,所以必须将要在服务器上运行的内容与要在客户端上运行的内容分开。这在你的例子中并不清楚。假设,我会假设您的数据库位于防火墙后面,并且只能由服务器访问

  • 需要在服务器上运行的任何内容都应该以块为单位
  • i、 e.您的insertdata()例程可能属于服务器(目前它是从客户端运行的)
  • 对服务器和会话的引用应在服务器上完成,即在块中
其他一些注意事项:

  • 由于insertdata()不返回值,因此请使用Sub而不是Function
  • body和form标签是错误的
  • 事实上,您不需要表单标签
我猜提供的asp脚本是服务器对一个表单的响应,而您没有向我们展示这个表单?这不是很清楚,但也许你应该读一读W3学校的书

您的
函数insertdata()
不正确。您正在混合客户端和服务器概念。例如,
Session.Contents
必须在服务器端求值,并且必须在块内,而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

i、 e.如果用户在其浏览器中查看页面源,他将永远不会在源中看到,而是看到替换的值。因此,当他点击链接时,它会做正确的事情。

我尝试了函数insertdata(),但它也是一样的;在页面加载时工作。我只希望脚本在用户单击链接时工作。这个问题有什么解决办法吗?实际上,我可以运行脚本;关键是每次加载页面时都会运行脚本,但我希望脚本仅在单击超链接时运行;现在它不用点击超链接就可以运行了。
Sub insertdata
    ...
    strSQL = "INSERT INTO Authen_User VALUES ("
    strSQL = strSQL & "'userKey12345678'"
    strSQL = strSQL & ",'John Smith'"
    strSQL = strSQL & ",'Mr')"
    ...
End Sub