login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Probleem met Captcha nav tutorial

Offline Raenius - 10/11/2006 10:44 (laatste wijziging 10/11/2006 10:58)
Avatar van RaeniusNieuw lid Allen,

Mijn eerste bericht hier, deze gaat gelijk over een tutorial die op deze site geplaatst is.

Ik heb een website waar mensen comments in kunnen plaatsen, eerst had deze een popup achtige structuur. Ik had nooit last van spam dus dat was mooi meegenomen maar aan de andere kant was het voor de gebruiker vervelend om met popus te worden geconfronteerd.

Nu heb ik dit omgebouwd in een wat conventionelere methode maar je raad het al ik wordt volgespamd. Zo'n 100 berichten per dag.

Graag had ik dan een captcha ingebouwd om het meeste (zo niet alles) te voorkomen. Ik was dan ook blij verrast met de tutorial die hier op de site staat door NRZonline.

Helaas krijg ik het geheel niet werkend.

Ik heb de code iets aangepast omdat bij mij nog PHP 4 draait (str_split wordt dan niet herkend) en in een functie geplaatst. Te zien hier: http://www.plaatscode.be/3075/

Op mijn index.php include ik mijn functions (waaronder dus de cap_gen()) en include ik ook een main.php waar mijn form in staat.

Ik krijg geen foutmeldingen maar ik krijg ook geen plaatje te zien. (als ik overigens het probeer zonder include (met de juiste header) dan werkt het wel)

Heeft iemand een idee wat ik hier mis?

Mvg,

Raenius

11 antwoorden

Gesponsorde links
Offline pj_muller00 - 10/11/2006 12:17
Avatar van pj_muller00 PHP interesse Hoe laad je het ?

Je kan het enkel op deze manier doen denk ik

  1. <img src='generate_pic.php' alt=''>


en dus niet

  1. <?php inclide('generate_pic.php'); ?>

Want dan heb je 2 verschillende headers in één pagina.

Normaalgezien zou je dan zelfs van dat chinese tekens gedoe moeten zien  

Pj  
Offline Dark_Paul - 10/11/2006 12:52
Avatar van Dark_Paul PHP ver gevorderde imagepng ($image, 'captcha.png'); // de .png image aanmaken als captcha.png
Die regel zegt:
Maak het plaatje, $image, en noem het plaatje captcha.png.
Dus je moet je plaatje op deze manier invoegen:
<img src="captcha.png" alt="" />
En voordat je dat plaatje aanroept (bijvoorbeeld bovenaan de form) de functie cap_gen() aanroepen, zodat het plaatje wordt gemaakt.
Offline Thomas - 10/11/2006 12:58
Avatar van Thomas Moderator Waarom zou je het op die manier willen doen?

Stel dat meerdere mensen tegelijkertijd deze CAPTCHA-functionaliteit aanroepen?

Gebruiker 1 roept een pagina aan waar van deze functionaliteit gebruik wordt gemaakt. Plaatje A wordt gegenereerd (met een tekst).
Tegelijkertijd roept een andere gebruiker deze zelfde pagina aan, en genereert plaatje B (plaatje wordt overschreven?).
Vervolgens laadt gebruiker 1 met enige vertraging (om wat voor reden dan ook) het plaatje... Dan krijgt ie plaatje B te zien...
Offline Raenius - 10/11/2006 13:18
Avatar van Raenius Nieuw lid Ik laat het zo zien in mijn form (hiervoor wordt dus cap_gen() aangeroepen):
  1. echo "<img src=\"captcha.png\" alt=\"captcha\">";


Zou ik dan niet het 'fysieke' .png file moeten zien in mijn dir?

