Autor | Zpráva | ||
---|---|---|---|
Tomasekkkkkk Profil * |
#1 · Zasláno: 26. 3. 2008, 16:56:55
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 |
#2 · Zasláno: 26. 3. 2008, 17:23:24
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 * |
#3 · Zasláno: 26. 3. 2008, 17:27:12
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 |
#4 · Zasláno: 26. 3. 2008, 18:01:45 · Upravil/a: BetaCam
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 |
#5 · Zasláno: 26. 3. 2008, 18:41:52 · Upravil/a: krteczek
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 |
#6 · Zasláno: 26. 3. 2008, 20:31:36 · Upravil/a: Medvídek
Já to řešim takto:
while($zaznam=mysql_fetch_assoc($vysledek)): $zprava = Str_iReplace($zaznam["vyraz"],"*****",$zprava); endwhile; |
||
Adam Zábranský Profil |
#7 · Zasláno: 26. 3. 2008, 21:13:05 · Upravil/a: Adam Zábranský
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 * |
#8 · Zasláno: 27. 3. 2008, 06:54:08
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 * |
#9 · Zasláno: 27. 3. 2008, 07:10:29
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 * |
#10 · Zasláno: 27. 3. 2008, 07:11:06
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 |
#11 · Zasláno: 27. 3. 2008, 16:42:44 · Upravil/a: krteczek
//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 |
||
Časová prodleva: 16 let
|
0