[ASP] Zoeken van voor in hele zin

Pagina: 1
Acties:

  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Ik ben bezig met een soort vraagbaak.

De database ziet er als volgt uit:
- Id
- Vraag
- Antwoord
- Keywords (hebben te maken met de vraag)

...en nog wat andere onbelangrijke velden.

Men kan een vraag (zin) invoeren in een inputveld. Vervolgens gaat een query met LIKE zoeken naar overeenkomsten in het veld "keywords" in de database.

Nu is het probleem dat hij met hele zinnen niets doet, zelfs als de zin een woord bevat welke in het veld "keywords" staat. Als ik alleen het betreffende woord invoer geeft hij wel resultaat.

Hier volg de code:

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<%
action = request.form("action")

strquestion = Request.Form("strquestion")

       validated_form = true
       If len(strquestion) < 3 then
        validated_form = false
       else
        validated_form = true
       end if

      if not validated_form then
%>
  <tr> 
    <td colspan="2">U heeft minder dan 2 karakters ingevoerd. Probeer het nogmaals...</td>
  </tr>
<%
      Else

if action = "1" then

        set rs = Server.CreateObject("ADODB.Recordset")
        strsql = "SELECT * FROM tbl_helpdesk WHERE Keywords
 LIKE '%" & fixQuotes(strquestion) & "%' "
        set rs = my_Conn.Execute(strsql)

if rs.eof then
%>
  <tr> 
    <td colspan="2">Er zijn geen resultaten gevonden. Pas eventueel uw vraag aan.</td>
  </tr>
<%
end if

do while not rs.eof
%>
  <tr> 
    <td colspan="2" bgcolor="#E8E8F2" height="21"><b>Mogelijke vraag:</b><i>
<%
       desc = rs("Question")
       If desc <> "" then
       %>
      <i></i>
       <%
        Dim strString, intLength
        intLength = 70
        strString = desc
        strString = Replace(strString, vbCrLf, "")
        If Len(strString) > intLength Then
          strString = Left(strString, intLength)
          aryString = Split(strString, " ")
          strString = ""
          For a = 0 to UBound(aryString)-1
            strString = strString & " " & aryString(a)
          Next
          strString = Trim(strString)
          strString = strString & "..."
        End If
        TrimString = strString
        Response.write strString
        End If
       %>
   </i>
  <br>&nbsp;&nbsp;&nbsp;[img]"images/sub.gif"[/img]&nbsp;
<a href="helpdesk.asp?Id=<%=rs("Id")%>">Bekijk antwoord</a>
 </td>
</tr>
<%
rs.movenext
loop
end if
end if
%>


Is er een manier om het wel te laten werken met hele zinnen. Ik dacht zelf dat het misschien met regexp wel zou moeten werken. Dat ik dus alle veelvoorkomende woorden zoals: de het een wie wat waar etc. eruit ga filteren.
Zoals jullie zien wordt "strquestion" gecontroleerd met de function "fixQuotes" om o.a. Injection Attacks te voorkomen.

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%
function fixQuotes(strWords)
 dim badChars
 dim newChars

 badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_", "|", "#", "de", "het",
 "een", "wie", "wat", "waar", "welke", "waarom", "wanneer", "hoe", "zijn")
 newChars = strWords

 for i = 0 to uBound(badChars)
 newChars = replace(newChars, badChars(i), "")
 next

 newChars = replace(strWords, "'", "''" )

 fixQuotes = newChars
end function
%>


Ik heb daar dus woorden bijgezet zodat deze niet meegenomen worden tijdens het zoeken. Dit werkt helaas niet.

Iemand enig idee?

/edit kan een modje de titel even fatsoeneren. Ik heb geen idee hoe ik dat erin heb kunnen krijgen..

[ Voor 76% gewijzigd door Manual op 09-04-2004 16:15 ]

Specs


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 26-05 17:50

gorgi_19

Kruimeltjes zijn weer op :9

he badchars zullen sowieso trouwens de mist in gaan...
Wie heeft gorgi een appel gegeven

wordt
 heeft gorgi  appel gegeven

Let op de spaties... ;)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • SYPHAX
  • Registratie: December 2000
  • Laatst online: 08-04 19:17
Uit je code kan ik opmaken dat je MSSQL als database server gebruikt. Je zou kunnen proberen, als je tenminste toegang hebt tot de databaseserver, om eens met English Query (onderdeel van MSSQL) aan de slag te gaan.

