Ergebnis 1 bis 8 von 8

Thema: Captcha Problem: Validierung funktioniert nicht

  1. #1
    Neuer Benutzer
    Registriert seit
    11.07.2012
    Beiträge
    11
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Frage [Gelöst] Captcha Problem: Validierung funktioniert nicht

    Hey,

    ich wollte bei einem Formular eine Captcha Abfrage einbauen, kann diese leider nicht validieren, bzw. weiß nicht wie es richtig geht. Auch das Googeln hat mir nicht geholfen.

    Erstmal meine Form Klasse:

    PHP-Code:
    class Global_ForgetPasswordForm extends Zend_Form{    

    function 
    init(){        
    $this->setAction('')->setMethod('post');                
    //Passwort ändern        
    $email = new Zend_Form_Element_Text('email', array('label' => 'E-Mail''required' => true ));                
    $captcha $this->createElement('captcha''captcha',                
    array(
    'required' => true,                       
     
    'captcha' => array('captcha' => 'Image',                                
         
    'font' => '../public/fonts/old_printing_press.ttf',                                
    'fontSize' => '24',                                
    'required' => true,                                
    'gcFreq' => 5,                               
     
    'background' => 0,                                
    'helper' => null,                                
    'wordLen' => 5,                                
    'height' => '50',                                
    'width' => '150',                               
     
    'imgDir' => '../public/image/captcha/',                               
    'imgUrl' => Zend_Controller_Front::getInstance()->getBaseUrl().'/image/captcha/',                                
    'dotNoiseLevel' => 50,                                
    'lineNoiseLevel' => 5)));  
                  
    $captcha->setLabel('Bitte tragen Sie die Buchstaben zur Validierung ein');                
    $submit = new Zend_Form_Element_Submit('submit', array('label' => 'Passwort zurücksetzen'));        
    $this->addElements(array($email$captcha$submit));    
    }

    Diese wird in der Index aufgerufen und der View übergeben (und nach einem Post abgefragt):

    PHP-Code:
    /** * Passwort vergessen */
    public function forgetpasswordAction(){   

    $forget_password_form = new Global_ForgetPasswordForm();    
        
    if(
    $this->_request->isPost()){        
    $post $this->_request->getPost();        
    if(
    $forget_password_form->isValid($post)){           
     echo 
    "Ist korrekt";        
    }else{            
    echo 
    "ist falsch";        
    }            
    }    

    $this->view->forget_password_form $forget_password_form;


    Das Problem ist, dass die Form immer falsch ist. Also nie korrekt. Auffällig ist auch, dass mein Captcha, trotz Zuordnung von 5 Zeichen, immer verschieden Lang ist. Mal ein Buchstabe, mal zwei, dann drei usw. Ist das normal?

    Kann man ein Captcha irgnedwie Überprüfen? Gibt es eine Bestimmte Funktion oder muss die Form einfach korrekt sein ("$forget_password_form->isValid($post)")?

    Ich hoffe ihr könnt mir helfen. Finde gerade echt keine Lösung dazu...

    Gruß

    TKing
    Geändert von TKing (24.08.2012 um 11:32 Uhr)

  2. #2
    Erfahrener Benutzer
    Registriert seit
    08.08.2011
    Beiträge
    466
    Thanks
    6
    Thanked 34 Times in 33 Posts

    Standard

    Mal in Zend_Form::getMessages() geguckt? Ich vermute mal, dass der Captcha-String zum vergleichen nicht passt.

  3. #3
    Erfahrener Benutzer
    Registriert seit
    10.02.2011
    Beiträge
    108
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Auch wenn es Dir nicht weiter hilft. Wenn ich Dein Captcha Element bei mir einbinde bekomme ich ein ( isValid === true ).
    Funktioniert einwandfrei.

    Ich kann hier auch nicht fehlerhaftes entdecken.

    Versuche mal, wie Crash schon fragt die Error Messages aus der Form, bzw. dem Element zu holen!
    Aus dem Bauch heraus schließe ich mich seiner Meinung an, da mich dieses Problem auch schon zum Wahnsinn getrieben hat.

    Zeigt Dir die Form denn keinen Eingabefehler vom Element an ?
    "the two value doesn't match", oder so ähnlich ?

  4. #4
    Neuer Benutzer
    Registriert seit
    11.07.2012
    Beiträge
    11
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Meine frage wäre jetzt noch, welche Message dafür genommen wird?

    Ich habe die Abfrage wie folgt ergänzt:

    PHP-Code:
    if($this->_request->isPost()){
      
    var_dump($forget_password_form->captcha->isValid($post['captcha']));
    die();

    Es kommt trotzdem immer false raus. Ist es denn richtig, dass meine Captchas nicht immer fünf Zeichen beinhalten?

  5. #5
    Neuer Benutzer
    Registriert seit
    11.07.2012
    Beiträge
    11
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Okay, es liegt wohl nicht an der Abfrage, sondern am Captcha selber. Ich habe gewartet, bis ein Captcha 5 Zeichen (wie bei dem Captcha Element angegeben) hatte und dann zeigt er bei richtiger Eingabe auch true an. Woran liegt das denn, dass meine Captchas immer unterschiedlich lange "Wörter" haben? Meine gewählte Schriftart?

  6. #6
    Erfahrener Benutzer
    Registriert seit
    10.02.2011
    Beiträge
    108
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    oooops...
    Hätte ich der Fairness wegen wohl sagen sollen.
    Ich habe verdana.TTF und einen anderen Image pfad angegeben.

    Woran liegt das denn, dass meine Captchas immer unterschiedlich lange "Wörter" haben? Meine gewählte Schriftart?
    Probier es aus. Bedenke nur das wenn du dem Captcha Element eine Wortlänge von 5 vorgibst, sollten auch 5 Digits gesendet werden.

  7. #7
    Neuer Benutzer
    Registriert seit
    11.07.2012
    Beiträge
    11
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    So, ich habe das Problem gelöst. Es lag wirklich an der Schriftart: Hier nochmal meine vollständige Lösung:

    Mein Klasse, in der ich die Form erstelle:
    PHP-Code:
    class Global_ForgetPasswordForm extends Zend_Form{       

    function 
    init(){
    $this->setAction('')->setMethod('post');                
    //Passwort ändern        
    $email = new Zend_Form_Element_Text('email', array('label' => 'E-Mail''required' => true ));                
    $captcha $this->createElement('captcha''captcha',                
    array(
    'required' => true,                        
    'captcha' => 
    array(
    'captcha' => 'Image',                                
    'font' => '../public/fonts/arial.ttf',    //Hier hatte ich eine Andere Schriftart ohne Zahlen und somit kam ein Fehler                            
    'fontSize' => '24',                                
    'required' => true,                                
    'gcFreq' => 5,                                
    'background' => 0,                                
    'helper' => null,                                
    'wordLen' => 5,                                
    'height' => '50',                                
    'width' => '150',                                
    'imgDir' => '../public/image/captcha/',                                
    'imgUrl' => Zend_Controller_Front::getInstance()->getBaseUrl().'/image/captcha/',                               
     
    'dotNoiseLevel' => 50,                                
    'lineNoiseLevel' => 5)));                

    $captcha->setLabel('Bitte tragen Sie die Zeichen zur Validierung ein');                
    $submit = new Zend_Form_Element_Submit('submit', array('label' => 'Passwort zurücksetzen'));        
    $this->addElements(array($email$captcha$submit));    
    }

    Aufruf in einer Index Action:

    PHP-Code:
    ....
    /**     
     * Passwort vergessen     
     */

    public function forgetpasswordAction(){       

    $forget_password_form = new Global_ForgetPasswordForm();
                    
    $post $this->_request->getPost();                

    if(
    $this->_request->isPost()){

    $forget_password_form->captcha->isValid($this->_request->getPost());//Überprüfung des Captchas          
    //Hier kann die Validierung für die Form ($forget_password_form) noch in der Klasse mit den Zend Validatoren geregelt werden
    $captcha_error $forget_password_form->getMessages(); 
                           
    if(!empty(
    $captcha_error ["captcha"] ["badCaptcha"])){
    //Diese Fehlermeldung kann man noch anders regeln, ist nur zur Veranschaulichung gewählt worden                
    $this->view->registerformErrorMessages['captcha'] = "Das eingegebene Captcha ist nicht korrekt. Bitte geben Sie es nochmal ein.";            
    }

    if(empty(
    $this->view->registerformErrorMessages)){               
    //Hier kann die Aktion ausgeführt werden, wenn alles richtig ist.            
    }else{                
    $forget_password_form->populate($post);            
    }
    }
    $this->view->forget_password_form $forget_password_form;    
    }
    .... 

    Und hier nochmal die View:

    PHP-Code:
    <?php
    if(!empty($this->registerformErrorMessages)){    
    foreach(
    $this->registerformErrorMessages AS $error_message){        
    echo 
    $error_message?><br />
    <?php }
    }
    ?>
    <div class="maincontent">        
    <h3>Passwort vergessen</h3>    
    <p>Haben Sie ihr Passwort vergessen, dann können Sie durch die Angabe Ihrer E-Mail Adresse ihr Passwort zurücksetzen.</p>    
    <?php echo $this->forget_password_form?>
    </div>
    Einmal alles, für Leute, die Auch Probleme damit haben.

    Und danke für die Hilfe von euch :-)
    Geändert von TKing (24.08.2012 um 11:44 Uhr)

  8. #8
    Erfahrener Benutzer
    Registriert seit
    08.08.2011
    Beiträge
    466
    Thanks
    6
    Thanked 34 Times in 33 Posts

    Standard

    Ist das die richtige Arial? Dann bräuchte man bestimmt eine Lizenz für die Nutzung

Ähnliche Themen

  1. Decorator Captcha Problem
    Von Dunkelziffer im Forum Formulare
    Antworten: 6
    Letzter Beitrag: 27.12.2010, 10:47
  2. Antworten: 5
    Letzter Beitrag: 11.05.2010, 16:45
  3. Captcha Validiert nicht (Reagiert nicht)
    Von p-perser im Forum Formulare
    Antworten: 2
    Letzter Beitrag: 30.12.2009, 12:26
  4. Zend_Form /Zend Captcha Reload Problem!
    Von saphir2k im Forum Formulare
    Antworten: 7
    Letzter Beitrag: 24.11.2009, 16:07
  5. Captcha-Validierung in Zend_Form nicht ok
    Von echinus im Forum Formulare
    Antworten: 1
    Letzter Beitrag: 02.10.2008, 17:26

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •