Captcha probleem
Ik gebruik captcha op mijn site en heb daar een zeer irritant probleem mee.
Het probleem is namelijk dat de pagina de captcha-creëer code niet uitvoert als ik op de link klik. Hij maakt simpelweg geen nieuwe afbeelding.
Het gekke is juist dat hij andere code in die functie wel uitvoert.
En wat ook nogal raar is: als ik de pagina refresh door middel van F5 voert hij de code wel uit.
Maar ja, dat wil ik mijn leden niet laten doen natuurlijk.
dit is de functie.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function captcha(){
$key = createRandomPassword2();
$key2 = $key;
$_SESSION['key'] = $key2;
$code = $key2;
$image = imagecreatetruecolor (100, 40); // maakt de image met de groote van 300px breed, en 60px hoog
$blue = imagecolorallocate($image, 4, 88, 135);
imagefilledrectangle($image, 0, 0, 100, 40, $blue);
$aFonts = array ('font/font1.ttf', 'font/font2.ttf', 'font/font3.ttf', 'font/font4.ttf'); // zet alle beschikbare fonts in een array
$aCode = str_split ($code); // zet alle karakters apart in een array
for ($i = 0; $i < count ($aCode); $i++) // een for-lus maken voor het aantal karakters dat de $aCode array bevat
{
$fontcolor = imagecolorallocate ($image, // kleurencombinatie maken voor de image variabel ($image)
rand (190, 255), // rood,
rand (190, 255), // groen,
rand (190, 255)); // blauw, deze geven de nieuwe kleur per karakter
if (count ($aCode) == 4) // de volgende locaties (x-as) aanmaken voor een code van 4 karakters lang
{
$pos[0] = rand (5, 5); // locatie aanmaken (x-as) voor de eerste karakter
$pos[1] = rand (30, 30); // locatie aanmaken (x-as) voor de tweede karakter
$pos[2] = rand (60, 60); // locatie aanmaken (x-as) voor de derde karakter
$pos[3] = rand (80, 80); // locatie aanmaken (x-as) voor de vierde karakter
}
imagettftext ($image, // image voorbereiden voor de image variabel ($image)
rand (14, 16), // fontgrootte, willekeurig getal laten kiezen tussen de 13 en 19
rand (-30, 30), // draaihoek, willekeur getal laten kiezen tussen de -31 en de 31
$pos[$i], // karakter positie breedte toewijzen, hebben we al voorbereid ($pos[])
rand (40, 15), // karakter positie hoogte, kiezen tussen de 51 en de 19
$fontcolor, // fontkleur toewijzen, hebben we al voorbereid ($fontcolor)
$aFonts[rand (0, 3)], // font, willekeurig font toewijzen uit de array ($aFonts)
$aCode[$i]); // code toewijzen, op volgorde van de array
}
imagepng ($image, 'captcha.png'); // de .png image aanmaken als captcha.png
imagedestroy ($image); // de handel afronden, en klaar!
}
$key = createRandomPassword2();
$key2 = $key;
$_SESSION['key'] = $key2;
$code = $key2;
$image = imagecreatetruecolor (100, 40); // maakt de image met de groote van 300px breed, en 60px hoog
$blue = imagecolorallocate($image, 4, 88, 135);
imagefilledrectangle($image, 0, 0, 100, 40, $blue);
$aFonts = array ('font/font1.ttf', 'font/font2.ttf', 'font/font3.ttf', 'font/font4.ttf'); // zet alle beschikbare fonts in een array
$aCode = str_split ($code); // zet alle karakters apart in een array
for ($i = 0; $i < count ($aCode); $i++) // een for-lus maken voor het aantal karakters dat de $aCode array bevat
{
$fontcolor = imagecolorallocate ($image, // kleurencombinatie maken voor de image variabel ($image)
rand (190, 255), // rood,
rand (190, 255), // groen,
rand (190, 255)); // blauw, deze geven de nieuwe kleur per karakter
if (count ($aCode) == 4) // de volgende locaties (x-as) aanmaken voor een code van 4 karakters lang
{
$pos[0] = rand (5, 5); // locatie aanmaken (x-as) voor de eerste karakter
$pos[1] = rand (30, 30); // locatie aanmaken (x-as) voor de tweede karakter
$pos[2] = rand (60, 60); // locatie aanmaken (x-as) voor de derde karakter
$pos[3] = rand (80, 80); // locatie aanmaken (x-as) voor de vierde karakter
}
imagettftext ($image, // image voorbereiden voor de image variabel ($image)
rand (14, 16), // fontgrootte, willekeurig getal laten kiezen tussen de 13 en 19
rand (-30, 30), // draaihoek, willekeur getal laten kiezen tussen de -31 en de 31
$pos[$i], // karakter positie breedte toewijzen, hebben we al voorbereid ($pos[])
rand (40, 15), // karakter positie hoogte, kiezen tussen de 51 en de 19
$fontcolor, // fontkleur toewijzen, hebben we al voorbereid ($fontcolor)
$aFonts[rand (0, 3)], // font, willekeurig font toewijzen uit de array ($aFonts)
$aCode[$i]); // code toewijzen, op volgorde van de array
}
imagepng ($image, 'captcha.png'); // de .png image aanmaken als captcha.png
imagedestroy ($image); // de handel afronden, en klaar!
}
met de functie is opzich niets mis, want hij doet het dus wel als je met F5 refresht.(ook als ik hem laat refreshen met de header functie werkt het niet. en ja, die refresh werkt ook gewoon goed.)
Ik hoop dat ik het goed genoeg heb uitgelegd,
kan iemand mij hier mee helpen?
Martin
p.s. ik werk met frames, in de linker frame klik je op de link en dan komt de pagina in het middelste frame terecht, waar dus de captcha is.
Elke keer is het zeg maar voor de browser een ander plaatje, en zal het dus binnenhalen :)
thnx :)