http://qs321.pair.com?node_id=230028


in reply to Re: Re: Perl and MySQL - performing a search...
in thread Perl and MySQL - performing a search...

Excellent, thank you!
Before I got this, here is what I came up with.
Please tell me what you think.

The reason I would like it to stay in the database, is because I am making an Admin interface for our company, where we can add new names delete them, and do a ton of other things not related to the forbidden names, such as manage the registered users, change our hosting packages, domain prices and all that.

So here is what I came up with...

my $is_bad = 0; $sth = $dbh->prepare (qq{ SELECT * FROM `forbidden_usernames` }); $sth->execute(); while($row = $sth->fetchrow_hashref()) { if ($row->{f_user} =~ m/$str/i || $str =~ m/$row->{f_user}/i) +{ $is_bad++; last; } } $sth->finish(); if ($is_bad != 0) { return("bad"); }


That checks it both ways.

I have not yet tested it. But what do you think, would it work about like yours does?

Thank you!!

Richard.

Replies are listed 'Best First'.
Re: Re: Re: Re: Perl and MySQL - performing a search...
by Trimbach (Curate) on Jan 27, 2003 at 22:20 UTC
    Sure, that'll work... you can get your long list of bad words from anywhere: a database table, an external file, a __DATA__ section, whatever.

    A couple of small comments: you should avoid using "*" when you SELECT in your code. If you really want all the columns it's much better to select them by name. Not only do you conserve memory and bandwidth by selecting only what you need, but your code is better documented and you get to avoid future problems if you ever decide you want to fetchrow() instead of fetchrow_hashref().

    Secondly, I'd re-arrange your code a little:

    $sth = $dbh->prepare (qq{ SELECT f_user FROM `forbidden_usernames` }); $sth->execute(); while($row = $sth->fetchrow_hashref()) { if ($row->{f_user} =~ m/$str/i || $str =~ /$row->{f_user}/i) { return ("bad"); } }
    The $sth->finish isn't really necessary unless you have a LOT of data in your result set...but that's just a matter of style. TMWOWTDI.

    Gary Blackburn
    Trained Killer