witam, mój problem:
generuję dynamiczny obrazek <img src="captcha.php" alt="" />

w pliku captcha.php przypisuję ciąg znaków do zmiennej sesyjnej $_SESSION['token']

niestety po przesłaniu formularza i próbie porównania $_SESSION['token'] z $_POST['captcha'] okazuje się, że $_SESSION['token']='';
W związku z czym otrzymuję błąd mimo tego, że kod jest podany poprawnie.

poniżej załączam listingi:
captcha.php
  1. <?
  2.  
  3. $tla = glob("bg/{*.jpg,*.jpeg}", GLOB_BRACE);
  4.  
  5. $czcionki = glob("fonts/*.ttf");
  6.  
  7. $znaki = '23456789';
  8.  
  9. $znaki2 = 'ACEHKMUXZ';
  10.  
  11. $obrazek_tla = $tla[array_rand($tla)];
  12.  
  13. $cap = imagecreatefromjpeg($obrazek_tla);
  14.  
  15. $kolor = imagecolorallocate($cap, 100, 100, 100);
  16. $linie = imagecolorallocate($cap, 150, 150, 150);
  17.  
  18. $liczba_znakow = 5; // ilość znaków na obrazku
  19. $ilosc_linii = 30; // ilość linii na obrazku
  20.  
  21. for($x = 1; $x <= $ilosc_linii; $x++) // powtarzamy x razy - rysujemy x linii
  22. imageline
  23. ( // funkcja rysująca linię
  24. $cap, // uchwyt obrazka
  25. 0, // współrzędna X początku linii
  26. rand(-100,imagesy($cap)+100), // współrzędna Y początku linii
  27. imagesx($cap), // współrzędna X końca linii
  28. rand(-100,imagesy($cap)+100), // współrzędna Y końca linii
  29. $linie // kolor linii
  30. );
  31.  
  32. $code=''; // tworzenie zmiennej przechowującej ciąg znaków
  33.  
  34. for($x = 1; $x <= $liczba_znakow; $x++)
  35. {
  36. $czcionka = $czcionki[array_rand($czcionki)];
  37.  
  38. if ($x==1)
  39. {
  40. $znak =$znaki2[rand(0, strlen($znaki2)-1)];
  41. }
  42. else
  43. {
  44. $znak = $znaki[rand(0, strlen($znaki)-1)];
  45. }
  46.  
  47. $code .= $znak; // dodanie kolejnoego znaku do zmiennej $code
  48.  
  49. $odleglosc_miedzy_znakami = (round(imagesx($cap) / $liczba_znakow+1)-10)*($x-1)+20;
  50.  
  51. imagettftext
  52. ( // funkcja pisząca tekst
  53. $cap, // uchwyt obrazka
  54. rand(16, 20), // rozmiar czcionki
  55. rand(-15, 15), // nachylenie znaku
  56. $odleglosc_miedzy_znakami, // odległość między znakami
  57. rand(18, 25), // położenie względem górnej krawędzi obrazka
  58. $kolor,
  59. $czcionka,
  60. $znak
  61. );
  62. }
  63.  
  64. $_SESSION['token']=''; // tworzenie zmiennej sesyjnej przechowującej token
  65. $_SESSION['token']=$code;
  66. header('Content-Type: image/jpeg');
  67. imagejpeg($cap);
  68. imagedestroy($cap);
  69. ?>


sendform.php
  1. $error=0;
  2. if (!$_POST['captcha'])
  3. {
  4. $error++;
  5. $smarty->assign("ErrorCaptcha","Podaj poprawny kod z obrazka".$_SESSION['token']." <- token<br />".$_POST['captcha']." <- captcha");
  6. }
  7. else
  8. {
  9. if(strtolower($_POST['captcha'])!=strtolower($_SESSION['token']))
  10. {
  11. $error++;
  12. $smarty->assign("ErrorCaptcha","Podaj poprawny kod z obrazka".$_SESSION['token']." <- token<br />".$_POST['captcha']." <- captcha");
  13. }
  14. }
  15.  
  16. if ($error==0)
  17. { echo 'JEST OK!'; }
  18. else
  19. { echo 'NIE OK!'; }


będę bardzo wdzięczny za każdą radę, bo siedzę już nad tym drugi dzień i nic...



PROBLEM ROZWIĄZANY: brakowało session_start(); w głównym pliku index.php sad.gif

można temat wywalić