Autor Zpráva
Tomasekkkkkk
Profil *
Zdravím Vás všechny,

rád bych se zeptal na jednu věc, v MySQL mám naházené v tabulce zakázaná slova, která chci blokvoat v přidávání příspěvků v diskuzi v nadpisu i textu příspěvku. Rád bych se zeptal, zda-li se dá pomocí mysql či PHP nějak natáhnout z MySQL ověření, zda-li se v textu neobjevuje patřičné slovo ... nemohu vyuźít např. .... WHERE slovo like = "%nějaký text zakázané slovo%", vím, že v PHP existuje strpos, existuje také něco v MySQL? Jak by jste to řešili vy? Díky moc Tom
Adam Zábranský
Profil
No já bych to řešil asi tak že předtím než by se uložil příspěvek do databáze tak bych to zkontroloval, nevím jestli chceš tato slova něčím nahradit nebo zakázat příspěvek úplně.
Kdybys chtěl nahradit tak např. $novazprava = preg_replace($zakazanaslova,"*****",$starazprava);
Nevím jestli by ti to stačilo, vím že to není přesně to na co si se ptal.
Tomasekkkkkk
Profil *
nene, potřebuji při vkládání příspěvku ověřit slov az mysql, jestli se nevyskytují v nadpisu či popisu příspěvku, pokud ano, script jednoduše zablokuje pokračování v přidání a hodí hlášku, že zadává zakázané slovo. Jen bych to potřeboval vyhledávat asi v MySQL, jenže to bude asi složitější. Kdyby to bylo už v MySQL přidáno (celý text, vím, že by to šlo vyhledat, ale pokud vkládám přes POST nadpis a popis, tak vím, že mysql jednoduše nerozkouskuje patřičnou větu na slova a neověří každé slovo :-(
BetaCam
Profil
Tomasekkkkkk
nene, potřebuji při vkládání příspěvku ověřit slov az mysql, jestli se nevyskytují v nadpisu či popisu příspěvku, pokud ano, script jednoduše zablokuje pokračování v přidání a hodí hlášku, že zadává zakázané slovo.

Tak těsně před ukládáním použij třeba preg_match nebo preg_ match_all a podle výsledku se zařiď.
krteczek
Profil
buď natáhneš do array zakázaná slova z db a pomocí k tomu navržené funkce ověříš jestli existuje v textu některé ze slov.
nebo příspěvek uložíš a provedeš na něm fultextové vyhledávání zakázaných slov, (z těch slov budeš muset po každé změně v databázi bad slov vytvořit dotazovací řetězec a ten uložit někam do souboru, pak jen načíst => jednou to vygeneruješ milionkrát použiješ), pokud existuje bad slovo v textu, tak příspěvek bud smažeš, nebo mu dáš označení že má nějaké bad slovo, a zakážeš ho tím zobrazovat
Medvídek
Profil
Já to řešim takto:

while($zaznam=mysql_fetch_assoc($vysledek)):
$zprava = Str_iReplace($zaznam["vyraz"],"*****",$zprava);
endwhile;
Adam Zábranský
Profil
Medvídek
ale on nechce nahrazovat, ale zakázat tu zprávu kde se nějaké špatné slovo vyskytuje
napadl mě tedy jeden způsob, ale bude to asi zbytečně složité

session_start();
while($zaznam=mysql_fetch_assoc($vysledek)):
if(ereg(zaznam["vyraz"],$zprava)) {
$_SESSION['spatne'] = 1;  
}
endwhile;
if($_SESSION['spatne'] == 1) {
echo "Tohle nesmíte psát!";
}
else {
proved skript!
}
Tomasekkkkkk
Profil *
Díky za odpovědi, právě nechci nějak moc zahltit server, ale našel jsem taky tento script http://php.vrana.cz/fulltextove-vyhledavani-v-mysql.php

Tím by to nešlo ošetřit přímo v MySQL?
Tomasekkkkkk
Profil *
Tak jsem to tedy udělal takto

$sSQLovslovo = "SELECT slovo FROM zakazana_slova WHERE aktivni='1'";
$qovslovo = new query($DB, $sSQLovslovo);
while($recslovo = $qovslovo->getrow()):
if ((strripos($_POST['nadpisinzeratu'],$recslovo["slovo"])!==false) OR (strripos($_POST['popisinzeratu'],$recslovo["slovo"])!==false)) {
$ok=false;
$blokace_slova_minimum = "1";  
}
endwhile;


Takhle to jde asi taky, že?
Tomasekkkkkk
Profil *
Ještě jsem to tedy neudělal, protože to musím přepsat do mých slov, ale poslal mi to kamarád, že by to mělo fungovat
krteczek
Profil
//předgeneruj si z uložených stop slov:
$podminky = "stop||slova||oddělené||dvěma||rourami";//vygeneruješ ze stop slov tabulky

$text = 'nějaký text, třeba z toho tvého formuláře, můžeš tu hodit nějaké to hnusné slovo, až budeš testovat jestli je to ok, nebo ne:-)';
$ban = 1;
if(!preg_match("~" . $podminky . "~i", $text))
{
  $ban = 0;
}
$d = "INSERT INTO `prispevky` (`nadpis`,`text`, `ban``) VALUES (" . osetri($nadpis) . ", " . osetri($text) . ", " . $ban . ") ";

A máš to hned rozlišené...
jen ten regulár bude asi třeba správně doladit, bo jsem to nezkoušel

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0