Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Anty-flood na szybkie klikanie
Forum PHP.pl > Forum > PHP
Looozak
Witam. Stworzyłem sobie antyflooda przy dodawaniu komentarzy na 30s. Wygląda on tak:
  1. if($_COOKIE["komentarz"] == 1)
  2. {
  3.  
  4. echo '<center>Odczekaj 30s zanim dodasz następny komentarz...</center><br><hr><br>';
  5.  
  6. }
  7.  
  8. else {
  9. setcookie("komentarz", "1", time()+30);
  10. $zapytanie = 'INSERT INTO komentarze (nick, tresc, data, nr_g) VALUES ("'.$dane1_k.'" , "'.$dane2_k.'" , "'.$dane3_k.'" , "'.$id_get.'")';
  11.  
  12. echo("<center>Twój komentarz został dodany!!!</center>");
  13.  
  14. if(!mysql_query($zapytanie))
  15. {
  16. echo '<pre>'.mysql_error().'</pre>';
  17. }
  18. }


Oczywiście to działa, ale nie blokuje szybkiego klikania. Tzn, wpisujesz treść komentarza i wystarczy tylko kliknąć kilka razy na przycisk dodaj i antyflood nie działa... Szukałem tego w googlach ale jedyne co znalazłem to: http://forum.php.pl/index.php?showtopic=16...&pid=801073 lecz nie do końca to rozumiem. W miejsce //kod wstawiam dodawanie do mysqla a w elsie,np SPAM. I efekt jest taki, że zawsze pokazuje elsa czyli SPAM, w skutek czego nie da sie dodać żadnego komentarza...

Jak mogę rozwiązać swój problem ? Pozdro.
tehaha
no w tym linku co pokazałeś masz pokazane jak to rozwiązać,po dodaniu komentarza zapisujesz do zmiennej sesyjnej obecny timestamp, przed dodaniem komentarza sprawdzasz czy zmienna z timestamp jest ustawiona, a jeżeli jest to czy minęła określona ilość sekund(w tamtym przykładzie 15)sekund, jeżeli tak to zezwalasz na dodanie komentarza

p.s. a dałeś na początku skryptu session_start() ?
Looozak
Racja, session_start(); nie bylo ale dodałem i dalej zawsze pokazuje elsa. Jeśli możesz to rzuć okiem na całość:
  1. if (isset($_POST['komentarz']))
  2. {
  3. $dane1_k = $_POST['nick'];
  4. $dane2_k = $_POST['tresc'];
  5. $dane2_k = nl2br($dane2_k);
  6. $dane3_k = date("Y-m-d H:i:s");
  7.  
  8. $dane2_k = strip_tags($dane2_k);
  9.  
  10. if (!isset($_SESSION['anti-flood']) && $_SESSION['anti-flood'] > time() - 15) {
  11. $_SESSION['anti-flood'] = time();
  12.  
  13. if(empty($dane1_k) or empty($dane2_k)) {
  14. echo('<center><t3>Wypełnij formularz do końca!!!</t3></center><hr>');
  15. }
  16. else {
  17.  
  18. $zapytanie = 'INSERT INTO komentarze (nick, tresc, data, nr_g) VALUES ("'.$dane1_k.'" , "'.$dane2_k.'" , "'.$dane3_k.'" , "'.$id_get.'")';
  19.  
  20. echo("<center>Twój komentarz został dodany!!!</center>");
  21.  
  22. if(!mysql_query($zapytanie))
  23. {
  24. echo '<pre>'.mysql_error().'</pre>'; //Na wypadek błędu
  25. }
  26. }} else { echo 'SPAM'; }
  27. }


Troszkę zamotane ale chyba mniej więcej wiadomo... Aha i próbowałem też sesion_start(); na początku całego pliku.
tehaha
a spróbuj tym:

  1. if (isset($_POST['komentarz']))
  2. {
  3.  
  4. $dane1_k = $_POST['nick'];
  5. $dane2_k = $_POST['tresc'];
  6. $dane2_k = nl2br($dane2_k);
  7. $dane3_k = date("Y-m-d H:i:s");
  8.  
  9. $dane2_k = strip_tags($dane2_k);
  10.  
  11. if (isset($_SESSION['anti-flood']) && $_SESSION['anti-flood'] > time() - 15)
  12. {
  13. echo 'SPAM';
  14. }
  15. else
  16. {
  17.  
  18. $_SESSION['anti-flood'] = time();
  19.  
  20. if(empty($dane1_k) or empty($dane2_k))
  21. {
  22. echo('<center><t3>Wypełnij formularz do końca!!!</t3></center><hr>');
  23. }
  24. else
  25. {
  26.  
  27. $zapytanie = 'INSERT INTO komentarze (nick, tresc, data, nr_g) VALUES ("'.$dane1_k.'" , "'.$dane2_k.'" , "'.$dane3_k.'" , "'.$id_get.'")';
  28.  
  29. echo("<center>Twój komentarz został dodany!!!</center>");
  30.  
  31. if(!mysql_query($zapytanie))
  32. {
  33. echo '<pre>'.mysql_error().'</pre>'; //Na wypadek błędu
  34. }
  35. }
  36.  
  37.  
  38. }
  39.  
  40. }


radzę Ci zapanować nad tym burdelem w kodzie, bo masz 20 linijek i nie widać co się dzieje, a jak napiszesz skrypt na 500 linijek takim stylem i przyjdzie Ci potrzeba zmiany to se głowę o ścianę rozwalisz
Looozak
Super. Działa bardzo dobrze smile.gif Dzięki za pomoc snitch.gif

A co do burdelu to powstał teraz jak kombinowałem z tym antifloodem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.