Blod 0 Denunciar post Postado Setembro 15, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Setembro 15, 2011 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
Blod 0 Denunciar post Postado Setembro 15, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Setembro 15, 2011 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
Blod 0 Denunciar post Postado Setembro 16, 2011 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
Kakashi_Hatake 267 Denunciar post Postado Setembro 16, 2011 PHP :seta: time Retorna a hora atual medida no número de segundos desde a Era Unix (January 1 1970 00:00:00 GMT). Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Setembro 16, 2011 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
Kakashi_Hatake 267 Denunciar post Postado Setembro 16, 2011 Vou dar uma de metido :P Isso é redundânte $segundos = ( int ) 40 ; Forçar um inteiro a ser um inteiro. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Setembro 16, 2011 Nunca se sabe o que vai entrar naquela variável, por isso deve ser feito a tipagem de tal valor, igualzin ao papai java. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Setembro 16, 2011 Bom, se não será um valor fixo, então nada melhor que forçar a tipagem e evitar futuras dores de cabeça :D Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Setembro 16, 2011 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
Kakashi_Hatake 267 Denunciar post Postado Setembro 16, 2011 ' 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
Blod 0 Denunciar post Postado Setembro 16, 2011 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