2012-02-03 96 views
1

ユーザーがリンクをクリックしたときにデータベースにデータを追加するために古典的なaspで書き込もうとしています。しかし、私は問題をvbscriptプロシージャを呼び出すことがあります。私は<%Sub/End %>と使用しようとしました。onclick私は - onclick="<%insertdata()%>"を使用しました。これはページの読み込み時に実行されますが、ユーザーがクリックしたときにのみ実行します。だから、私は以下のように変更しましたが、うまくいきません!それはあなたがサーバーとどのようなあなたは、クライアント上で実行する上で実行したいものを分離する必要がASPですのでhref onclick(classic ASP)のVBScript Subを呼び出す

<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

実際には、スクリプトを実行できます。ポイントは、ページがロードされるたびにスクリプトが実行されることですが、ハイパーリンクがクリックされたときにのみスクリプトが実行されるようにします。ハイパーリンクをクリックすることなく実行されます。 – nightFury

答えて

2

:ここに私のコードです。あなたの例ではこれは明確ではありません。仮に、私はあなたのデータベースがファイアウォールの背後にあり、サーバだけがアクセス可能であると仮定します。

  • あなたinsertdata()ルーチンは、おそらく、サーバー上で所属する、つまり、サーバー上で実行する必要のあるものは<% ...%>ブロック
  • にする必要があります(現在はそれがクライアントから実行しています)
    • :サーバーとのセッションへの
    • リファレンスは<% ...%>ブロック

    にサーバすなわち上で他のいくつかの注意事項を行わなければなりませんinsertdata以来

  • ()値を返しませんが、
  • 体とフォームタグを使用すると、formタグを必要としない、実際には間違った方法でラウンド
  • ある代わりに、関数のサブを使用

私は、あなたが私たちに示していないフォームへのサーバーの応答は、提供されたASPスクリプトを推測するつもりですか?それはあまり明確ではありませんが、おそらくw3SchoolsからASP Form Collectionの読書が必要です。

Function insertdata()が間違っています。クライアントとサーバーのコンセプトが混在しています。たとえば、Session.Contentsはサーバー側で評価し、<%...%>ブロック内にある必要がありますが、insertdata()関数自体はクライアント側に属します。これは、ユーザーイベントに反応する必要があることを示すためです。私は私が作っているポイントを説明するために、あなたのinsertdataの1行を作り直しました:

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はあなたの<% ...%を見るときによってそのよう>それが適切な値で、サーバー上でそれらを交換しますWebページがクライアントに到着したときに、クライアントはそれを見ている時間は、代替値が表示されます。ユーザーは自分のブラウザで表示ページのソースを行い

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

つまりあれば、彼は<%を見ることはありません。.. 。%>は置換元の値に置き換えられます。だから、彼がリンクをクリックすると、正しいことが起こります。

+0

私は関数insertdata()で試しましたが、それも同じです。ページの読み込み時に機能します。ユーザーがリンクをクリックしたときにスクリプトが動作するようにしたい。この問題の解決策はありますか? – nightFury

関連する問題