[PHP] IRC - Banlist

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo allemaal,

Ik ben IRC services aan het schrijven in PHP.
Wat ik wil doen is: Controleren of een bepaalde host gebanned is.

Ik krijg de host in dit formaat aangeleverd: nick!user@host
in dat formaat kunnen wildcards voorkomen, bijvoorbeeld *!*@*.host

Ik gebruik nu deze query:
$q=mysql_query("DELETE FROM `".$cfg['Services']['BanTable']."` WHERE `channel`='".$chan."' AND (`mask` LIKE '".wcsqlrx($banmask)."' OR

function wcsqlrx($pat){
$pat=str_replace("*","%",$pat);
$pat=str_replace("?","_",$pat);
return $pat;
}

Het staat in de database als * = % en ? = _ om 'LIKE' mogelijk te maken zodat PHP minder hoeft te parsen.

Wie weet er een manier om de correcte dingen te laten matchen?

Acties:
  • 0 Henk 'm!

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
je zou eens naar reguliere expressies kunnen kijken...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
reguliere expressies zitten in PHP. Ik regel het liever aan de kant van MySQL.

[edit]of is er in MySQL ook een regular expression functie?

[ Voor 29% gewijzigd door Verwijderd op 17-03-2004 19:50 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb het nog eens uitgespit:

function listbans($mask){
echo "Listing bans for $mask\n";
if($e=mysql_error())output(1,$e,1);
$q=mysql_query("SELECT * FROM banlist WHERE mask LIKE '".wcsqlrx($mask)."'");
while($r=mysql_fetch_array($q)){
print_r($r);
}
echo "Other way around:\n";
$q=mysql_query("SELECT * FROM banlist WHERE '".wcsqlrx($mask)."' LIKE `mask`");
if($e=mysql_error())output(1,$e,1);
while($r=mysql_fetch_array($q)){
print_r($r);
}

}

als ik *!*@* opzoek dan vind de 'Other way around' niks.
%!%@% LIKE %!%@%.com = FALSE
Wie weet er een manier om dit op te lossen?

Acties:
  • 0 Henk 'm!

Verwijderd

MySQL ondersteund ook reguliere expressies:

http://www.mysql.com/doc/en/Regexp.html

Ik weet niet hoe slecht (of goed) dit voor je performance is.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thnx :-)

Met regular expressions heb ik het opgelost.
Qua performance maakt het niet zoveel uit denk ik, ze zullen niet 100 keer per seconden gaan unbannen.
Pagina: 1