Avatar billede andrew Nybegynder
09. oktober 2008 - 15:02 Der er 18 kommentarer og
2 løsninger

Funktion som preg_match i mysql-forespørgsel?

Hej.

Jeg er ved at lave en gæstebog og skal dertil lave en ip-ban.

Jeg har lavet en ip-ban ved hjælp af preg_match, men kan jeg lave en direkte i en sql-forespørgsel, så jeg banner ip'er der indeholder nogle af min kriterier?

Eksempel:

$remote_ip = $_SERVER['REMOTE_ADDR'];
$query = mysql_query("SELECT ip FROM ipban WHERE '$remote_ip' LIKE ip");

Jeg ønsker at kunne banne alle ip'er der kan opfylde disse som står i Databasen:
* 80.164.38.*
* *.164.38.47


Håber I kan hjælpe :)
Avatar billede andrew Nybegynder
09. oktober 2008 - 15:03 #1
Hov, det sidste kunne misforståes.

I databasen står der:

80.164.38.*
*.164.38.47

:)
Avatar billede majbom Novice
09. oktober 2008 - 15:06 #2
hvorfor vil du kunne banne alle adresser der har de sidste 3 oktetter til fælles, det giver da ingen mening...?
Avatar billede andrew Nybegynder
09. oktober 2008 - 15:09 #3
Nej, det var blot eksempel.

Altså, jeg øsnker at kunne banne folk hvis de har dynamisk ip, altså som første eksempel "80.164.38.*".
Avatar billede jakobdo Ekspert
09. oktober 2008 - 15:13 #4
Du bør kigge på mysql_funktionen: inet_aton()
Så kan du gemmer ip eller ip'er som et range.
Og det vil give bedre mening.
Avatar billede andrew Nybegynder
09. oktober 2008 - 15:17 #5
Okay. Det lyder som det er dét jeg leder efter. Har du mulighed for at smide et eksempel på en mysql forespørgsel ind?
Avatar billede jakobdo Ekspert
09. oktober 2008 - 15:33 #6
$query = mysql_query("SELECT ip FROM ipban WHERE $_SERVER['REMOTE_ADDR'] BETWEEN ipstart and ipend LIMIT 1");

Og så gemmer du ip'er som:

INSERT INTO ipban(ipstart,ipend) VALUES(INET_ATON('127.0.0.0'),INET_ATON('127.0.0.255'))

Hvis du f.eks. vil blokere: 127.0.0.*
Avatar billede andrew Nybegynder
09. oktober 2008 - 15:37 #7
Okay. Kan det ikke lade sig gøre, at den ser det ud fra en streng i databasen, som "80.164.38.*" i stedet for at man skal lave en til og fra?
Avatar billede jantzen88 Nybegynder
09. oktober 2008 - 15:50 #8
Du kan bruge LIKE mysql_query("SELECT ip FROM banlist WHERE ip LIKE 127.0.0.%");
eller mysql_query("SELECT ip FROM banlist WHERE ip LIKE %.0.0.1");

Det den gør er at den matcher alt det starter med 127.0.0. og så kan alt skrives efter.
det kunne f.eks. være 127.0.0.9999999, det er ikke den løsning jeg ville vælge at bruge men du kan lave det på den måde.
Avatar billede jakobdo Ekspert
09. oktober 2008 - 15:54 #9
Det kan jo godt laves med LIKE, men den bedste og pæneste løsning vil jeg mene er at bruge inet_aton()
Avatar billede andrew Nybegynder
09. oktober 2008 - 16:13 #10
Okay. Jeg skulle bruge % i stedet for *. Tak til jer begge to. Jeg vælger at starte med at bruge LIKE funktionen. Men det er ikke utænkeligt at løsningen med inet_aton er bedst i det lange løb.

Men tak til jer begge. Smid et svar!
Avatar billede jantzen88 Nybegynder
09. oktober 2008 - 16:45 #11
Var så lidt :)
Avatar billede jakobdo Ekspert
09. oktober 2008 - 17:37 #12
Svar!
Avatar billede andrew Nybegynder
10. oktober 2008 - 14:53 #13
jantzen88-> Et svar :)
Avatar billede jantzen88 Nybegynder
10. oktober 2008 - 15:40 #14
Svar!
Avatar billede majbom Novice
10. oktober 2008 - 19:26 #15
det var der ikke meget svar over jantzen :)
Avatar billede jakobdo Ekspert
10. oktober 2008 - 20:05 #16
:o)
Avatar billede andrew Nybegynder
19. oktober 2008 - 15:33 #17
jantzen88=> Skriv hvis du vil have en bid af kagen :)
Avatar billede jakobdo Ekspert
19. oktober 2008 - 15:47 #18
Takker for point.
Avatar billede jantzen88 Nybegynder
19. oktober 2008 - 20:25 #19
Jeg siger nej tak.
Avatar billede andrew Nybegynder
21. oktober 2008 - 16:34 #20
Så takker jeg for interessen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester