webForumDet fria alternativet

Ip spärr script?

ASP

13 svar · 286 visningar · startad av tomas21

Medlem sedan feb. 2003130 inlägg
Frågan#1

Hejsan!
Jag håller på en gästbok som kommer att innehålla ett ip ban script. Jag har nästan fått det att funka jag har för nuvarande koden nedan:

<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("../secret/secret.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")

SQLsats = "SELECT * FROM BannedIpnr ORDER by Ipnr desc"
RecSet.Open SQLsats, Connect, adOpenStatic, adLockOptimistic

Do Until RecSet.EOF
If RecSet("Ipnr") = Request.Servervariables("REMOTE_ADDR") Then
Response.Write"Du är spärrad"
Else
Response.Write"Du är inte spärrad"
End If
RecSet.MoveNext
Loop
%>

Scriptet kollar i databasen om besökarens ip nummer finns där. Om den inte finns kommer den att skriva ut "Du är inte spärrad" om den finns där kommer den att skriva ut "Du är spärrad". Problemet nu är att om jag lägger in 2 ip nummer i databasen som inte är min kommer den att skriva ut "Du är inte spärrad" 2 gånger. Samma sak gäller om jag är spärrad. Det jag undrar över är om det att göra så att den avbryter Do Until loopen så fort den har hittat IP nummret om den finns i databasen och skriver ut "Du är spärrad" bara en gång. Samt om den loopar igenom hela databasen och inte hittar IP nummret då ska den skriva ut "Du är inte spärrad" endast en gång även om databasen innehåller flera andra IP nummer.

Medlem sedan jan. 20032 285 inlägg
#2
Do Until RecSet.EOF
  strIp = strIp & RecSet("Ipnr")
  RecSet.MoveNext
Loop

If InStr(strIp,Request.Server.Variables("REMOTE_ADDR")) > 0 Then
  Response.Write("Du är spärrad")
Else
  Response.Write("Du är inte spärrad")
End If

/red Write ska det va, inte Wrute! Fy på mig! :r

Medlem sedan feb. 2003130 inlägg
#3

Ska testa det.

Medlem sedan feb. 2003130 inlägg
#4

Tackar tror det fungerar ska testa det lite mera :)

Medlem sedan feb. 2003130 inlägg
#5

Två frågor bara vad betyder strIp och inStr

Medlem sedan jan. 20032 285 inlägg
#6

/red Den redigerar vi bort :)

Medlem sedan jan. 20032 285 inlägg
#7

tomas21 skrev:

Två frågor bara vad betyder strIp och inStr

strIp är en variabel och InStr är en funktion som kollar om en viss textsnutt finns i en text typ :)

Medlem sedan feb. 2003130 inlägg
#8

Men vad händer här

InStr(strIp,Request.Servervariables("REMOTE_ADDR")) > 0
Medlem sedan jan. 20032 285 inlägg
#9

InStr letar igenom variabeln strIp, som innehåller alla IP-adresser i databasen, och om positionen den hittade besökarens IP-adress är större än 0 (om texten man letar efter inte finns är positionen 0) så ska den skriva ut att man är blockad. Lär mer här.

Medlem sedan feb. 2003130 inlägg
#10

Tack så mycket nu förstår jag mycket mer. Jag har nu lärt mig hur man lägger in alla poster ur en databas i en variabel :) :)

Medlem sedan jan. 20032 285 inlägg
#11

Man lär sig något varje dag :)

Medlem sedan mars 20015 287 inlägg
#12

Borde väl egentligen vara bättre att kolla direkt i sql-frågan?

<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("../secret/secret.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open "SELECT * FROM BannedIpnr WHERE Ipnr = '" & Request.Servervariables("REMOTE_ADDR") & "'", Connect 
if not RecSet.eof then passed = true else passed = false
RecSet.close
set RecSet = nothing
Connect.close
set Connect = nothing
If passed then
  Response.Write("Du är spärrad")
Else
  Response.Write("Du är inte spärrad")
End If
%>
Medlem sedan jan. 20032 285 inlägg
#13

solbulle skrev:

Borde väl egentligen vara bättre att kolla direkt i sql-frågan?

<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("../secret/secret.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open "SELECT * FROM BannedIpnr WHERE Ipnr = '" & Request.Servervariables("REMOTE_ADDR") & "'", Connect 
if not RecSet.eof then passed = true else passed = false
RecSet.close
set RecSet = nothing
Connect.close
set Connect = nothing
If passed then
  Response.Write("Du är spärrad")
Else
  Response.Write("Du är inte spärrad")
End If
%>

Nu ska vi inte va sånna §e ;)

Medlem sedan feb. 200112 078 inlägg
#14

Nu ska vi inte va sånna

Jodå, det är helt korrekt.

Att köra ut alla adresserna till en sträng verkar inte vara den bästa lösningen när man kan ställa en jämförelse mot databasen direkt istället. Strängfunktioner är inte kända för att vara snabba. ;)

257 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)