PHP Tutorials, PHP lernen, PHP Forum, PHP Community and more ... MyWebsolution.de!

Sidebar

Home News Tutorials Workshops Tipps Artikel Gästebuch Sitemap Pascal Landau

Suche

Members

Forum Login Registrierung

Statistik

Statistikbereich
Jetzt2
Heute183
Gestern250
Gesamt2346571

Captcha Tutorial - Logische Abfragen

Autor Flitze
Klicks 71206
Rating für Captcha Tutorial
  6.4 von 10
Bewertungen41
Stand 20.06.2010
Keywords:
Captchas mit PHP erstellen, Captcha Spamschutz, Captcha Tutorial Image-Funktionen, PHP Captcha-Klasse, Captchas einbinden, Turorial intelligente Captchas, Captcha Beispiel, logik, rechenaufgabe, text

Amazon: PHP 5.3 und MySQL 5.1
Breadcrumb:
Tutorials » Captcha Tutorial » Captcha Tutorial - Logische Abfragen
Seite : 1 2 3 4 5 Bewerten
Article Wizard - deutscher Article Spinner

2. Text oder Rechenaufgabe einfügen

[ADSENSE_LINE]Um unser Captcha mit Leben zu füllen, füge ich jetzt 2 weitere Methoden hinzu, mittels derer wir einen Text oder eine (einfache) Rechenaufgabe in die Grafik einfügen können. Wir ergänzen die Klasse also um folgenden Code:

PHP:
<?php
    
var $fontcolor// Textfarbe 
    
    // setzt die Textfarbe
    
function setFontColor ($r$g$b){
        if(!
$this->checkColorValue($r,$g,$b)){
            
$this->errors[] = "Falscher Farbwert (Textfarbe)!";
            return 
false;
        }
        
$this->fontcolor imagecolorallocate($this->bild,(int)$r,(int)$g,(int)$b);
    }

    
// erstellt einen Text in der Grafik
    
function createText($text){
        if(
trim($text) == ''){
            
$this->errors[] = "Kein Text eingegeben!";
            return 
false;
        }
        if(!
is_Int($this->fontcolor)){
            
$this->errors[] = "Schriftfarbe ist nicht initialisiert!";
            return 
false;
        }
        
// Schrift einfügen
        // 'padding'
        
$p 10;
        
// Verhältnis zwischen Buchstabenanzahl und Grafikbreite
        
$c round(($this->width-2*$p)/strlen($text));
        
// Für jeden Buchstaben neue Werte ermitteln
        
for($i=0$i<strlen($text); $i++){
            
// Schriftgröße
            
$fontsize $c+rand(0,10);
            
// Schriftwinkel
            
$winkel = -20+rand(0,50);
            
// x-Position in der Grafik, 
            // wird mir jedem Buchstaben größer 
            
$x $p+$i*$c;
            
// y-Position in der Grafik, 
            // in Abhängigkeit der Schriftgröße, des Paddings, und der Bildhöhe
            
$y $p+$fontsize+rand(0,$this->height-$p-$fontsize);
            
// Buchstaben in die Grafik einfügen
            
ImageTTFText ($this->bild,$fontsize,$winkel,$x,$y,$this->fontcolor,'fonts/arial.ttf',$text{$i});
        }
    }

    
// erstellt eine Gleichung in der Grafik
    
function createArithmetic($n){
        if(!
is_Int($n)){
            
$this->errors[] = "Ungültige Zahl eingegeben!";
            return 
false;
        }
        if(!
is_Int($this->fontcolor)){
            
$this->errors[] = "Schriftfarbe ist nicht initialisiert!";
            return 
false;
        }
        
// Zufallszahl ermitteln
        
$zahl_2 rand(1,$n-1);
        
// Rechenoperation und 2. Zahl ermitteln
        
if(rand(0,1)){
            
$zeichen "+";
            
$zahl_1 $n-$zahl_2;
        }
        else{
            
$zeichen "-";
            
$zahl_1 $n+$zahl_2;
        }
        
// Rechenaufgabe als String zusammenfügen
        
$text $zahl_1.$zeichen.$zahl_2;
        
$p 10;
        
$c round(($this->width-2*$p)/strlen($text));
        
// in einheitlicher Größe, Winkel und y-Position 
        // in die Grafik einfügen
        
for($i=0$i<strlen($text); $i++){
            
$fontsize $c+10;
            
$winkel 0;
            
$x $p+$i*$c;
            
$y $this->height/2+$fontsize/2;
            
ImageTTFText ($this->bild,$fontsize,$winkel,$x,$y,$this->fontcolor,'fonts/arial.ttf',$text{$i});
        }
    }
?>


Zuerst muss mit setFontColor() eine Schriftfarbe gesetzt werden. Danach kann mit createText() ein Text und mit createArithmetic() eine Rechenaufgabe in das Bild eingefügt werden. Dazu wird die Funktion ImageTTFText() verwendet, deren Parameter im obigen Beispiel kommentiert sind. Bei createText() wird dabei jeder einzelne Buchstabe durch Zufallswerte etwas verfälscht (Winkel, Größe) um einem Bot das Erkennen zu erschweren.

createArithmetic() erwartet eine ganze Zahl als Parameter, aufgrund derer eine Rechenaufgabe konstruiert wird, die den Parameter als Lösung hat.

Hier einige Beispiele:
PHP:
<?php
    
// Reiner Text
    
$myCaptcha = new Captcha(200,100);
    
$myCaptcha->setBGColor(255,0,0);
    
$myCaptcha->setFontColor(0,0,0);
    
$myCaptcha->createText('Hallo');
    
$myCaptcha->createCaptcha();
    
// Reine Rechenaufgabe
    
$myCaptcha = new Captcha(200,100);
    
$myCaptcha->setBGColor(255,0,0);
    
$myCaptcha->setFontColor(0,0,0);
    
$myCaptcha->createArithmetic(9);
    
$myCaptcha->createCaptcha();
    
// Text im Hintergrund der Aufgabe
    
$myCaptcha = new Captcha(200,100);
    
$myCaptcha->setBGColor(255,0,0);
    
$myCaptcha->setFontColor(50,50,50);
    
$myCaptcha->createText('123456');
    
$myCaptcha->setFontColor(0,0,0);
    
$myCaptcha->createArithmetic(9);
    
$myCaptcha->createCaptcha();
?>


Zurück zur vorigen Seite:
Captcha Tutorial - Captcha-Klasse
Weiter zur nächsten Seite:
Captcha Tutorial - Störelemente

»» Zurück zum Menu

Suchmaschinenoptimierung

Suchmaschinenoptimierung (SEO - Search Engine Optimization)

Ranking

Tutorials (13)

8.6
8.4
8

Workshops (3)

8.8
8.7
7.6

Tipps (12)

7.2
6.7
6.5

Artikel (32)

8.4
8
7.2

RSS Feeds

Full Feed Tutorials Workshops Tipps Artikel

Twitter

Follow me on Twitter

Partner & Links


Valid HTML 4.01 Transitional
Valid CSS
nach oben

Diese Seiten unterstützen MyWebsolution:
 
© MyWebsolution.de
2006-2024