Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nie działające prawidłowo captcha
Forum PHP.pl > Forum > PHP
michal16202
Witam, znalazłem na internecie taki skrypt do captchy ale nie działa prawidłowo, co innego generuje a co innego przekazuje o zmiennej sesyjnej.
  1. <?php
  2. $znaki = 'ABCDEFGHIJKLMNPQRSTUWXYZ123456789'; // dozwolone znaki
  3. $szerokosc = 120; // szerokość obrazka
  4. $wysokosc = 30; // wysokość obrazka
  5. $ilosc_znakow = 6; // długość captchy
  6. $str = ''; // zmienna pomocnicza
  7.  
  8. // losowanie ciągu znkaów
  9. for ($i = 0; $i < $ilosc_znakow; $i++)
  10. $str .= substr($znaki, mt_rand(0, strlen($znaki) -1), 1);
  11.  
  12. $string = $str;
  13. $_SESSION['captcha'] = $string; // przypisanie do zmiennej sesyjnej
  14.  
  15. // tworzenie obrazka o danych wymiarach
  16. $im = imagecreate($szerokosc, $wysokosc);
  17.  
  18. //kolory obrazka
  19. $tlo = imagecolorallocate($im,0,0,0);
  20. $czcionka = imagecolorallocate($im,255,255,255);
  21. $siatka = imagecolorallocate($im,78,78,78);
  22. $ramka = imagecolorallocate ($im, 255, 0, 0);
  23.  
  24. imagefill($im,1,1,$tlo); // wypełnienie tłem
  25.  
  26. // losowanie siatki
  27. for($i=0; $i<1600; $i++)
  28. {
  29. $rand1 = rand(0,$szerokosc);
  30. $rand2 = rand(0,$wysokosc);
  31. imageline($im, $rand1, $rand2, $rand1, $rand2, $siatka);
  32. }
  33.  
  34. // losowanie pozycji znaków
  35. $x = rand(5, $szerokosc/(7/2));
  36.  
  37. // dodawanie obramowania
  38. imagerectangle($im, 0, 0, $szerokosc-1, $wysokosc-1, $ramka);
  39.  
  40. // umieszczanie liter na obrazku
  41. for($a=0; $a < 7; $a++)
  42. {
  43. imagestring($im, 6, $x, rand(4 , $wysokosc/5), substr($string, $a, 1), $czcionka);
  44. $x += (5*3); // odstęp między literami
  45. }
  46.  
  47. // zwrócenie wygenerowanego obrazka, ustawienie typu mime na GIF
  48. header("Content-type: image/gif");
  49. imagegif($im);
  50. imagedestroy($im);
  51.  
  52. ?>


A tak go dodaje na strone:
  1. <?php
  2. echo $_SESSION['captcha'];
  3. ?>
  4. <img src="/captcha.php" />


To jest jedyne captcha jakie działa mi. Wszystkie inne wywalały znajomy error z błędem obrazka.
kartin
Wyświetla się kod z poprzedniego obrazka?

Zrób 2 strony. Jedną która wyświetla $_SESSION['captcha'];, a na drugiej stronie zrób wyświetlenie obrazka i link do pierwszej strony.
michal16202
Tak, wyświetla wcześniejszy kod niż jest na obrazku ale jak wszedłem na strone captcha.php a na innej dałem samo echo z tą sesją to oba kody się zgadzały. Jeśli dobrze zrozumiałem mam dodać do captcha.php link do strony tam gdzie ma być użyty $_SESSION['captcha']; tyle że jak cokolwiek dodam do captcha.php to przestaje działać i wolał bym mieć captcha przy formularzu do rejestracji a nie na oddzielnej stronie, troche dziwinie by to wyglądało.
kartin
Nic nie trzeba kombinować, będzie działać w formularzu rejestracji. Przecież nie będziesz sprawdzać kodu przed jego wygenerowaniem, a dopiero po, gdy użytkownik kliknie zarejestruj.

Swoją droga captcha jest tylko utrudnieniem dla zwykłych użytkowników - jak ktoś będzie chciał masowo rejestrować konta to skorzysta z odpowiednich serwisów: 8 Best CAPTCHA Solvers
michal16202
Moi "klienci" raczej nie będą się uciekać do tych metod a captch jest mi potrzebne bo chociaż w jakimś stopniu by blokowały spam, nie da się tego jakoś rozwiązać żeby obrazek było widać w formularzu tak żeby działał? I mam pytnie, dla czego się tak dzieje że obrazek jest niezgodny z wyświetlanym a z czym idzie wymaganym do sprawdzenia captch kodem?
kartin
Próbowałeś wstawić w formularzu i nie działa? Captcha jest OK i będzie działać poprawnie z formularzem rejestracji.

  1. <?php
  2. echo $_SESSION['captcha'];
  3. ?>
  4. <img src="/captcha.php" />


Powyższy kod działa w następujący sposób:
  1. wyświetl zapisany wcześniej kod
  2. wygeneruj i zapisz kod, wyświetl obrazek z kodem

Krok pierwszy wykonywany jest w chwili uruchomienia skryptu, a krok drugi w momencie pobrania obrazka (uruchomienia skryptu captcha.php) przez przeglądarkę. Zanim nie wyświetlisz obrazka to nie możesz ze zmiennej sesji odczytać kodu.
acidm
Cytat(michal16202 @ 31.05.2014, 16:05:29 ) *
captch jest mi potrzebne bo chociaż w jakimś stopniu by blokowały spam...

Polecam link
michal16202
Już wiem czemu mi to nie działało, captcha jest generowane z dużych liter i takie musze wpisać w polu a wpisywałem małe i dlatego nie działało. Problem rozwiązany. Dzięki.
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.