Want die zie ik namelijk ook niet...
Offline Dark_Paul - 10/11/2006 13:29
Avatar van Dark_Paul PHP ver gevorderde Die zou je dus ook moeten zien.
Maar wat FangorN zegt, het is inderdaad beter om je captcha-maken in een apart bestand te zetten (dan kan je ook een header invoegen) en linken naar je plaatje met
<img src="maakcaptcha.php" alt="" />
@FangorN: ik heb er ook al aan gedacht om dat te doen voor mijn eigen pagina, misschien helpt dat ook tegen het feit dat sommige mensen de captcha in de cache van IE komt, wat voor problemen (lees verwarring) kan zorgen.
Offline Grayen - 10/11/2006 13:40
Avatar van Grayen PHP ver gevorderde omdat je captcha in de cache komt gebruik ik dit in mijn functie:

  1. <?php
  2. // Stuurt headers naar de pagina, zodat de afbeelding niet word gecached
  3. header('Expires: Mon, 24 Jul 1997 04:00:00 GMT');
  4. header('Last-Modified: '.gmdate('D, d M Y H:i:s').'GMT');
  5. header('Cache-Control: no-chache, must-revalidate');
  6. header('Pragma: no-cache');
  7. ?>


hierdoor word hij niet gecached en heb je het probleem van dat de sessie ongelijk is aan de afbeelding die de bezoeker ziet opgelost ;)
Offline Raenius - 10/11/2006 13:51 (laatste wijziging 10/11/2006 14:05)
Avatar van Raenius Nieuw lid Op dit moment heb ik het (tijdelijk) opgelost door een apart cap.php bestand te maken die dan in de <IMG SRC> wordt gebruikt.

Maar heeft iemand enig idee waarom dit dan niet werkt? Waarom wordt de .png niet aangemaakt?

En op de manier zoals ik het nu heb, een cap.php die wordt aangeroepen. Hoe kan ik dan (zonder sessions) de code bekend krijgen voor validatie?
Offline Thomas - 10/11/2006 14:43
Avatar van Thomas Moderator (simpele) CAPTCHA die ik gebruik:

  1. <?php
  2.  
  3. $chars = array_merge(range("a", "z"), range("A", "Z"), range(0, 9));
  4. $random_text = "";
  5.  
  6. for($i=0; $i < 5; $i++)
  7. {
  8. $random_text .= $chars[rand(0, sizeof($chars)-1)];
  9. }
  10.  
  11. $_SESSION['captcha'] = $random_text;
  12.  
  13. $src = imagecreatetruecolor(60, 20);
  14.  
  15. $white = imagecolorallocate($src, 147, 165, 144);
  16. $black = imagecolorallocate($src, 0, 0, 0);
  17.  
  18. // die($random_text);
  19.  
  20. imagefill($src, 0, 0, $white);
  21. imagettftext($src, 12, 0, 5, 14, $black, "templates/COUR.TTF", $random_text);
  22.  
  23. header("Content-Type: image/jpeg");
  24. imagejpeg($src, "", 100);
  25. imagedestroy($src); // cleanup
  26. exit(); // end
  27. ?>


Je kunt gewoon gebruik maken van een sessie in je CAPTCHA-script, mits je je sessie start...
Offline Raenius - 10/11/2006 15:16
Avatar van Raenius Nieuw lid Dat is inderdaad met sessies...maar ik wil zonder sessies indien mogelijk natuurlijk...
Offline Thomas - 10/11/2006 15:27 (laatste wijziging 10/11/2006 15:27)
Avatar van Thomas Moderator Je moet op een of andere manier informatie over het plaatje overdragen.
HTTP is een "stateless protocol" - d.w.z. het onthoudt geen informatie bij overgang van pagina A naar pagina B.

Hiervoor zijn cookies / sessies / etc in het leven geroepen.

Je zult op enigerlei wijze (cookie, sessie, ...) de informatie over moeten brengen.
Offline Dark_Paul - 10/11/2006 16:08
Avatar van Dark_Paul PHP ver gevorderde En daarvoor zijn sessies in dit geval de meest veilige, aangezien de bezoeker de sessies niet uit kan lezen/kan veranderen.
Stel dat je de code in een cookie zou zetten, de bot leest de cookie uit, weg captcha-beveiliging.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.272s