[MySQL4][PhpBB] Usuwanie spamu ?
Andrzej Kmicic - 10-09-2006 01:02
[MySQL4][PhpBB] Usuwanie spamu ? Jakiś nadgorliwiec zalewa moje forum wiadomosciami z dziedziny kasyn,pokera itp .... Niestety twórcy forum nie wyposażyli tego forum w grupowe usuwanie postów tego rodzaju.
Posty w forum phpbb są w dwu tabelach 'phpbb_posts' i 'phpbb_post_text' jak usunąć niechciany spam posługując się np słowami kluczowymi np 'poker', 'casino' itp. Tekst rozpoznawalny jest w tabeli phpbb_posts_text natomiast trzeba też usunąć posty z tabeli phpbb_posts. Obie tabele połączone są kolumną 'post_id'. Czy można to zrobić pojedyńczym zapytaniem SQL ?. próbowałem tak:
DELETE FROM `phpbb_posts` WHERE post_id = ( SELECT post_id FROM `phpbb_posts_text` WHERE `post_subject` LIKE '%poker%' )
ale zwraca mi błąd ?. -- Andrzej Kmicic
Artur Gancarz - 10-09-2006 01:02
Użytkownik Andrzej Kmicic napisał: > Jakiś nadgorliwiec zalewa moje forum wiadomosciami z dziedziny kasyn,pokera itp > ... Niestety twórcy forum nie wyposażyli tego forum w grupowe usuwanie postów > tego rodzaju. > > Posty w forum phpbb są w dwu tabelach 'phpbb_posts' i 'phpbb_post_text' jak > usunąć niechciany spam posługując się np słowami kluczowymi np 'poker', 'casino' > itp. Tekst rozpoznawalny jest w tabeli phpbb_posts_text natomiast trzeba też > usunąć posty z tabeli phpbb_posts. Obie tabele połączone są kolumną 'post_id'. > Czy można to zrobić pojedyńczym zapytaniem SQL ?. > próbowałem tak: > > DELETE FROM `phpbb_posts` WHERE post_id = ( SELECT post_id > FROM `phpbb_posts_text` > WHERE `post_subject` LIKE '%poker%' ) > > ale zwraca mi błąd ?.
Zamiast "post_id = ...." daj "post_id in (select ...)"
Powinno zadziałać, bo to spełnia warunki, jeśli post_id jest którymkolwiek z listy po "in". Samo "=" wolno stosować, gdy podzapytanie zwraca TYLKO jedną wartość.
Tutaj chciałbym nadmienić, że bardzo ważne jest, czy masz MySQL 4.0 czy 4.1 (bo 4.0 jeszcze nie obsługiwało podzapytań!!! i taka konstrukcja w ogóle lnie jest możliwa).
Artur
Andrzej Kmicic - 10-09-2006 01:02
Użytkownik "Artur Gancarz" <einstein@agh.edu.pl> napisał w wiadomości news:edtmbk$h3n$1@news.agh.edu.pl... >> próbowałem tak: >> >> DELETE FROM `phpbb_posts` WHERE post_id = ( SELECT post_id >> FROM `phpbb_posts_text` >> WHERE `post_subject` LIKE '%poker%' ) >> >> ale zwraca mi błąd ?. > > Zamiast "post_id = ...." daj "post_id in (select ...)" > > Powinno zadziałać, bo to spełnia warunki, jeśli post_id jest którymkolwiek z > listy po "in". Samo "=" wolno stosować, gdy podzapytanie zwraca TYLKO jedną > wartość. > > Tutaj chciałbym nadmienić, że bardzo ważne jest, czy masz MySQL 4.0 czy 4.1 > (bo 4.0 jeszcze nie obsługiwało podzapytań!!! i taka konstrukcja w ogóle lnie > jest możliwa).
Dziękuję ślicznie i wszystko jest już jasne, zawiniła niestety wersja MYSQL :( !!!!
pozdrawiam Wojtek
ktostam - 10-09-2006 01:02
[ot]Re: [MySQL4][PhpBB] Usuwanie spamu ?
Andrzej Kmicic napisał(a): > Użytkownik "Artur Gancarz" <einstein@agh.edu.pl> napisał w wiadomości > news:edtmbk$h3n$1@news.agh.edu.pl... >>> próbowałem tak: >>> >>> DELETE FROM `phpbb_posts` WHERE post_id = ( SELECT post_id >>> FROM `phpbb_posts_text` >>> WHERE `post_subject` LIKE '%poker%' ) >>> >>> ale zwraca mi błąd ?. >> Zamiast "post_id = ...." daj "post_id in (select ...)" >> >> Powinno zadziałać, bo to spełnia warunki, jeśli post_id jest którymkolwiek z >> listy po "in". Samo "=" wolno stosować, gdy podzapytanie zwraca TYLKO jedną >> wartość. >> >> Tutaj chciałbym nadmienić, że bardzo ważne jest, czy masz MySQL 4.0 czy 4.1 >> (bo 4.0 jeszcze nie obsługiwało podzapytań!!! i taka konstrukcjaw ogóle lnie >> jest możliwa). > > Dziękuję ślicznie i wszystko jest już jasne, zawiniła niestety wersja MYSQL :( > !!!!
Maly OT. Lepiej abys takie posty filtrowal przy ich wysylaniu.
pozdrawiam serdecznie
Andrzej Kmicic - 10-09-2006 01:03
>Maly OT. Lepiej abys takie posty filtrowal przy ich wysylaniu.
>pozdrawiam serdecznie
Przyznam że nie rozumiem ?. Posty te wpisuje ktoś na moje forum !!!. Poradziłem sobie skryptem PHP.Wobec zalewu mojego forum spamem zrobiłem skrypt do jego czyszczenia. Należy tylko uzupełniać listę słów nieporządanych w tablicy $badwords.Skrypt wyręczył mnie z czynności żmudnego ręcznego kasowania postów ze spamem. Może komuś się przyda :)
skrypt :
<? error_reporting(E_ERROR | E_PARSE);
include "connection.php";
$db="moje_forum";
$badwords=array( "poker", "online", "viagra", "texas", "blackjack", "slots", "roulette", "craps", "free", "casino", "black jack", "888");
$ctp=0; $ctpt=0; print "<pre>\n"; foreach ($badwords as $key=>$bword) { $sql="SELECT post_id FROM `phpbb_posts_text` WHERE `post_subject` LIKE '%$bword%'"; print "$sql\n";
$resulta=sql($sql); while ($row = mysql_fetch_array($resulta, MYSQL_NUM)) { $postid=$row[0]; print "rekord id = $postid\n"; $sql="DELETE FROM phpbb_posts WHERE post_id = $postid"; print "$sql\n"; $resultd=sql($sql); $k=mysql_affected_rows(); $ctp+=$k; if ($k==0) echo mysql_errno() . ": " . mysql_error() . "\n";
$sql="DELETE FROM phpbb_posts_text WHERE post_id = $postid"; print "$sql\n"; $resultd=sql($sql); $k=mysql_affected_rows(); $ctpt+=$k; if ($k==0) echo mysql_errno() . ": " . mysql_error() . "\n"; }
}
print "Z tabeli phpbb_posts usunięto $ctp rekordów\n"; print "Z tabeli phpbb_posts_text usunięto $ctpt rekordów\n"; print "</pre>"; ?>
i jeszcze skrypt inkludowany :
<? function connection() { global $link; global $dbhost; global $dbuser; global $dbpass; global $db;
if ($link) { return $link; } else { $link = mysql_connect($dbhost, $dbuser, $dbpass); if (!$link or !mysql_select_db($db,$link)) { return 0; } else { return $link; } } }
function sql($query) { if (!($link=connection())) return 0; else return mysql_query($query,$link); }
$dbhost="youhost"; $dbuser="user"; $dbpass="password"; ?>
pozdrawiam AK
ktostam - 11-11-2006 00:51
Andrzej Kmicic napisał(a): >> Maly OT. Lepiej abys takie posty filtrowal przy ich wysylaniu. > >> pozdrawiam serdecznie > > Przyznam że nie rozumiem ?. Posty te wpisuje ktoś na moje forum !!!. > Poradziłem sobie skryptem PHP.Wobec zalewu mojego forum spamem zrobiłem skrypt > do jego czyszczenia. Należy tylko uzupełniać listę słów nieporządanych w tablicy > $badwords.Skrypt wyręczył mnie z czynności żmudnego ręcznego kasowania postów ze > spamem. > Może komuś się przyda :) > > skrypt : > (ciach)
chodzilo mi o to, aby nie usuwac postow ze spamem po fakcie, ale dodac linnie kodu do phpbb ktora sprawdzi czy wlasnie wysylany post nie jest czasem spamem, i w razie czego, nie zablokuje go. proste, oszczedne czasowo i skuteczne
pozdrawiam
Bartosz 'briest' Stepien - 11-11-2006 00:53
Mistrz Artur Gancarz rzekł: > Użytkownik Andrzej Kmicic napisał: >> DELETE FROM `phpbb_posts` WHERE post_id = ( SELECT post_id [..] > Tutaj chciałbym nadmienić, że bardzo ważne jest, czy masz MySQL 4.0 czy > 4.1 (bo 4.0 jeszcze nie obsługiwało podzapytań!!! i taka konstrukcja w > ogóle lnie jest możliwa).
Podzapytań nie ma, ale zamierzony efekt można osiągnąć od 4.0 przez multiple-table delete.
-- Ustawa w sprawie reglamentacji śmiechu nie wpłynęła jeszcze do laski marszałkowskiej.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[Oracle] Jakim poleceniem usuwa sie ca?? scheme bez usuwania usera?
=?iso-8859-2?Q?MYSQL_-_szybkie_usuwanie_rekord=F3w_z_tabeli?=
[pl/sql] usuwanie znaku nowej lini ze stringa
[MS SQL]Usuwanie kolumny zawierajacej DEFAULT
[pl/sq] usuwanie 3 znaku od konca w stringu
=?iso-8859-2?q?jpg_-_usuwanie_artefakt=F3w_-_programik?=
SQL Server: jak zabronić usuwania rekordów?
usuwanie zduplikowanych =?ISO-8859-2?Q?tekst=F3w?=
FireBird + usuwanie dużej ilości rekordów
PS - grupowanie warstw, ich usuwanie i kopiowanie
zanotowane.pldoc.pisz.plpdf.pisz.plmorebeer.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|