我在页面上有多个表单,似乎有些奇怪或随机地验证。
命名空间似乎没有帮助。
这是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图像也是为所有表单创建的,而不是每个表单都创建一个。命名空间由于某种原因没有帮助。
有没有办法为每个独特的表单创建一个具有唯一代码和路径的验证码图像?或者我没有正确使用命名空间?
谢谢。
答案 0 :(得分:0)
除了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'])) {
* ....
* }
* */