在href onclick中调用VBScript Sub(经典ASP)

时间:2012-02-03 05:01:34

标签: html asp-classic vbscript

我正在尝试用经典的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>

1 个答案:

答案 0 :(得分:2)

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

  • 需要在服务器上运行的任何内容都应该在&lt;%...%&gt;中块
  • 即。你的insertdata()例程可能属于服务器(目前它是从客户端运行的)
  • 应在服务器上进行服务器和会话的引用,即&lt;%...%&gt;块

其他一些说明:

  • 由于insertdata()不返回值,因此请使用Sub而不是Function
  • 身体和表格标签是错误的方式
  • 实际上你不需要表格标签

我猜猜提供的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;在源中但替换值。因此,当他点击链接时,它会做正确的事情。