2017-12-12 2 views
0

Ich habe mehrere Formulare auf einer Seite, die seltsam oder zufällig zu validieren scheinen.Securimage Captcha - mehrere Formulare validieren nach dem Zufallsprinzip

  1. Wenn ich den ersten Code richtig eingeben, wird das gleiche Formular jedes Mal korrekt validiert, bis der Code falsch eingegeben wird. Nachdem diese Validierung immer fehlschlägt, bis ich auf das Bild klicke, um es neu zu laden, fängt alles gut an.
  2. Unabhängig von der ersten verarbeiteten Form, schlägt jedes andere Formular die Validierung fehl, bis das Bild zum Neuladen angeklickt wird. Dann beginnt es wie in Punkt 1 zu passieren. Aber alle anderen Formen werden versagen.

Namespaces scheinen nicht zu helfen.

Dies ist view.php:

$captcha->setNamespace($bUID); 
$captcha->display(); 
echo $form->text('code'.$bUID, $code); 

Dies ist controller.php:

$captcha->setNamespace($_POST['buid']); 
if (!$captcha->check('code')) { 
    array_push($this->form_errors, $this->error_code); 
} 

Die $ Buid ist eine einzigartige Form Blocknummer, dh jedes Formularfeld einzigartig ist.

Obwohl jedes Formular eindeutig ist, wird das Securimage Bild eins für alle erstellt, nicht für jedes Formular. Und die Namespaces helfen aus irgendeinem Grund nicht.

Gibt es eine Möglichkeit, ein Captcha-Bild mit einem eindeutigen Code und Pfad für jedes eindeutige Formular zu erstellen? Oder verwende ich die Namespaces nicht korrekt?

Vielen Dank.

+0

Die Secure wird die richtige Antwort in einer Sitzungsvariablen oder Cookies falls aktiviert speichern. Jeder Aufruf des Generate ein neues Captcha überschreibt dies – pokeybit

+0

Kann setNamespace nur numerisch sein? – pokeybit

+0

Ich versuchte $ captcha-> setNamespace ((string) $ BUID); - kein Unterschied. Die Beispiele, die ich gesehen habe, verwenden die Sitzung oder Cookies nicht. Gibt es eine Möglichkeit, dass eindeutige Instanzen des Bildes für jeden Block mit eindeutigen Pfaden erzeugt werden können? – linuxoid

Antwort

0

Verwenden Sie auch image_id option neben namespace.

Hier Code, die ich für multicaptcha Zwecke verwendet:

require_once 'inc/securimage/securimage.php'; 

define('SECURIMAGE_OPTIONS', array(
    'securimage_path' => 'inc/securimage', 
    'input_text' => 'Введите проверочный код', 
    'show_audio_button' => false 
)); 

function display_captcha($identity){ 
    echo Securimage::getCaptchaHtml(
     array_merge(
      SECURIMAGE_OPTIONS, 
      array("image_id"=>$identity, 
       "namespace"=>$identity, 
      ) 
     ) 
    ); 

    $input_attrs = array(); 
    $input_attrs['type'] = 'hidden'; 
    $input_attrs['name'] = 'namespace'; 
    $input_attrs['id'] = 'namespace'; 
    $input_attrs['value'] = $identity; 
    //with captcha component I add tag <input type="hidden" name="namespace" ... /> for using in validation script 
    $input_attr = ''; 
    foreach($input_attrs as $name => $val) { 
     $input_attr .= sprintf('%s="%s" ', $name, htmlspecialchars($val)); 
    } 
    echo(sprintf('<input %s/>', $input_attr)); 
} 

/* 
* Now you can use multiple captchas in forms: with names: captcha1 
* <?php display_captcha("captcha1"); ?> 
* 
* And valudation code: 
* $image = new Securimage(); 
* if(isset($_POST['namespace'])){ 
* $namespace = $_POST['namespace']; 
* $image->setNamespace($namespace); 
* } 
* if (!$image->check($_POST['captcha_code'])) { 
* .... 
* } 
* */ 
Verwandte Themen