DbHelp.ru
Маленький Yii блог
Комментарии
Гость: free casino slot games free slots casino games | zone online casino games | play free vegas casino g...
Гость: casino games free online free casino games online | gsn casino | old vegas slots free casino games
Гость: zone online casino pch slots | online gambling | lady luck online casino
Гость: doubledown casino high 5 casino | slots lounge | tropicana online casino free slots 777
Гость: caesars slots free online casino | no deposit casino | online casinos online casinos



Сервер Ultima Online - Forest Wars (от создателя данного блога)

Математическая капча

Рубрика: Работаем с капчей (captcha)

Оцените эту статью:

Рейтинг: 0.00 (0)
30 апр.. 2009
Опубликовать в Twitter Написать в Facebook Опубликовать в своем блоге livejournal.com

Yii Framework Blog img http://dbhelp.rucapcap Думаю стоит назвать сегодняшний день - Днем Капчи :) В принципе уверен найдется много любителей поизвращяться и превратить капчу на сайте в целое математические выражение типа "сколько будет 2+2". Давайте разберемся как такое сделать на Yii ...

---

Давайте с вами договоримся что вы уже читали статью "Добавляем Captcha на страницу" и понимаете как добавить капчу.

Создадим файлик (потомок CCaptchaAction) который возьмет на себя основную работу. Для этого входим в protected/components/ и создаем MyCCaptchaAction.php:

class MyCCaptchaAction extends CCaptchaAction
{
    public function renderImage($code)
    {
        parent::renderImage($this->showCode($code));
    }
    
    protected function showCode($code) {
        $rand = rand(1, (int)$code-1);
        return (rand(0, 1)) ? (int)$code-$rand."+".(int)$rand : (int)$code+$rand."-".(int)$rand;
    }
    
    protected function generateVerifyCode()
    {
        return rand((int)$this->minLength, (int)$this->maxLength);
    }
}

Если у вас уже есть этот файл (вы создали его когда следовали уроку "Как на Yii капче выводить цифры") тогда просто удалите всё что у него внутри и вставьте тот код который я написал выше.

Теперь давайте разберемся в самом коде:

  1. Я переопределил метод renderImage() наследуемого класса  что бы добавить перед ним обработку $code своей функцией
  2. Создал метод showCode() который принимает в себя числовой код и разбивает его на математическое выражение
  3. Максимально упростил метод generateVerifyCode() что бы он возвращал случайное число от minLength до maxLength

Как мне кажется получилось очень элегантно и красиво. Первый мой подход был - переопределить метод run(), но потом я вспомнил про parent:: и код существенно упростился.

Давайте более подробно разберем мой метод showCode() с комментариями:

    protected function showCode($code) {
        // генерируем число от 1 до $code-1
        // для того чтобы это число потом отнять или приплюсовать к $code
        // поэтому $rand всегда должна быть меньше $code
        $rand = rand(1, (int)$code-1);
        // после этого случайным образом либо отнимаем от $code переменную $rand
        // либо складываем их. Данный тип записи является кратким if
        return (rand(0, 1)) ? (int)$code-$rand."+".(int)$rand : (int)$code+$rand."-".(int)$rand;
    }

Вот и все манипуляции :) Теперь нам просто надо зайти в наш контроллер который отвечает за вывод капчи на экран, найти там метод actions() и заменить:

'class'=>'CCaptchaAction',

на 

'class'=>'MyCCaptchaAction',

Там же мы можем указать какой величины будет генерируемый код. К примеру у себя на блоге я поставил число от двух до двадцати. 

'maxLength'=> 20,
'minLength'=> 2,

Пользуйтесь :)

П.с. посмотреть как выгоялит капча вы можете по адресу http://dbhelp.ru/post/captcha



Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
Другие yii статьи:

  1. Я очень рад сообщить о выходе новой версии Yii Framework 1.1.7. В этой сборке было включено более 90 новых возможностей, ... "Yii PHP framework 1.1.7 is released"

  2. Сегодня проверял гугл на наличие материалов про Yii и наткнулся на неплохую статью про srbac. Появилась на сайте автора она ... "Часть 1 : Yii модуль SRBAC"

  3. Мы постоянно совершенствуем свои приложения позволяя пользователям загружать свои документы, аватарки и др. Хочешь упростить все эти функции? Читай обзор ... "Обзор дополнения CFile"

[adm] zolter

Было сказано: Четверг, 30 Апрель 2009

Поставил себе на комментарии. Вроде прикольно :)

[guest] Игорь

Было сказано: Вторник, 05 Май 2009

Класная капча! Спасибо за создание блога

[adm] zolter

Было сказано: Четверг, 07 Май 2009

Заходите еще)

[guest] Гость

Было сказано: Пятница, 11 Декабрь 2009

заметил глюк у капчи. Ее значение всегда равно шести

[guest] Гость

Было сказано: Пятница, 11 Декабрь 2009

неа :)

[guest] Гость

Было сказано: Воскресенье, 14 Март 2010

