Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Walidacja użytkowników - uproszczona Captcha
Forum PHP.pl > Forum > Przedszkole
Galakar
Witam wszystkich.

Dzięki wcześniejszym poradom i pomocy użytkowników tego zacnego forum, udało mi się uruchomić stronę internetową, która działa tak jak pragnąłem (mniej więcej). Przez kilka miesięcy wszystko było w porządku, aż w zeszłym tygodniu użyto skryptu który pozwolił na automatyczne oddawanie głosów w ankiecie. Cała ankieta składała się tylko z pól "radio" (nie wiem czy jest to istotne). Od tygodnia staram się temu zaradzić i niestety powoli opuszcza mnie nadzieja, że sam cokolwiek wykombinuję.

Do tej pory zabezpieczałem się przed wielokrotnym głosowaniem poprzez ciasteczka. Przez ostatni tydzień próbowałem innych metod, ale były one określane jako "niewystarczające". Pomysły wyglądały następująco:
- wraz z oddaniem głosu uruchamiała się sesja. Jeśli sesja lub ciasteczka są aktywne pojawiał się komunikat, że dany użytkownik już głosował;
- przycisk submit pojawiał się dopiero po naciśnięciu buttona "Jestem człowiekiem";
- dodanie okienka alert.

Jako że powyższe zabezpieczenia były określane jako słabe, postanowiłem napisać kod, który najpierw generuje losowe słowo które użytkownik musi przepisać. Jeśli to się powiedzie, pojawi się przycisk "Głosuj" i będzie można normalnie oddać głos. Na stronie http://www.w3schools.com/ jest pokazany tutorial jak napisać prostą walidację w JS. Niestety na JS się nie znam. Spróbowałem napisać to w PHP ale utknąłem tuż po funkcji która miałaby generować takie zapytanie. Wygląda ona tak:

  1. <?php
  2. function pobierz_slowo($min, $max)
  3. //pobranie losowego słowa ze słownika
  4. {
  5. // generowanie losowego słowa
  6. $slowo = '';
  7. // ścieżka do słowa
  8. $slownik = '../slowa/pl.txt'; // słownik
  9. $wp = @fopen($slownik, 'r'); //otwarcie pliku tylko do odczytu
  10. if(!$wp) //co jeśli nie udało się otworzyć pliku
  11. return false;
  12. $wielkosc = filesize($slownik);
  13.  
  14. // przejście do losowej pozycji w słowniku
  15. srand ((double) microtime() * 1000000);
  16. $losowa_pozycja = rand(0, $wielkosc);
  17. fseek($wp, $losowa_pozycja);
  18.  
  19. // pobranie ze słownika następnego pełnego słowa o właściwej długości
  20. while (strlen($slowo)< $min || strlen($slowo)>$max || strstr($slowo, "'"))
  21. {
  22. if (feof($wp))
  23. fseek($wp, 0); // jeżeli koniec pliku, przeskocz na początek
  24. $slowo = fgets($wp, 80); // przeskoczenie pierwszego słowa bo może być niepełne
  25. $slowo = fgets($wp, 80); // potencjalne hasło
  26. };
  27. $slowo=trim($slowo); // obcięcie początkowego \n z funkcji fgets
  28. return $slowo;
  29. }
  30. ?>


Zapoznałem się już z tematem http://forum.php.pl/index.php?showtopic=30...t=0&start=0 Niestety niewiele mi on mówi. Ma ktoś może jakąś radę, jak rozwiązać ten problem?

Z wyrazami szacunku

Galakar
Sephirus
Pytanie numer 1:

Te ankiety - dostępne są dla każdego czy zalogowanego użytkownika?

Pytanie numer 2:

Czemu nie użyć reCaptcha?
Galakar
Witam.

Co do pierwszego pytania, to jest ona dostępna dla każdego użytkownika. Ze względu na tematykę, gdy wprowadziłem na próbę możliwość głosowania tylko dla zarejestrowanych użytkowników, liczba głosów spadła zaledwie do 5 (z kilkudziesięciu normalnie). Dlatego ten pomysł porzuciłem.

Co do drugiego, to wydaje mi się że odczytanie reCaptchy jest uciążliwe (gdy pojawiają się na przykład słowa pochodzenia chińskiego czy japońskiego). Eksperymentowałem z Simple Captcha od Google, ale nie znalazłem możliwości aby sprawdzało poprawność przed wysłaniem formularza. Jeśli mylę się co do reCaptcha to przepraszam, ale nigdy nie miałem okazji z niej korzystać.

Próbowałem samemu eksperymentować dlatego, że uważam to za najlepszą metodę nauki.

Z wyrazami szacunku
Galakar
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.