2013-10-09 3 views
0

Я делаю очень простой поисковый запрос в классическом asp, который ищет слова в базе данных, которые «похожи» на поисковый запрос пользователей.Почему этот простой классический поисковый запрос ASP не работает?

На моей веб-странице указывается, что при поиске «теста» нет результатов. Однако у меня есть конкретный почтовый поиск, который я могу увидеть в моей базе данных.

Я не уверен, почему это не работает.

<% option explicit %> 

<!DOCTYPE HTML> 
<html> 
<head> 
    <link href="normalize.css" rel="stylesheet" type="text/css"> 
</head> 
<body> 
<!--#include file="header.asp"--> 
<!--#include file="dbconn.asp"--> 
<% 
    dim stage, s, sql, info 
    stage = request.querystring("stage") 
    if stage = "" then stage=1 



    '------------------------------------------------------------------ 
    if stage = 1 then 
    '------------------------------------------------------------------ 

    response.write "<form action=""search.asp"" method=""get"">" &_ 
        "<input type=""hidden"" name=""stage"" value=""2"">"&_ 
        "<input type=""text"" id=""search"" name=""search"">" &_ 
        "<input type=""submit"" value=""Search"">" &_ 
        "</form>" 


    '------------------------------------------------------------------ 
    elseif stage = 2 then 
    '------------------------------------------------------------------ 

    '--- grab the data from the form 
    dim search 
    search = Request.QueryString("search") 



    '--- execute the query 
    '    0  1   2 
    SQL = " select ID, projectName, Description from projectstable"&_ 
      " where (projectName like ' %search% ' or description like ' %search% ')" 

    set info=conn.execute(sql) 

    if info.eof then 
     response.write " <div class=""box2"">"&chr(13) 
     response.write "  Sorry, no records matching your query"&chr(13) 
     response.write " </div>"&chr(13) 
    else 
     response.write "<div class=""list"">" &_ 
        "<table>" &_ 
        "<tr>" &_ 
        "<th>Title</th><th>Post</th>" &_ 
        "</tr>" 
     do 
     response.write "<tr>" &_ 
         "<td>"&info(1)&"</td><td>"&info(2)&"</td>"&_ 
         "</tr>" 
     info.movenext 
     loop until info.eof 
     response.write "</table></div>" 
    end if 

    '------------------------------------------------------------------ 
    end if ' stage 
    '------------------------------------------------------------------ 

    response.write "<br clear=""left""><br>" 
    if stage=2 then 
    response.write "<i>that's all folks!</i><br><br>"&_ 
        "<a href=""search.asp"">Search again</a> | " 

    end if 
    response.write "<a href=""./"">back to main page</a>" 
    conn.close 
%> 
</div> 
</body> 
</html> 

ответ

2

необходимо изменить Ваш запрос вложить поисковую переменную в строку SQL (против поиска по фразе «поиск»):

SQL = " select ID, projectName, Description from projectstable"&_ 
     " where (projectName like '%" & search & "%' or description like '%" & search & "%')" 

С учетом сказанного, это уязвимо для SQL инъекций , Будьте осторожны с таким подходом. Вместо этого рассмотрите возможность использования параметризованных запросов.

+0

Спасибо! Меня учили, что раньше так и нужно было это запомнить. Спасибо за подсказку на SQL-инъекции. Это только для внутреннего университетского задания, поэтому должно быть хорошо, но я буду изучать его. – chap

Смежные вопросы