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:
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.
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..
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> [img]"images/sub.gif"[/img] <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 ]