Sign in to follow this  
lampiao_muléstia

Filtro De Palavras!

Recommended Posts

eae galera....

cara, eu to precisando fazer um filtro de palavras para um Mural de Recados. Estou querendo fazer isso justamente porque tem uns gringos que tipo cadastra meu site em robos, que fica lancando os recados la automaticamente...... o esquema é o seguinte....

Qeria fazer uma relação de palavras....

E se alguma destas palavras estiverem incluidas no meu textarea...

Após eu clicar em ENVIAR RECADO, o recado não seria gravado no DB...

Valeu

Um Abraço....

Share this post


Link to post
Share on other sites

Use um filtro de palavra para detectar se a palavra existi, se ela existir ao invés de você filtrar a palavra você impede que ela seja gravada (isso pode ser feita comparando as 2 frases, se elas forem diferentes após a filtragem é porque alguma palavra foi detectada)...

Ai está um exemplo de código para filtro...

Share this post


Link to post
Share on other sites

cara, massa eu dei uma olha no código, mas mano eu sou super leigo no PHP...

como ficaria para que ele comparasse a palavra existent no recado e não gravasse o recado...?

Share this post


Link to post
Share on other sites

if ($texto_original == $texto_filtrado){
//Aqui grava pois o texto original é igual ao filtrado
}else{
//Aqui não faz nada pois os textos são diferente
}

Obviamente o $texto_original é o que vem do form e o $texto_filtrado vai ser o resultado que sair do código de filtro...

Share this post


Link to post
Share on other sites
<?php

$textofiltrado = ("viagra");

$textofiltrado = ("cialis");

$textofiltrado = ("prozac");

$textofiltrado = ("cheap");

if ($texto_original == $texto_filtrado){

//Aqui grava pois o texto original é igual ao filtrado

}else{

//Aqui não faz nada pois os textos são diferente

}

?>

digamos que eu queria bloquear estas palavras ai em cima, ficaria assim?

Share this post


Link to post
Share on other sites

Só uma duvidazinha, onde está função Filtro? Ela vai varrer a frase e alterar ela para que depois possa ser comparada...

Share this post


Link to post
Share on other sites

eae cara........curte, to usando extensao do dreamweaver pra fazer isso ai......

meu código esta da seguinte forma

<?php

function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")

{

$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

switch ($theType) {

case "text":

$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";

break;

case "long":

case "int":

$theValue = ($theValue != "") ? intval($theValue) : "NULL";

break;

case "double":

$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";

break;

case "date":

$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";

break;

case "defined":

$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;

break;

}

return $theValue;

}

$editFormAction = $_SERVER['PHP_SELF'];

if (isset($_SERVER['QUERY_STRING'])) {

$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);

}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {

$insertSQL = sprintf("INSERT INTO mural (nome, texto, `data`, ip) VALUES (%s, %s, %s, %s)",

GetSQLValueString($_POST['nome'], "text"),

GetSQLValueString($_POST['texto'], "text"),

GetSQLValueString($_POST['data'], "text"),

GetSQLValueString($_POST['ip'], "text"));

mysql_select_db($database_conn, $conn);

$Result1 = mysql_query($insertSQL, $conn) or die(mysql_error());

$insertGoTo = "recados_inicial.php";

if (isset($_SERVER['QUERY_STRING'])) {

$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";

$insertGoTo .= $_SERVER['QUERY_STRING'];

}

header(sprintf("Location: %s", $insertGoTo));

}

$maxRows_rsRecados = 10;

$pageNum_rsRecados = 0;

if (isset($_GET['pageNum_rsRecados'])) {

$pageNum_rsRecados = $_GET['pageNum_rsRecados'];

}

$startRow_rsRecados = $pageNum_rsRecados * $maxRows_rsRecados;

mysql_select_db($database_conn, $conn);

$query_rsRecados = "SELECT * FROM mural ORDER BY registro DESC";

$query_limit_rsRecados = sprintf("%s LIMIT %d, %d", $query_rsRecados, $startRow_rsRecados, $maxRows_rsRecados);

$rsRecados = mysql_query($query_limit_rsRecados, $conn) or die(mysql_error());

$row_rsRecados = mysql_fetch_assoc($rsRecados);

