# Gepost op 09-11-2009 20:01
Bewerkt door superkluns op 11-08-2010 11:54
Bewerkt door superkluns op 11-08-2010 11:54
Je kent het vast wel: je wilt bv. een nieuwe mail aanmaken en dan moet je zo'n code overtypen van een plaatje. Dat is captcha en dat kun je zelf ook maken. Ik ga hier een poging doen om uit te leggen hoe. Enige voorkennis van html en php is wel vereist.
Een voorbeeld is te vinden op: http://moehahahaha.netau.net/voorbeeld/captcha/. Om de brondcode te zien, moet je "?bron" achter de URL zetten.
Om het plaatje met de random code te maken, maken we het bestand 'captcha.php' met daarin:
- er wordt een random, 4 tekens lange code gegenereerd.
- deze code wordt (gecodeerd) in een sessie-variabele gezet EN omgezet in een plaatje
- tenslotte wordt het plaatje naar de browser verzonden en een stukje code die ervoor zorgt dat het plaatje niet in de cache terecht komt.
captcha.php
Zoals je misschien al gezien hebt, wordt in deze code gebruik gemaakt van het bestand ITCBLKAD.TTF. Zorg ervoor dat dit bestand in dezelfde map staat als captcha.php.
Download: http://moehahahaha.netau.net/voorbeeld/captcha/ITCBLKAD.TTF
Stel dat je de captcha wilt gebruiken bij een inlog-formulier, dan zou die er als volgt uit zien:
captcha.php is dus gewoon een plaatje. Je moet dit dus niet includen ofso, gewoon als src opgeven van de img-tag.
En voor de mensen die het niet weten: De action in regel 1 houd in dat de huidige pagina als action wordt genomen. Je kunt hier natuurlijk ook een andere pagina voor kiezen.
Het kan natuurlijk voorkomen dat je net dat ene plaatje krijgt waar je ff niet weet wat er nou staat. Dan is het best handig om het plaatje te vernieuwen. Dat kan met deze javascript-functie:
Zet deze code in de head van je pagina. Voor de beginnelingen onder ons:
plak deze code in de head:
Let er wel op dat de img-tag met het captcha-plaatje ook de naam 'captcha' heeft!
Deze javascript-functie kan op 2 manieren worden aangeroepen. Met een knop, of met een link.
Een knop
Een link
Er moet natuurlijk wel worden gecontroleerd of de code goed is ingetypt. Om dat te controleren moet je controleren of de ingevoerde waarde overeenkomt met de sessie-variabele die we hebben aangemaakt. Maar aangezien we hem met md5-codering hebben opgeslagen, moeten we ingevoerde waarde ook eerst coderen:
Vergeet niet bovenaan de pagina waar deze code staat 'session_start()' te zetten, anders werkt het niet. En met bovenaan de pagina bedoel ik ook echt helemaal bovenaan, dus de eerste regel van de pagina, nog voor het doc-type enzo.
Als er alleen iets moet gebeuren als de code niet goed is overgetypt, een fout genereren bijvoorbeeld, dan krijg je deze code:
Dit was het begin van de tutorial. Er komen nog updates, dus houd deze pagina in de gaten.
Updates
- De 'ik kan het plaatje niet lezen, verander het plaatje'-knop op 14-11-2009 om 21:20
- De bovengenoemde knop verbeteren om 11-08-2010 om 11:54
geplande updates:
- captcha-beveiliging inbouwen in het mailformulier van vlerknozem
Een voorbeeld is te vinden op: http://moehahahaha.netau.net/voorbeeld/captcha/. Om de brondcode te zien, moet je "?bron" achter de URL zetten.
Inhoudsopgave
Het plaatje
Om het plaatje met de random code te maken, maken we het bestand 'captcha.php' met daarin:
- er wordt een random, 4 tekens lange code gegenereerd.
- deze code wordt (gecodeerd) in een sessie-variabele gezet EN omgezet in een plaatje
- tenslotte wordt het plaatje naar de browser verzonden en een stukje code die ervoor zorgt dat het plaatje niet in de cache terecht komt.
captcha.php
- <?php
- // het random nr. aanmaken en gecodeerd opslaan in php sessie
- $CharList="234578qwertyuipasdfhjklzxcvnm";
- for ($cnt=1;$cnt<=4;$cnt++) {
- }
- // captcha plaatje met nummer maken - afmetingen kun je aanpassen gebruikte font
- // Kleurenbepaling
- // zwarte rechthoek tekenen - afmetingen kun je aanpassen aan verschillende fonts
- // een ttf-bestand toevoegen
- $font = 'ITCBLKAD.TTF';
- // schaduw toevoegen
- // randomnr. toevoegen
- // voorkomen dat afbeelding ge-cached wordt
- // plaatje verzenden naar browser
- ?>
Zoals je misschien al gezien hebt, wordt in deze code gebruik gemaakt van het bestand ITCBLKAD.TTF. Zorg ervoor dat dit bestand in dezelfde map staat als captcha.php.
Download: http://moehahahaha.netau.net/voorbeeld/captcha/ITCBLKAD.TTF
Het formulier
Stel dat je de captcha wilt gebruiken bij een inlog-formulier, dan zou die er als volgt uit zien:
captcha.php is dus gewoon een plaatje. Je moet dit dus niet includen ofso, gewoon als src opgeven van de img-tag.
En voor de mensen die het niet weten: De action in regel 1 houd in dat de huidige pagina als action wordt genomen. Je kunt hier natuurlijk ook een andere pagina voor kiezen.
Het kan natuurlijk voorkomen dat je net dat ene plaatje krijgt waar je ff niet weet wat er nou staat. Dan is het best handig om het plaatje te vernieuwen. Dat kan met deze javascript-functie:
- function change_captcha() {
- var captcha = document.images.captcha
- var src = captcha.src.split('?');
- captcha.src = src[0] + '?' + Math.random();
- }
Zet deze code in de head van je pagina. Voor de beginnelingen onder ons:
plak deze code in de head:
Let er wel op dat de img-tag met het captcha-plaatje ook de naam 'captcha' heeft!
Deze javascript-functie kan op 2 manieren worden aangeroepen. Met een knop, of met een link.
Een knop
- <input type="button" onclick="change_captcha()" value="Ander plaatje" />
Een link
De controle
Er moet natuurlijk wel worden gecontroleerd of de code goed is ingetypt. Om dat te controleren moet je controleren of de ingevoerde waarde overeenkomt met de sessie-variabele die we hebben aangemaakt. Maar aangezien we hem met md5-codering hebben opgeslagen, moeten we ingevoerde waarde ook eerst coderen:
- //code als captcha goed is overgetypt
- } else {
- //code als captcha niet goed is overgetypt
- }
Vergeet niet bovenaan de pagina waar deze code staat 'session_start()' te zetten, anders werkt het niet. En met bovenaan de pagina bedoel ik ook echt helemaal bovenaan, dus de eerste regel van de pagina, nog voor het doc-type enzo.
Als er alleen iets moet gebeuren als de code niet goed is overgetypt, een fout genereren bijvoorbeeld, dan krijg je deze code:
- //fout genereren
- }
Tot slot
Dit was het begin van de tutorial. Er komen nog updates, dus houd deze pagina in de gaten.
Updates
- De 'ik kan het plaatje niet lezen, verander het plaatje'-knop op 14-11-2009 om 21:20
- De bovengenoemde knop verbeteren om 11-08-2010 om 11:54
geplande updates:
- captcha-beveiliging inbouwen in het mailformulier van vlerknozem