вызов VBScript Sub в href onclick (классический ASP) - PullRequest
1 голос
/ 03 февраля 2012

Я пытаюсь написать в классическом 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 Ответ

2 голосов
/ 03 февраля 2012

Поскольку это ASP, вы должны разделить то, что вы хотите запустить на сервере, и то, что вы хотите запустить на клиенте. Это не ясно в вашем примере. Гипотетически я бы предположил, что ваша база данных находится за брандмауэром и доступна только для сервера.

  • Все, что нужно запустить на сервере, должно быть в <% ...%> блоках
  • т.е. Ваша подпрограмма insertdata (), вероятно, принадлежит серверу (в настоящее время она запускается с клиента)
  • Ссылка на сервер и сеанс должна выполняться на сервере, то есть в блоках <% ...%>

Некоторые другие заметки:

  • Поскольку insertdata () не возвращает значение, используйте Sub вместо Function
  • теги body и form расположены неправильно
  • на самом деле вам не нужен тег формы

Я собираюсь догадаться, что поставляемый скрипт asp является ответом сервера на форму, которую вы нам не показали? Это не очень понятно, но, возможно, вам стоит прочитать ASP Form Collection от w3Schools.

Ваш Function 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

Когда ASP увидит ваш <% ...%>, он заменит их на сервере правильными значениями, так что к тому времени, когда клиент увидит его, при появлении веб-страницы на клиенте появятся замещающие значения:

Sub insertdata
    ...
    strSQL = "INSERT INTO Authen_User VALUES ("
    strSQL = strSQL & "'userKey12345678'"
    strSQL = strSQL & ",'John Smith'"
    strSQL = strSQL & ",'Mr')"
    ...
End Sub

т.е. если пользователь делает Просмотр страницы источника в своем браузере, он никогда не увидит <% ...%> в источнике, кроме замененных значений. Поэтому, когда он нажимает на ссылку, он поступает правильно.

...