У меня есть несколько форм на странице, которые, кажется, проверяют странно или случайно.
Пространства имен, похоже, не помогают.
Это view.php:
$captcha->setNamespace($bUID);
$captcha->display();
echo $form->text('code'.$bUID, $code);
Это controller.php:
$captcha->setNamespace($_POST['buid']);
if (!$captcha->check('code')) {
array_push($this->form_errors, $this->error_code);
}
$ BUID — это уникальный номер блока формы, то есть каждое поле формы уникально.
Похоже, даже если каждая форма уникальна, изображение Securimage создается один для всех, а не как один для каждой формы. И пространства имен по какой-то причине не помогают.
Есть ли способ создать изображение капчи с уникальным кодом и путем для каждой уникальной формы? Или я не правильно использую пространства имен?
Спасибо.
Попробуйте использовать также image_id
вариант помимо namespace
,
Вот код, который я использую для целей мультикапчи:
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'])) {
* ....
* }
* */
Других решений пока нет …