а боты с ней дружат?

[adm] zolter

Было сказано: Среда, 24 Март 2010

Еще не встречал :)

[guest] repon

Было сказано: Вторник, 04 Май 2010

а на простой PHP-сайт как ее кинуть?)
без Yii?
не понял :(

[guest] zolter

Было сказано: Среда, 05 Май 2010

Вот почитайте статью как кинуть на обычный php движок:
http://www.dbhelp.ru/yii-captcha-not-in-yii-site/page/

[guest] Kros

Было сказано: Четверг, 06 Май 2010

на 1.1.x капча также как и 3D не работает(, попробуйте поправить пож

[guest] zolter

Было сказано: Четверг, 06 Май 2010

Странно математическая у меня на 1.1 работала. Сегодня попробую и отпишу

[guest] Ra

Было сказано: Суббота, 10 Июль 2010

А Вас не затруднит обьяснить на официальном примере блога, как вставить эту капчу вместо стандартной. Там капча сделана как виджет.

[guest] Ra

Было сказано: Суббота, 10 Июль 2010

Все, понял, всё элементарно, просто туплю.

[guest] zolter

Было сказано: Суббота, 10 Июль 2010

Я тока начал делать) гуд что получилось

[guest] Гость

Было сказано: Воскресенье, 11 Июль 2010

Извиняюсь) просто надо было подольше подумать. Такой вопрос. Сейчас у нас такой сайт www.tvchelny.ru, я его сделал на Joomla. Хочу перевести его на yii, на тестовом домене joomla.tvchelny.ru поднял переделанный официальный блог.
Я сделал 3 узкие колонки, в 1 - новости, во 2 - избранные статьи. Но нужно чтобы новости, если щелкнуть конкретную новость, выводились уже в 1 широкую колонку. Для этого как я понял надо использовать другой layout/main.php (с двумя колонками). В документации написано так:

Макет применяется неявно при вызове метода render(). По умолчанию, в качестве макета используется представление protected/views/layouts/main.php. Это можно изменить путем установки значений CWebApplication::layout или CController::layout.

Подскажите пожалуйста где это прописывать и как?

[guest] Maxx

Было сказано: Воскресенье, 11 Июль 2010

Это прописывать в том экшине который отвечает за вывод новости

[guest] Ra

Было сказано: Воскресенье, 11 Июль 2010

Спасибо за ответ. Это я кажется понимаю, в примере блога в контроллере SiteController выбирается 1 колонка так: public $layout='column1'; а в контроллере PostController выбирается 2 колонки так: public $layout='column2'. Мне непонятно, какой из контроллеров и их action'ов выбрать для главной страницы. По логике, главную должен отображать SiteController, а новость подробно отображает PostController. И можно ли внутри action'а менять $layout ?

[guest] Гость

Было сказано: Воскресенье, 11 Июль 2010

И ещё вопросик: мне тут в голову пришло, а может новости делать как виджет? Они же очень похожи на тот же вывод последних комментариев.

[guest] Ra

Было сказано: Воскресенье, 11 Июль 2010

Ура, кажется, понял. Спасибо вот этому http://www.yiiframework.com/doc/cookbook/28/ . Просто надо написать public function actionView() { $this->layout='column1'; ... I love Yii :)

[guest] Гость

Было сказано: Пятница, 10 Февраль 2012

Хорошая капча =)

[guest] Александр

Было сказано: Четверг, 16 Февраль 2012

а у меня почему-то не обновляется.. хотя Ajax = true стоит

[guest] RuZzz

Было сказано: Воскресенье, 29 Апрель 2012

Так это получается роботу нужно несколько раз пройтись по всему диапазону значений и он добьется своего

[guest] zolter

Было сказано: Воскресенье, 29 Апрель 2012

Вы не забывайте что капча меняет значение через N не удачных попыток ввода (выставляется в конфиге)

[guest] Гость

Было сказано: Пятница, 04 Май 2012

так я выставил N=1 и получается что роботу надо раз 10 пройтись по диапазону от 1 до 10 и он по любому сделает своё черное дело.

[guest] Гость

Было сказано: Вторник, 19 Июнь 2012

А у этой капчи ответ всегда 6 или 7? Или у меня где-то ошибка?

[guest] Гость

Было сказано: Четверг, 21 Июнь 2012

Подскажите как можно сделать, чтобы при обновлении страницы капча менялась автоматом(как вроде нажали - "получить новый код"). Что надо сделать и где ?

[guest] Гость

Было сказано: Пятница, 22 Июнь 2012

Прописать testlimit в 0:

