WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   ASP, jämföra variabel med lista i textfil (https://www.wn.se/forum/showthread.php?t=36732)

kw_wasabi 2009-05-10 01:48

Jag har gjort ett referrer-script i ASP och har en ganska jobbig lösning för att filtrera bort URL:er som jag inte vill ska länkas på sajten. I dagsläget ser den ut så här:

Kod:

url = TILLFIXAD Request.ServerVariables("HTTP_REFERER")

If url <> "www.sajt1.se" AND url <> "www.sajt2.se" AND url <> "www.sajt3.se" AND url <> "www.sajt4.se" AND _
url <> "www.sajt5.se" AND url <> "www.sajt6.se" AND url <> "www.sajt7.se" AND url <> "www.sajt8.se" Then

MATA IN I DATABASEN

Nu är det så att jag vill ha alla dessa bortfiltrerade URL:er i en lista istället, t.ex en .txt-fil, så att det kan se ut såhär ungefär:

Kod:

If url <> iLista Then

MATA IN I DATABASEN

Som det är nu så har jag ungefär 70 URL:er bortsorterade på detta otympliga sätt. Förutom att det blir onödigt mycket kod så är det också krångligt att lägga till nya URL:er i "listan".

Är det någon som har en smidig lösning på hur man kan "loopa" igenom en lista för att jämföra varje besök från en annan sajt?

Yoghurt 2009-05-10 08:08

Kan du inte lagra de urler du vill filtrera bort i en databas?

Det känns som den bästa lösningen.

Knalli 2009-05-10 08:48

Känns nästan som att en array vore som den lättaste lösningen. Sen skulle jag nog kört med en InStr istället för att kolla exakt.

Typ såhär.
strFilter = "www.sida1.se,www.sida2.se,www.sida3.se"
arrFilter = Split(strFilter,",")
For i = 0 To UBound(arrFilter)
If InStr(1, url, arrFilter(i)) > 0 Then
Mata in i databasen
End If
Next

Eller kanske Utan loop, borde också funka.
strFilter = "www.sida1.se,www.sida2.se,www.sida3.se"
If InStr(1, strFilter, url) > 0 Then

End If

Jan Eriksson 2009-05-10 10:48

Som tidigare nämns, databas vore det lämpligaste. Annars kan du använda Knallis förslag men istället för att fylla strängen strFilter direkt i koden så kan du lagra alla domäner i en textfil som du sen läser in och lagrar i strFilter. Då behöver du bara ändra i textfilen när du vill lägga till eller tabort en domän.

kw_wasabi 2009-05-10 21:35

Tack för era tips, jag lyckades lösa problemet såhär:

ReadTextFile.asp
Kod:

<%
Function ReadTextFile(strFilePath)
        Dim objFSO, objFile, strAllFile
        Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
        Set objFile = objFSO.OpenTextFile(strFilePath)
        strAllFile = ""
        If Not(objFile.AtEndOfStream) Then
 *strAllFile = objFile.ReadAll
        End If
        objFile.Close
        Set objFile = Nothing
        Set objFSO = Nothing
       
        strAllFile = Replace(strAllFile, Chr(13)&Chr(10), Chr(13))
        strAllFile = Replace(strAllFile, Chr(10)&Chr(13), Chr(13))
        ReadTextFile = Split(strAllFile, Chr(13))
End Function
%>

Referrercheck.asp
Kod:

<%referer = Request.ServerVariables("HTTP_REFERER")
If referer <> "" Then
Dim WordArray
WordArray = Split(referer, "/")
url = WordArray(2)

check_visitor = Request.Cookies("visitor")

If check_visitor <> "counted_for" Then
       
        <!--#include file="ReadTextFile.asp"-->
 *Const FILE_NAME="referrer-blocked.txt"
 *strFilter = ReadTextFile(Server.MapPath(FILE_NAME))

        For i = 0 To UBound(strFilter)
        If not InStr(1, url, strFilter(i)) > 0 Then

        Set Conn = Server.CreateObject("ADODB.Connection")
        Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &Server.MapPath("databas\ref_db.mdb")
        Set RecSet = Server.CreateObject("ADODB.RecordSet")
        'Response.Write (url)
        SQL = "SELECT * FROM referer WHERE url like '%"&url&"%'"
        RecSet.Open SQL, Conn
        'uppdatbesok = RecSet("antal") + 1
 *
 *If RecSet.EOF Then
 *        Response.Cookies("visitor") = "counted_for"
 *        Response.Cookies("visitor").Expires = Date() + 1
 *        adress        = url
 *        besok * = 1
 *        SQL = "Insert Into referer (url,antal) Values('" & adress & "','" & besok & "')"
 *        Conn.Execute(SQL)
 *Else
 *        Response.Cookies("visitor") = "counted_for"
 *        Response.Cookies("visitor").Expires = Date() + 1
 *        datum *= date()
 *        tid *= Time()
 *        besok = RecSet("antal") + 1
 *        Conn.execute("Update referer Set antal='" & besok & "' *WHERE url='" & url & "'")
 *End If
 *Else
        End If
        Next

Else
End If
Else
End If%>

referrer-blocked.txt

jonny 2009-05-10 22:32

Varför använder du inte databasen till allt jobb och lägger till en IN eller snarare en NOT IN sats bara?

Ett litet tips är också att indentera koden.

kw_wasabi 2009-05-10 23:49

Citat:

Originally posted by jonny@May 10 2009, 22:32
Varför använder du inte databasen till allt jobb och lägger till en IN eller snarare en NOT IN sats bara?

Ett litet tips är också att indentera koden.

Visst skulle jag kunna använda databasen, men jag tycker det är smidigare att uppdatera en textfil än att koda en form av admin där jag matat in URL:er som ska filtreras bort. Det är möjligt att en databas skulle göra koden snabbare än att läsa från textfil, vet inte..

Koden är indenterad, det är WN som tar bort alla intabbningar. Ser dock att några blanksteg finns kvar här och där.

kw_wasabi 2009-05-12 00:05

Citat:

Originally posted by jonny@May 10 2009, 22:32
Varför använder du inte databasen till allt jobb och lägger till en IN eller snarare en NOT IN sats bara?

Ett litet tips är också att indentera koden.

Upptäckte att min lösning med textfil inte alls fungerade. Därför valde jag din lösning med databas som verkar fungera finfint, och enkelt var det. Jag lägger upp lösningen i tråden senare, när jag sökert vet att den funkar.

kw_wasabi 2009-05-12 15:25

Så här löste jag det med databas istället. Synpunkter och förbättringsförslag av koden välkomnas.

Kod:

<%referer = Request.ServerVariables("HTTP_REFERER")
If referer <> "" Then
Dim WordArray
WordArray = Split(referer, "/")
url = WordArray(2)

check_visitor = Request.Cookies("visitor")

If check_visitor <> "counted_for" Then

        Set Conn = Server.CreateObject("ADODB.Connection")
        Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &Server.MapPath("databasen\databasen.mdb")
        Set RecSet = Server.CreateObject("ADODB.RecordSet")
 
 SQL = "SELECT * FROM refererfilter WHERE url like '%"&url&"%'"
 RecSet.Open SQL, Conn
       
        If RecSet.EOF Then
       
 Set Conn = Server.CreateObject("ADODB.Connection")
 Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &Server.MapPath("databasen\ref_databasen.mdb")
 Set RecSet = Server.CreateObject("ADODB.RecordSet")
 SQL = "SELECT * FROM referer WHERE url like '%"&url&"%'"
 RecSet.Open SQL, Conn
       
        If RecSet.EOF Then
  Response.Cookies("visitor") = "counted_for"
  Response.Cookies("visitor").Expires = Date() + 1
  adress        = url
  besok  = 1
  SQL = "Insert Into referer (url,antal) Values('" & adress & "','" & besok & "')"
  Conn.Execute(SQL)
        Else
  Response.Cookies("visitor") = "counted_for"
  Response.Cookies("visitor").Expires = Date() + 1
  besok = RecSet("antal") + 1
  Conn.execute("Update referer Set antal='" & besok & "' WHERE url='" & url & "'")
        End If
 RecSet.Close
 Conn.Close
 Set RecSet = Nothing
 Set Conn = Nothing
 
        Else
        End If
       
        RecSet.Close
        Conn.Close
        Set RecSet = Nothing
        Set Conn = Nothing
 
Else
End If
Else
End If%>



Alla tider är GMT +2. Klockan är nu 12:45.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson