Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][MySQL][PHP] Antyflood problem
Forum PHP.pl > Forum > Przedszkole
cabana
Witam. Mam skrypt wysyłania pozdrowień i chcę ograniczań ilość wysyłanych pozdrowień w czasie. Do wysyłania pozdrowień stosuję ajax w jQuery oraz PHP. Do bazy dodaję ip usera wysyłającego pozdro oraz czas kiedy może wysłać kolejne. Mój problem polega na tym, że chcę wyświetlać odliczanie kiedy user może wysłać kolejne pozdrowienie.
Przedstawię kawałek kodu:

  1. if (mysql_num_rows($result))
  2. {
  3. $row = mysql_fetch_assoc($result);
  4. $secs = ($row['TIME'] - time());
  5. ?>
  6. <script type="text/javascript">
  7. var seconds = <?php echo $secs; ?>;
  8. function countDown()
  9. {
  10. if (seconds != 0)
  11. {
  12. document.getElementById('displaySeconds').innerHTML = seconds;
  13. seconds--;
  14. setTimeout(countDown, 1000);
  15. }
  16. else
  17. {
  18. document.getElementById('flood').innerHTML = '<font color="green">Możesz już wysłać kolejne pozdrowienie.</font>';
  19. }
  20. }
  21. countDown();
  22. </script>
  23. <?php
  24. echo '<div id="flood"><font color="red">Blokada AntyFloodowa.</font>' .
  25. '<br />Następne pozdrowienie możesz wysłać za <span id="displaySeconds">' . $secs . '</span> sekund.</div>';
  26. }


Problem polega na tym, że jeśli user kliknie jeszcze raz wyślij gdy wyświetlany jest licznik to odliczany czas biegnie 2x szybciej w miarę kliknięć wyślij i nie mam pojęcia jak temu zaradzić.
YaQzi
Możesz np:
- wyznaczać czas korzystając z zegara systemowego uzytkownika zamiast odejmowac od zmiennej po sekundzie,
- odpalać funkcję przez inną funkcję countDownStarter(), która odpali countDown() jesli będzie to jej pierwsze uruchomienie (do zrobienia na booleanie),
- zablokowac możliwość klikania przycisku wyślij jesli ochrona jest aktywna
cabana
Cytat(YaQzi @ 2.08.2012, 22:46:19 ) *
Możesz np:
- wyznaczać czas korzystając z zegara systemowego uzytkownika zamiast odejmowac od zmiennej po sekundzie,
- odpalać funkcję przez inną funkcję countDownStarter(), która odpali countDown() jesli będzie to jej pierwsze uruchomienie (do zrobienia na booleanie),
- zablokowac możliwość klikania przycisku wyślij jesli ochrona jest aktywna


Całkiem niezły sposób. Oczywiście `Pomógł` dla Ciebie.
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.