[HowTo]Rechenaufgaben-Captcha mit PHP

04/15/2010 23:43 [GA]FreeZoNe#1
Heute wollte ich euch mall zeigen wie einfach ihr einen Rechenaufgaben captscher hinbekommt also legen wir mall los :D

Bei manchen Captchas gibt es ja das Problem, dass Textbrowser die Grafiken nicht anzeigen. Deswegen muss aber nicht auf ein Captcha verzichten. Es gibt die Möglichkeit via PHP eine Rechenaufgabe ausgegen zu lassen und der User dann das richtige Ergebnis ins Captchafeld eintragen muss. Es werden also keine Grafiken verwendet und ist somit auch für Textbrowserfreundliche HPs geeignet.

1. Die Rechenaufgabe
Wir definieren nun die beiden Zahlen der Rechenaufgabe die dem User gestellt wird. Man könnte auch mehrere Zahlen machen, aber bedenkt: Die Aufgaben müssen auch auf die Schnelle lösbar sein und deswegen mache das Beispiel hier nur mit einer Zahl zwischen 1 und 5.

PHP Code:
<?php  
$Zahl_1 
intval(rand(15));  
$Zahl_2 intval(rand(15));  
?>
2. Einbau ins Formular

Vor dem Absenden Button wird eine Zeile eingefügt. Links schreiben wird die Rechenaufgabe rein:

PHP Code:
Wieviel ist <?php echo $Zahl_1?> plus <?php echo $Zahl_2?>?
Rechts daneben legen wir zwei Formularfelder an. Das erste stellt die eigentlich Rechnung dar. Das ganze soll nicht sichbar sein, deswegen wird als type hidden eingegeben. Die Rechnung selbst wird mit md5 verschlüsselt damit die Sicherheit noch weiter steigt und nicht einfach ausgelesen werden kann.

PHP Code:
<input name="number" type="hidden" id="number"  value="<?php echo md5(( $Zahl_1 $Zahl_2 )); ?>"/>
Daneben erstellen wir nun das Eingabefeld wo das Ergebnis eingetragen wird. Die beiden ID´s der Felder finden erst bei der Überprüfung eine Bedeutung, sind aber wichtig!

PHP Code:
<input name="arithmetic" type="text" id="arithmetic" /> 
Das ganze könnte man noch ein bisschen aufmotzen und einen Text reinschreiben der beim Klicken wieder verschwindet:

PHP Code:
<input name="arithmetic" type="text" id="arithmetic"  
style="width:250px" onfocus="if(this.value=='Das Ergebnis bitte hier  
hinein...')this.value=''" 
onblur="if(this.value=='')this.value='Das  
Ergebnis bitte hier hinein...'" 
value="Das Ergebnis bitte hier  
hinein..."
/> 
3. Überprüfung ob die Aufgabe richtig gelöst wurde

Der Code überprüft nun ob das Ergebnis stimmt und wirft bei einem falschen Ergebnis einen Fehlertext aus. Wenn das Ergebnis richtig eingetragen wurde, läuft das weitere Script ganz normal weiter.

PHP Code:
<?php  
if($_GET['action'] == "send")  
{  
if(
$_POST['number'] != md5($_POST['arithmetic']))  
{  
$err_text .="Die Rechenaufgabe wurde falsch gelöst!";  
}  
?>
Ich wünsch euch noch viel Spaß mit dem Captscher
wenn ihr noch Fragen habt PN an mich :)
04/15/2010 23:46 Nikiii#2
dachte das wär schwieriger
04/15/2010 23:49 [GA]FreeZoNe#3
^^ viele denken das es schwer ist aber eigentlich ist das sehr leicht
04/16/2010 00:47 ClOuDy.#4
[Only registered and activated users can see links. Click Here To Register...]

das dürfte "dein" script sein :/
04/16/2010 00:51 [GA]FreeZoNe#5
und? was soll ich damit so genau bitte
wenn du denkst ich habe das aus dem Forum dann tut mir leid da liegst ganz falsch :)
04/20/2010 16:41 ClOuDy.#6
achso purer zufall das du das selbe script wie jemand anderes schreibst...auch rein zufällig die selben zahlen benutzt^^ mit fremden federn schmücken is #ulow
04/20/2010 17:03 antrix99#7
ist ja nicht das erste mal das er einfach sachen kopiert evtl etwas umschreibt und der rest total gleich ist und dann sowas auch noch postet