Ist sicherlich hilfreich für Anfänger, welche diese Funktionen mal in einer Anwendung sehen wollen, wirklich einbauen würde ich dieses Captcha nicht.
Gründe:
- Nicht jeder ist fähig, zweistellige oder sogar dreistellige Zahlen im Kopf zu addieren. Es gibt einige die die Seite vorher verlassen werden.
- Aus dem Standpunkt, dass Captchas sowieso nicht unbedingt ideal sind (Hinsichtlich der Problem mit z.B. Screenreadern) verschärft dieses Captcha noch zusätzlich diese Problematik.
Was du hingegen unbedingt noch korrigieren solltest:
- Die Funktion generate_gleichung ist Overflow. Ein einfaches rand(10,999) hätte gereicht. Ich vermute, du willst keine 0 einsetzen, weil du dann nicht kontrollieren kannst, ob die 0 bereits an erster stelle kommt, und dir somit eine Zahl kleiner der Anzahl stellen liefert, die du möchtest. Dieses Problem hast du mit rand(10,999) nicht

.
- Den Content-type-Header solltest du bei der Ausgabe des Bildes mitliefern
- Bleib einheitlich mit der Benennung von Variablen und Funktionen. Entweder englisch, oder deutsch, aber sowas wie: generate_gleichung ist nicht schön

.
- Der Header "Location" erwartet eine absolute URI, inkl. Schema. Deine angabe ist daher nicht gültig und es ist nicht definiert, was damit passiert (Auch wenn einige Clients dies dennoch interpretieren).
-
PHP-Code:
<?php echo $_SERVER['PHP_SELF'] ?>
sollte nicht als action-Attrubut verwendet werden, da es empfindlich für XSS-Attacken ist.
Besser wäre:
PHP-Code:
<?php echo htmlentities($_SERVER['SCRIPT_NAME']); ?>
Oder ein leeres Action-Attribut.