if (isset($_GET['totalRows_rsRecados'])) {

$totalRows_rsRecados = $_GET['totalRows_rsRecados'];

} else {

$all_rsRecados = mysql_query($query_rsRecados);

$totalRows_rsRecados = mysql_num_rows($all_rsRecados);

}

$totalPages_rsRecados = ceil($totalRows_rsRecados/$maxRows_rsRecados)-1;

$ipzica = getenv("REMOTE_ADDR");?>

na verdade não quero que faça a troca da palavra censurada por outra palavra ou imagem, eu gostaria que simplesmente não fosse adicionado um recado.....

valeu?

Edited by lampiao_muléstia

Share this post


Link to post
Share on other sites

Eu sei que você não quer que a palavra seja trocada mas acontece que usando o filtro você vai ter 2 frases, a que veio do form e a censurada, se as 2 forem diferentes é porque havia alguma palavra proibida, logo, não faz nada, se as 2 forem iguais é porque não havia nenhum palavra proibida logo insere no BD.

Esses $_POST['xxxxx'] (os xxxx são os nomes usados no seu script) recebem os dados vindos do formulário, então, você tem que pegar o $_POST['xxxxx'] que corresponde ao campo de texto, usar ele para passar no filtro, pegar o resultado do filtro e comparar com o $_POST['xxxxx'] se forem diferentes não faz nada, se forem iguais grava, logo a parte do script que faz a gravação (no seu caso é $Result1 = mysql_query($insertSQL, $conn) or die(mysql_error());) deve ir na parte do if que corresponde as frases iguais...

Share this post


Link to post
Share on other sites

O código do filtro tem uma parte:

$filtro = array (

"você" => "você",

"beleza" => "beleza",

"também" => "também"

);

A primeira é a forma errada a segunda é a certa no seu caso você pode colocar qualquer coisa na segunda pois é apenas para marcar a frase como diferente, então poderia ser algo do tipo:

$filtro = array (

"viagra" => "######",

"porn" => "######",

);

Etc... assim quando a frase a ser filtrada passar pelo filtro as palavras programadas serão alteradas para ##### e ai quando se comparar a frase filtrada com a original se o filtro agiu (e substitui palavras) as 2 não vai coincidir...

Share this post


Link to post
Share on other sites
$filtro = $_POST['texto'];

$filtro = array (

"viagra" => "######",

"porn" => "######",

);

if ($_POST['texto'] == $filtro){

//Aqui grava pois o texto original é igual ao filtrado

}else{

//Aqui não faz nada pois os textos são diferente

}quote]

Mais ou menos isso ai?

Edited by lampiao_muléstia

Share this post


Link to post
Share on other sites

Seria legal você dar uma olhada na página com o código do Filtro, pois o que eu passei (e escrevi na minha frase) foi apenas uma parte do código do filtro, para facilitar a sua vida, vou o filtro COMPLETO é o código abaixo:

<?php

function Filtro($texto){
$filtro = array (
          "você" => "você",
          "beleza" => "beleza",
          "também" => "também"
          );

foreach ($filtro as $errado => $certo){
    $texto = preg_replace ("/".$errado."/i", $certo, $texto);
}
return $texto;
}

$x = "você você beleza beleza também também";
echo Filtro ($x);
?>

Share this post


Link to post
Share on other sites

eae chará.....

como lhe falei, meu php num e la essas coisa mas está indo.......heheh

da uma olhada no que fiz ai, tem nexo isso?:

function Filtro($_POST['texto']){

$filtro = array (

"viagra" => "xxx",

"cialis" => "xxx",

"porn" => "xxx"

);

foreach ($filtro as $errado => $certo){

$texto = preg_replace ("/".$errado."/i", $certo, $texto);

}

return $texto;

}

if ($_POST['texto'] == $filtro){

$Result1 = mysql_query($insertSQL, $conn) or die(mysql_error());

}else{

//que código eu coloco aqui para direcionar para uma página qualquer ?

}

Share this post


Link to post
Share on other sites

Troque:

function Filtro($_POST['texto']){

Por

$texto = $_POST['texto'];

function Filtro($texto){

E

if ($_POST['texto'] == $filtro){

Por

if ($texto == Filtro ($texto)){

Share this post


Link to post
Share on other sites
$texto = $_POST['texto'];

function Filtro($texto){

$filtro = array (

"viagra" => "xxx",

"cialis" => "xxx",

"porn" => "xxx"

);

foreach ($filtro as $errado => $certo){

$texto = preg_replace ("/".$errado."/i", $certo, $texto);// oque é esse $errado$certo preciao mesmo desse trem???rsrs

}

return $texto;

}

if ($_POST['texto'] == $texto){

$Result1 = mysql_query($insertSQL, $conn) or die(mysql_error());

}else{

//que código eu coloco aqui para direcionar para uma página qualquer ?

}

Share this post


Link to post
Share on other sites

if ($_POST['texto'] == $filtro){

Por

if ($texto == Filtro ($texto)){

Quanto ao:

$texto = preg_replace ("/".$errado."/i", $certo, $texto);// oque é esse $errado$certo preciao mesmo desse trem???rsrs

» http://www.php.net/preg_replace

E ao:

//que código eu coloco aqui para direcionar para uma página qualquer ?

Ai você coloca o que quiser... o script é seu, você decide, ele só vai cair ai se as 2 frases forem diferentes... logo você pode dar um alert, dizendo que foi encontrado uma palavra proibida, ou etc...

Share this post


Link to post
Share on other sites
$texto = $_POST['texto'];

function Filtro($texto){

$filtro = array (

"viagra" => "xxx",

"cialis" => "xxx",

"porn" => "xxx"

);

foreach ($filtro as $errado => $certo){

$texto = preg_replace ("/".$errado."/i", $certo, $texto);// oque é esse $errado$certo preciao mesmo desse trem???rsrs

}

return $texto;

}

if ($_POST['texto'] == $texto){

$Result1 = mysql_query($insertSQL, $conn) or die(mysql_error());

}else{

//que código eu coloco aqui para direcionar para uma página qualquer ?

}

Seria isso?

da uma olhada do cometario que coloquei ali em cima....

valeu,, até +

Share this post


Link to post
Share on other sites

Editei o meu post anterior para acrescentar a resposta ao seu comentário...

E eu disse para você substituir:

if ($_POST['texto'] == $filtro){

Por

if ($texto == Filtro ($texto)){

Porque se você colocar $_POST['texto'] == $texto, ele sempre vai retornar como os 2 sendo iguais...

Share this post


Link to post
Share on other sites
$texto = $_POST['texto'];

function Filtro($texto){

$filtro = array (

"viagra" => "xxx",

"cialis" => "xxx",

"porn" => "xxx"

);

foreach ($filtro as $errado => $certo){

$texto = preg_replace ("/".$errado."/i", $certo, $texto);

}

return $texto;

}

if ($texto == Filtro ($texto)){

$Result1 = mysql_query($insertSQL, $conn) or die(mysql_error());

}else{

//não acontece nada

}

cara, dei uma olhada la no PHP.NET e vi que a função serve para substituir tal texto por outro, mas ai lhe pergunto novamente, eu já não estou fazendo a substituição na seguinte linha de código:

function Filtro($texto){

$filtro = array (

"viagra" => "xxx",

"cialis" => "xxx",

"porn" => "xxx"

);

valeu até +

Share this post


Link to post
Share on other sites

Acontece que você precisa de um laço para varrer toda a frase, por isso o foreach pega cada elemento do errado e certo e varre a frase com cada elemento fazendo as alterações necessária...

Share this post


Link to post
Share on other sites

Resumindo, mesmo que eu não tenha usado antes essas variaveis ai, $errado e $certo

meu código está zero bala do jeito que está ai abaixo:????

$texto = $_POST['texto'];

function Filtro($texto){

$filtro = array (

"viagra" => "xxx",

"cialis" => "xxx",

"porn" => "xxx"

);

foreach ($filtro as $errado => $certo){

$texto = preg_replace ("/".$errado."/i", $certo, $texto);

}

return $texto;

}

if ($texto == Filtro ($texto)){

$Result1 = mysql_query($insertSQL, $conn) or die(mysql_error());

}else{

//não acontece nada

}

Share this post


Link to post
Share on other sites

O que acontece é o seguinte... você tem um array chamado filtro... o foreach chama os elemento do array e eles assumem o valor de $errado e $certo (por isso o $filtro as $errado => $certo)...

O código teoricamente está ok...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this