public function actions()
{
return array(
'captcha'=>array(
'class'=>'MyCCaptchaAction',
'backColor'=>0xFFFFFF,
'testLimit'=> 0,

[guest] Гость

Было сказано: Среда, 13 Февраль 2013

С Yii 1.1.3 не работает.

[guest] nos

Было сказано: Четверг, 21 Март 2013

П.с. посмотреть как >>>выгоялит<<< капча вы можете по адресу

текст поправьте

[guest] vinaletna

Было сказано: Суббота, 22 Февраль 2014

Помогите, если возможно!Сделала каптчу по рецепту. Каптча формируется, но не выводится картинка. Разрешение на экшен стоит, библиотека GD для PHP установлена. Куда бы мне еще покопать?

[guest] vinaletna

Было сказано: Воскресенье, 23 Февраль 2014

Строка ob_clean(); в файле CCaptchaAction.php,
методах renderImageGD и renderImageImagick решила мою проблему :)

[guest] Andrey

Было сказано: Пятница, 14 Август 2015

Добрый день, почему может вываливаться ошибка:

2015/08/14 09:07:45 [error] [php] mt_rand(): max(0) is smaller than min(1) (S:\DEVELOPER\openserver\OpenServer\domains\drive\protected\modules\crud\components\actions\default\MathCaptchaAction.php:26) ?

[guest] Гость

Было сказано: Суббота, 19 Декабрь 2015

У вас код всегда 17.

[guest] Гость

Было сказано: Среда, 30 Август 2017

123

[guest] Гость

Было сказано: Среда, 30 Август 2017

test

[guest] Гость

Было сказано: Среда, 30 Август 2017

test

[guest] guesto66

Было сказано: Среда, 30 Август 2017

Only thing I wanna say is that tesseract and python still can solve captch on this site. But I would ask you don't change it for few days

[guest] guesto27

Было сказано: Среда, 30 Август 2017

Only thing I wanna say is that tesseract and python still can solve captch on this site. But I would ask you don't change it for few days

[guest] guesto88

Было сказано: Четверг, 31 Август 2017

Only thing I wanna say is that tesseract and python still can solve captch on this site. But I would ask you don't change it for few days

[guest] human_62

Было сказано: Воскресенье, 03 Сентябрь 2017

It's word. Thanks!

[guest] human_39

Было сказано: Понедельник, 04 Сентябрь 2017

It's word. Thanks!

[guest] Гость

Было сказано: Пятница, 27 Апрель 2018

йцвйвйвйцв

[guest] Гость

Было сказано: Пятница, 27 Апрель 2018

ЕБАЛОВО ЭТО ВСЁ

[guest] Гость

Было сказано: Понедельник, 20 Август 2018

Доброго времени! Вы все еще не можете продвинуть свой сайт с места и начать зарабатывать не плохие деньги? Хочу Вам предложить свою услугу по продвижению вашего сайта или интернет-магазина в ТОП-10 выдачи поисковых систем.

Детальнее узнайте по почте proxrum==@==mail.ru (удалите плиз знаки =)
Отпишите на электронный ящик письмо с темой "ПРОДВИЖЕНИЕ САЙТОВ В ПОИСКОВИКАХ" и я Вам отвечу. Стоимость продвижения в два раза дешевле СЕО-фирм!

[guest] Гость

Было сказано: Среда, 29 Август 2018

Buying lower-priced medication drugs from our online remedy referral use - PharmaPills.net - and derive pleasure the convenience of preferably service and peace of mind when ordering from our secure online shopping system.

Our pair of dedicated professionals strive to along your online experience as astute and pleasant as possible. We pride ourselves in our capacity to anticipate these services at a significantly bring set someone back than what rhyme would normally pay. All while avoiding any obscured charges or fees. PharmaPills.net not in the least loses glance at of our patients being people, opposed to numbers. Our troupe wishes not at all break off searching as the overpower bargain on medications we can write on tap to you.

We Help People Get Unmitigated Medications

PharmaPills.net is branch committed to providing quality when it comes to your medication medications. Our patients are searching seeing that a trusted, online dispensary - including a licensed Canadian pharmacy - which offers the “actual extent” at an affordable price.

We, at pharmapills.net, distinguish that in diverse cases the utilize consume of exact formula drugs at the upper-class prices may not however emend your characteristic of life story, but also safeguard your wallet.

http://pharmapills.net/ - pharma medicine company

Accordingly, our online chemist's shop guarantees that its customers not merely earn blameless, unadulterated drugs, but also, that they will be specified any necessary chap support which may usher their prescriptions.

We pay mingy attention to each and every character, ensuring that the scrupulous medication and chastise extent is dispensed. You can rely on us respecting any needed prescription drug advice; in the interim we beg that you follow the physician’s instructions allocated to each prescription.

You Can Rely On PharmaPills

Our trusted, Canadian Supranational Drugstore Pairing approved, online dispensary, PharmaPills, realizes that unequalled fitness plays a very decisive usually in life. Our without a scratch staff is dedicated to providing our customers with the pharmaceuticals they need. We offer a deft turn-around opportunity, low prices, bona fide medications, and the necessary physician’s instructions for each prescription.

http://pharmapills.net/

Over, we eat alphabetically listed itemized descriptions of our most frequently purchased recipe drugs online. Directive these drugs from us with confidence.

Оставить комментарий


Код:
Имя: