2013-03-07 51 views
0

我有一個簡單的表單,我使用Javascript在數據庫上執行搜索。經典ASP Request.form在使用javascript提交時沒有更新

<form id="searchForm" onsubmit="return searchTree(this);" method="post" class="form-poshytip"> 
<input type="text" name="searchbox" placeholder="zoek hier je product..." id="searchField" /> 
<input type="image" value="Zoeken" name="submit" src="../img/Zoeken.PNG" alt="submit" /> 
</form> 

在Javascript中,我使用經典ASP連接到Access。

<script language="JavaScript"> 
function searchTree(form) { 
<% Dim rsTreeview2 %> 
<% Set adoCon = Server.CreateObject("ADODB.Connection") %> 
<% adoCon.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("...") %> 
<% Set rsTreeview2 = Server.CreateObject("ADODB.Recordset") %> 
<% strSQL = "SELECT tblTreeview_nl.volgnr, tblTreeview_nl.lid_van, tblTreeview_nl.omschrijving, tblTreeview_nl.doctype, tblTreeview_nl.docnaam FROM tblTreeview_nl WHERE tblTreeview_nl.omschrijving LIKE '%" & request.form("searchbox") & "%'"%> 
<% rsTreeview2.Open strSQL, adoCon %> 
... 
<% rsTreeview2.Close %> 
<% Set rsTreeview2 = Nothing %> 
<% Set adoCon = Nothing %> 
return false; 
}; 
</script> 

我第一次點擊按鈕,我使用的Request.Form(「搜索框」)得到的文本框中正確的值,但如果我再次點擊改變文本框後的request.form按鈕(「搜索框「)包含舊值。我如何從文本框中獲取當前值?

回答

1

唷,從哪裏開始?

  • 第一;從這篇文章中刪除您的數據庫名稱,因爲我可以找到 它並下載它。
  • 秒;越過您的搜索字詞,以防止SQL注入

問題是您使用​​。這意味着如果函數返回FALSE,則表單不會被提交。 在您的腳本中,我看到函數總是返回false,所以表單不會真正提交。

我不知道爲什麼你已經把所有的ASP/VBScript代碼放在你的JavaScript標籤中,但我認爲你直接輸出一些JavaScript代碼到你的腳本標籤來創建樹視圖。這很好,但出於測試的目的,我會先將它輸出到屏幕上,而不是內部腳本標籤,然後從中進行工作。

我已經重新格式化了您的代碼來做到這一點。這裏還有一個快速修復SQL注入問題的方法。

希望這有助於

埃裏克

<% 

function hasValue(value) 
    hasValue = NOT(isNull(value) OR value="") 
end function 

function escape(inputValue) 
    if hasValue(inputValue) then 
     escape = Replace(inputValue, "'", "''") 
    end if 
end function 

function recordsetToString(rs) 
    Dim objField 
    recordsetToString = "" 
    recordsetToString = recordsetToString & "<table class=""dbgtable"">" 
    recordsetToString = recordsetToString & "<tr>" & vbNewLine 
    For Each objField in rs.Fields 
    recordsetToString = recordsetToString & "<th>" & objField.Name & "</th>" & vbNewLine 
    Next 
    recordsetToString = recordsetToString & "</tr>" & vbNewLine 
    if NOT rs.EOF then 
     Do While Not rs.EOF 
      recordsetToString = recordsetToString & "<tr>" & vbNewLine 
      For Each objField in rs.Fields 
       recordsetToString = recordsetToString & "<td>" 
       if isNull(objField.Value) then 
        recordsetToString = recordsetToString & "<i>NULL</i>" 
       else 
        if vartype(objField.Value)>20 then 
         recordsetToString = recordsetToString & typename(objField.Value) 
        else 
         recordsetToString = recordsetToString & objField.Value 
        end if 
       end if 
       recordsetToString = recordsetToString & "</td>" & vbNewLine 
      Next 
      recordsetToString = recordsetToString & "</tr>" & vbNewLine 
     rs.MoveNext 
     Loop 
     if rs.CursorType>0 then 
      rs.movefirst 
     end if 
    end if 
    recordsetToString = recordsetToString & "</table>" & vbNewLine 
end function 

if hasValue(request.form("searchbox")) Then 
Dim adoCon 
Set adoCon = Server.CreateObject("ADODB.Connection") 
    adoCon.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("[PATH_TO_DATBASE]") 
    Dim rsTreeview2 
    Set rsTreeview2 = Server.CreateObject("ADODB.Recordset") 
     strSQL = "SELECT tblTreeview_nl.volgnr, tblTreeview_nl.lid_van, tblTreeview_nl.omschrijving, tblTreeview_nl.doctype, tblTreeview_nl.docnaam FROM tblTreeview_nl WHERE tblTreeview_nl.omschrijving LIKE '%" & escape(request.form("searchbox")) & "%'" 
     rsTreeview2.Open strSQL, adoCon 
      recordsetToString(rsTreeview2) 
     rsTreeview2.Close 
    Set rsTreeview2 = Nothing 
Set adoCon = Nothing 
end if 
%> 


<script language="JavaScript"> 
function searchTree(form) { 
    return false; 
}; 
</script> 
+0

上面的代碼應該工作,只是不從您的javascript函數返回false。返回True以使表單提交。 – 2013-03-08 09:40:19

+0

感謝您的回覆,我已經實現了轉義功能。 但是,我不清楚你的解決方案將如何總是從文本框中獲取當前值。何時會執行代碼「if hasValue(request.form(」searchbox「))」?我們不必把它放在searchTree函數中嗎? – 2013-03-08 09:40:29

+0

問題是,返回true後,頁面將被重新加載,並且我剛寫入的treeview將會消失。我怎樣才能防止呢? – 2013-03-08 09:42:17