Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Blod

Função anti-flood

Recommended Posts

Olá pessoal, estou precisando de uma função antiflood que verifique se o usuário postou algo a 50 segundos e se o texto que ele está postando é 70% igual ao texto anterior, para não ocorrer flood....

 

Alguém ai poderia me dar algumas dicas ou exemplos que eu possa me basear ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você guarda o post no banco de dados, faça um select do último post do usuário, verifique se a diferença é menor que 50, se retornar alguma linha, é porque ele postou, as linhas retornadas, você itera sobre elas, utiliza o similar_text, retornando a porcentagem, faça seu if, verificar se é maior que 70, se for, pega o id dessa linha, e feche o post ou exclua-o

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então andrey, eu estou fazendo isso mais não está dando certo, faço isso:

 

$ultimoPost = "bla bla";
$texto = "bla bla";
similar_text($ultimoPost, $texto, $porc);
if($porc < 50):

//Código

else:

//Código

endif;
exit;

 

Mais ele está postando mesmo assim, nao sei oq ocorre de errado...

 

E preciso também verificar se ele postou algo á mais de 40 segundos para liberar um novo post...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim ..

<?php
 $lastPost = 'eu sou um bom garoto';
 $thisPost = 'eu sou um mal garoto';
 similar_text( $thisPost , $lastPost , $percent );
 if( ( ( int ) $percent > 80 || ( int ) $percent < 60 ) && !!$percent == ( 100 )  ) 
	 echo 'Não';
 else 
	 echo 'Ok' ;

 

Quanto ao banco de dados, você não grava às datas dos posts não ? :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, eu gravo as datas dos posts, mais a minha dificuldade é tipo não sei quanto vale 40 segundos naqueles numeros do "time()" pra eu fazer o if...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo .. pense que você tenha o seguinte

mysql> select * from teste;
+------+---------------------+
| post | enviado             |
+------+---------------------+
| a    | 2011-09-15 21:40:12 |
| b    | 2011-09-15 21:40:12 |
| c    | 2011-09-15 21:50:12 |
+------+---------------------+
3 rows in set (0.00 sec)

mysql>

 

Perceba que o post 'c' foi enviado há 10 minutos de diferença dos outros ..então, os outros ainda estão no limite de tempo para postar, beleza ..

mysql> select * from teste where enviado < date_add( now() , interval 40 second ) ;
+------+---------------------+
| post | enviado             |
+------+---------------------+
| a    | 2011-09-15 21:40:12 |
| b    | 2011-09-15 21:40:12 |
+------+---------------------+
2 rows in set (0.00 sec)

 

Esses foram os últimos posts que foram postados num período de tempo de 40 segundos, você pode ler esses resultados, e verificar por conteúdo similares, de acordo com sua idéia de verificar o último postado, você pode fazer um order by desc, e pegar o primeiro retornado, utilizando um array_shift para puxar ele do fetch .. aí é por sua conta fazer as devidas verificações ..

 

Caso você não quer que tal usuário não poste num período de intervalo de 40 segundos entre o último post, é só fazer um 'timer' ..

<?php
         session_start();
         $segundos = ( int ) 40 ;
         if( ! isset( $_SESSION[ 'time' ] ) ) {
                $_SESSION[ 'time' ] = time();
         } else {
                if( ( time() - $_SESSION[ 'time' ] ) >= $segundos ) {
                       echo 'Pode postar';
                       $_SESSION[ 'time' ] = time();
                } else {
                       echo 'Não pode postar';
                }
         }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exato maninho, agente define um fixo, mas eu lembro todo dia que faço uma variável que recebe algum valor que o cliente envia .. então ' Nunca subestime o poder do cliente ' .. você coloca em negrito fonte de tamanho 72 escrito do lado do input 'Use números de 0 a 9 ' o cara envia exatamente escrito 'número 9' no input text, também tem o caso dos caras que recebem código, só alterar o que foi visto, por exemplo acima '40' ele vai ver que ali é os segundos, e coloca lá assim:

$segundos = ( int ) $_GET['segundos'];

 

Sem saber o motivo do ( int ) ali na frente, a maioria não remove por achar prejudicial e atrapalhar o funcionamento definido e esperado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

' Nunca subestime o poder do cliente '

 

 

:lol: :lol: :lol:

 

Você tem toda a razão.

 

O cliente consegue fazer coisas que nós após exaustivos testes, não fomos capazes de fazer/descobrir <_<

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum... quantas opiniões, dois ótimos porgramadores discutindo como se faz uma coisa, gostei kkkk

 

Vlw, agora entendi e consegui fazer :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.