Kom ihåg mig?
Home Menu

Menu


ASP, jämföra variabel med lista i textfil

Ämnesverktyg Visningsalternativ
Oläst 2009-05-10, 01:48 #1
kw_wasabis avatar
kw_wasabi kw_wasabi är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2008
Inlägg: 2 134
kw_wasabi kw_wasabi är inte uppkopplad
Klarade millennium-buggen
kw_wasabis avatar
 
Reg.datum: Feb 2008
Inlägg: 2 134
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?
kw_wasabi är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-05-10, 08:08 #2
Yoghurt Yoghurt är inte uppkopplad
Medlem
 
Reg.datum: Jan 2003
Inlägg: 193
Yoghurt Yoghurt är inte uppkopplad
Medlem
 
Reg.datum: Jan 2003
Inlägg: 193
Kan du inte lagra de urler du vill filtrera bort i en databas?

Det känns som den bästa lösningen.
Yoghurt är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-05-10, 08:48 #3
Knalli Knalli är inte uppkopplad
Medlem
 
Reg.datum: Jul 2007
Inlägg: 189
Knalli Knalli är inte uppkopplad
Medlem
 
Reg.datum: Jul 2007
Inlägg: 189
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
Knalli är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-05-10, 10:48 #4
Jan Eriksson Jan Eriksson är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: May 2004
Inlägg: 1 352
Jan Eriksson Jan Eriksson är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: May 2004
Inlägg: 1 352
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.
Jan Eriksson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-05-10, 21:35 #5
kw_wasabis avatar
kw_wasabi kw_wasabi är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2008
Inlägg: 2 134
kw_wasabi kw_wasabi är inte uppkopplad
Klarade millennium-buggen
kw_wasabis avatar
 
Reg.datum: Feb 2008
Inlägg: 2 134
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
kw_wasabi är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-05-10, 22:32 #6
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
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.
jonny är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-05-10, 23:49 #7
kw_wasabis avatar
kw_wasabi kw_wasabi är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2008
Inlägg: 2 134
kw_wasabi kw_wasabi är inte uppkopplad
Klarade millennium-buggen
kw_wasabis avatar
 
Reg.datum: Feb 2008
Inlägg: 2 134
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 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-05-12, 00:05 #8
kw_wasabis avatar
kw_wasabi kw_wasabi är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2008
Inlägg: 2 134
kw_wasabi kw_wasabi är inte uppkopplad
Klarade millennium-buggen
kw_wasabis avatar
 
Reg.datum: Feb 2008
Inlägg: 2 134
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 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-05-12, 15:25 #9
kw_wasabis avatar
kw_wasabi kw_wasabi är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2008
Inlägg: 2 134
kw_wasabi kw_wasabi är inte uppkopplad
Klarade millennium-buggen
kw_wasabis avatar
 
Reg.datum: Feb 2008
Inlägg: 2 134
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%>
kw_wasabi är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 08:40.

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