webForumDet fria alternativet

Ip spärr script?

13 svar · 284 visningar · startad av tomas21

tomas21Medlem sedan feb. 2003130 inlägg
#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.

SebbeMedlem 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

tomas21Medlem sedan feb. 2003130 inlägg
#3

Ska testa det.

tomas21Medlem sedan feb. 2003130 inlägg
#4

Tackar tror det fungerar ska testa det lite mera :)

tomas21Medlem sedan feb. 2003130 inlägg
#5

Två frågor bara vad betyder strIp och inStr

SebbeMedlem sedan jan. 20032 285 inlägg
#6

/red Den redigerar vi bort :)

SebbeMedlem 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 :)

tomas21Medlem sedan feb. 2003130 inlägg
#8

Men vad händer här

InStr(strIp,Request.Servervariables("REMOTE_ADDR")) > 0
SebbeMedlem 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.

tomas21Medlem 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 :) :)

SebbeMedlem sedan jan. 20032 285 inlägg
#11

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

solbulleMedlem 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
%>
SebbeMedlem 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 ;)

OveRRidEMedlem 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. ;)

137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)