0

我有一个简单的表单,我使用 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("searchbox") 从文本框中获取正确的值,但如果在更改文本框后再次单击按钮,request.form("searchbox") 将包含旧值。如何从文本框中获取当前值?

4

1 回答 1

1

呸,从哪里开始……

  • 第一的; 从这篇文章中删除您的数据库名称,因为我可以找到并下载它。
  • 第二; 转义您的搜索词,以防止 SQL 注入

问题是你使用onsubmit="return searchTree(this);". 这意味着如果函数返回 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> 
于 2013-03-07T15:35:37.320 回答