Hiermee is het volgens mij wel mogelijk om vragen te stellen. Weet alleen niet of Nederlands ook ondersteund wordt.

Volgens mij gaat het met een LIKE nooit werken, correct me if i'm wrong.

  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
gorgi_19 schreef op 09 april 2004 @ 16:27:
he badchars zullen sowieso trouwens de mist in gaan...
Wie heeft gorgi een appel gegeven

wordt
 heeft gorgi  appel gegeven

Let op de spaties... ;)
Oh, ik heb de spaties eruit gehaald

Ik neem aan dat je bedoelt dat dit: "welke", "waarom", "wanneer"
dan dit moet worden: "welke","waarom","wanneer"
SYPHAX schreef op 09 april 2004 @ 16:28:
Uit je code kan ik opmaken dat je MSSQL als database server gebruikt. Je zou kunnen proberen, als je tenminste toegang hebt tot de databaseserver, om eens met English Query (onderdeel van MSSQL) aan de slag te gaan.

Hiermee is het volgens mij wel mogelijk om vragen te stellen. Weet alleen niet of Nederlands ook ondersteund wordt.

Volgens mij gaat het met een LIKE nooit werken, correct me if i'm wrong.
Ik werk met een access database.

[ Voor 17% gewijzigd door Manual op 09-04-2004 16:35 ]

Specs


  • WvdWest
  • Registratie: Augustus 2002
  • Niet online
Queued schreef op 09 april 2004 @ 16:34:
[...]


Oh, ik heb de spaties eruit gehaald

Ik neem aan dat je bedoelt dat dit: "welke", "waarom", "wanneer"
dan dit moet worden: "welke","waarom","wanneer"
Ik denk dat gorgi_19 doelt op de spaties die blijven staan als je woorden verwijderd. "wie is dit" wordt " is dit". De spaties achter de woorden die je verwijdert blijven dus staan. De woorden zouden dan ook met spatie moeten worden vervangen bijv "wie ". Hiermee voorkom je ook dat bijv waarheid omgevormd wordt tot heid.

[ Voor 41% gewijzigd door WvdWest op 09-04-2004 16:46 ]

I'm not a complete idiot - several parts are missing.


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
WvdWest schreef op 09 april 2004 @ 16:43:
[...]
Ik denk dat gorgi_19 doelt op de spaties die blijven staan als je woorden verwijderd. "wie is dit" wordt " is dit"
Daar ziet degene die de vraag invoerd toch niets van. Het gaat erom dat alleen (zoveel mogelijk) de woorden overblijven die in het veld "Keywords" staan in de database. Op dat moment kan de query aan de slag om te kijken of de overgebleven woorden voorkomen in "Keywords" en dus een zoekresultaat weergeven.

[ Voor 9% gewijzigd door Manual op 09-04-2004 16:48 ]

Specs


  • WvdWest
  • Registratie: Augustus 2002
  • Niet online
Queued schreef op 09 april 2004 @ 16:47:
[...]


Daar ziet degene die de vraag invoerd toch niets van. Het gaat erom dat alleen (zoveel mogelijk) de woorden overblijven die in het veld "Keywords" staan in de database. Op dat moment kan de query aan de slag om te kijken of de overgebleven woorden voorkomen in "Keywords" en dus een zoekresultaat weergeven.
Zie mijn aanvulling. "wattenstaafje" wordt "tenstaafje", "waarheid" wordt "heid", "eenheid" wordt "heid", "water" wordt "er" etc. 8)7

[ Voor 12% gewijzigd door WvdWest op 09-04-2004 16:51 ]

I'm not a complete idiot - several parts are missing.


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
WvdWest schreef op 09 april 2004 @ 16:50:
[...]
Zie mijn aanvulling. "wattenstaafje" wordt "tenstaafje", "waarheid" wordt "heid", "eenheid" wordt "heid", "water" wordt "er" etc. 8)7
Okay.

Dus het moet dit worden: " welke "," waarom "," wanneer "
ipv dit: "welke","waarom","wanneer" ?

Specs


  • WvdWest
  • Registratie: Augustus 2002
  • Niet online
Queued schreef op 09 april 2004 @ 17:00:
[...]


Okay.

Dus het moet dit worden: " welke "," waarom "," wanneer "
ipv dit: "welke","waarom","wanneer" ?
Nee want dan wordt de zin "wat is een koe?" "wat iskoe". Je moet alleen de spatie na het woord meenemen. Het zou dus moeten zijn "welke ","waarom ","wanneer "

I'm not a complete idiot - several parts are missing.

Pagina: 1