1

I am trying to get a autocomplete textbox using classic ASP and Jquery below is the code i currently have but nothing is populating in the search box.

Database Name = Test

Database User Login = sql

Password = Password

Table Name = Product

Columns are: ProductId, Name, ItemNumber

I am trying to allow the user to search by product name. Also do I have a risk of SQL injection with the following code? Thanks in advance!

search.asp:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2  /jquery.js" ></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js" ></script>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/base/jquery-ui.css"/>

<!-- SCRIPT FOR AUTOCOMPETE SEARCH BOX //-->
<script type="text/javascript" language="javascript">
<!--
    $(function() {
        $( "#productname" ).autocomplete({
        source: "source.asp",
        minLength: 2
    });
   });
// -->
</script>

</head>
<body>


<p>&nbsp;</p>

<div>
<input type="text" id="productname">
</div>

<p>&nbsp;</p>

</body>
</html>

and my source page is:

<%
Dim keywords
Dim keywords_cmd
Dim output 


Set keywords_cmd = Server.CreateObject ("ADODB.Command")
keywords_cmd.ActiveConnection = "Provider=SQLNCLI10;Server=LOCALHOST\SQL;  Database=test;Uid=sql; Pwd=Password;" 
keywords_cmd.CommandText = "SELECT ProductId, Name FROM product where Name like '%"  & Request.QueryString("term") & "%'"
keywords_cmd.Prepared = true

Set keywords = keywords_cmd.Execute

output = "["

While (NOT keywords.EOF)
output = output & "{""ProductId"":""" & keywords.Fields.item("ProductId") & """,""value"":""" & keywords.Fields.Item("Name") & """},"
 keywords.MoveNext()
While end

keywords.Close()
Set keywords = Nothing

output=Left(output,Len(output)-1)
output = output & "]"
response.write output

%>
2
  • <!-- We haven't needed to hide JavaScript like this since last century. Commented Aug 26, 2014 at 17:32
  • I am a newbie for sure I would appreciate any help you can give me! Commented Aug 26, 2014 at 17:38

2 Answers 2

1

First off, "yes". This code is open to SQL injection. This is because you're using the QueryString parameter directly into your SQL Query:

"SELECT ProductId, Name FROM product where Name like '%"  & Request.QueryString("term") & "%'"

What you should do is use parameters.

Also, I believe jQueryUI autocomplete needs a label property. And your script doesn't automatically return the content-type: application/json.

This is what I made of it:

Response.CodePage = 65001
Response.CharSet = "UTF-8"
Response.ContentType = "application/json"

Dim keywords, keywords_cmd, output, firstItem

Set keywords_cmd = Server.CreateObject ("ADODB.Command")
With keywords_cmd
    .CommandType = adCmdText
    .ActiveConnection = "Provider=SQLNCLI10;Server=LOCALHOST\SQL;  Database=test;Uid=sql; Pwd=Password;" 
    .CommandText = "SELECT ProductId, Name FROM product where Name like ?"
    .Parameters.Append .CreateParamter("@term", adVarchar, adParamInput, 200, "%" & Request.QueryString("term") & "%")
    Set keywords = .Execute
End With

output = "["
firstItem = True
While (NOT keywords.EOF)
    If Not firstItem Then output = output & ","
    output = output & _
                "{""ProductId"":""" & keywords.Fields.item("ProductId") & """," & _
                """value"":""" & keywords.Fields.Item("ProductId") & """," & _
                """label"":""" & keywords.Fields.Item("Name") & """}"
    keywords.MoveNext()
    firstItem = False
While end
output = output & "]"

keywords.Close()
Set keywords = Nothing
response.write output
Sign up to request clarification or add additional context in comments.

Comments

0

I had the same problem and fixed it by adding in the Response.ContentType row shown below.

... output = output & "]"

Response.ContentType = "application/json"

response.write output

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.