Вопрос при регистрации
Для многих движков есть модули цель которых не допустить автоматическую регистрацию. Решил сделать для LS, что-то подобное.
Юзер переходит на страницу регистрации. Вводит данные во все стандартные поля + в доп. поле вводит ответ на вопрос. Если ответ не совпадает с заданным в настройках, то говорим юзеру, что он ответил неправильно и аккаунт не регистрируем. Если правильно, то регистрируем :)
Поехали…
Открываем файл classes/actions/ActionRegistration.class.phpActionRegistration.class.php находим это:
ниже добавляем это:
Открываем файл classes/modules/sys_viewer/Viewer.class.php находим это:
ниже добавляем это:
Открываем файл \templates\language\russian.php находим это:
Ниже добавляем это:
Редактируем дефолтный шаблон. Открываем файл templates/skin/new/actions/ActionRegistration/index.tpl и находим это:
Ниже добавляем это:
Спасибо, chizpeople, за замечание.
В папке config/modules создаём папку reg_question и в ней файл config.php с таким содеражанием:
ВНИМАНИЕ! Файл должен быть сохранён в кодировке UTF-8.
PS: Этот текст редактируем под себя. То, что там написано просто для примера :)
PPS: Есть ещё кой какие идеи по доработке этого хака. Реализую когда будет свободное время.
PPPS: Программер из меня фиговейший. php я почти незнаю.
Юзер переходит на страницу регистрации. Вводит данные во все стандартные поля + в доп. поле вводит ответ на вопрос. Если ответ не совпадает с заданным в настройках, то говорим юзеру, что он ответил неправильно и аккаунт не регистрируем. Если правильно, то регистрируем :)
Поехали…
Открываем файл classes/actions/ActionRegistration.class.phpActionRegistration.class.php находим это:
/** * Проверка пароля */ if (!func_check(getRequest('password'),'password',5)) { $this->Message_AddError($this->Lang_Get('registration_password_error'),$this->Lang_Get('error')); $bError=true; } elseif (getRequest('password')!=getRequest('password_confirm')) { $this->Message_AddError($this->Lang_Get('registration_password_error_different'),$this->Lang_Get('error')); $bError=true; }
ниже добавляем это:
/** * Проверка ответа на вопрос */ if (!func_check(getRequest('question'),'mail')) { $reg_answer = REG_ANSWER; if (preg_match("/^{$reg_answer}$/iu", getRequest('question')) == false) { $this->Message_AddError(REG_ANSWER_ERROR,$this->Lang_Get('error')); $bError=true; } }
Открываем файл classes/modules/sys_viewer/Viewer.class.php находим это:
$this->Assign("SITE_NAME",SITE_NAME);
ниже добавляем это:
$this->Assign("REG_QUESTION",REG_QUESTION);
Открываем файл \templates\language\russian.php находим это:
/** * Регистрация */
Ниже добавляем это:
'registration_aquestion' => 'Ответьте на вопрос',
Редактируем дефолтный шаблон. Открываем файл templates/skin/new/actions/ActionRegistration/index.tpl и находим это:
<label for="repass">{$aLang.registration_password_retry}:</label><br /> <p><input type="password" class="input-text" value="" id="repass" name="password_confirm"/></p><br />
Ниже добавляем это:
<label for="question">{$aLang.registration_aquestion}</label><br /> <span>{$REG_QUESTION}</span> <p><input type="text" class="input-text" name="question" id="question" value="{$_aRequest.question}"/></p><br />
Спасибо, chizpeople, за замечание.
В папке config/modules создаём папку reg_question и в ней файл config.php с таким содеражанием:
<?php /** * Конфиг для хака "reg_question" */ define('REG_QUESTION','Ты человек? Отвечай чётко: <strong>да</strong> или <strong>нет</strong>.'); //Вопрос который будет задан при регистрации define('REG_ANSWER','дА'); // Ответ на вопрос. При ответе не учитывается РеГисТр. define('REG_ANSWER_ERROR','Обломись, дружище! Ты неправильно ответил на вопрос.'); //Сообщение о том, что юзер ответил на вопрос неправильно ?>
ВНИМАНИЕ! Файл должен быть сохранён в кодировке UTF-8.
PS: Этот текст редактируем под себя. То, что там написано просто для примера :)
PPS: Есть ещё кой какие идеи по доработке этого хака. Реализую когда будет свободное время.
PPPS: Программер из меня фиговейший. php я почти незнаю.
В последнее время все больше и больше играет роль продвижение сайта в интернете. Услуги по продвижению оказывают много различных компаний, то так же стоит обратить своей внимание на частного специалиста по продвижению сайта. Зачастую его услуги заметно дешевле, а качество не уступает крупным игрокам рынка.
36 комментариев
2.Ой да ладно, не программист, php не знаю. Знаете! Если смогли разобраться в логике двига и написать этот хак, то знаете.
Благодарю за хак.
2. Не-не-не. Не знаю. Ну ладно… Знаю но ооооочень слабо (основные конструкции, несколько ф-ций и немного регулярки). Что-то серьёзное мне не под силу. Хотя хочу заняться php более серьёзно. Ибо вёрстка стала надоедать :(
А смог разобраться потому, что код очень хорошо прокомментирован. Респект разработчику ;)
но если при реге, любой более менее простейший бот это обойдет.
Это только в кач-ве примера. Можно задать тематический вопрос. не предлагать варианты ответа.
заменить на:
Капча некого не напрягает. Это уже обычное дело. А вопрос как дополнительная мера.
\templates\skin\new\actions\ActionRegistration\index.tpl
\templates\skin\new\css\style.css
\templates\language\russian.php
Вопрос: сколько букв в слове «сколько»? Ответ цифрой.
Правильный ответ естественно «7»
НО
Регистрация возможна если ввести 27, 37, 71, 77 и т.д. (т.е. лишние символы в ответе отбрасываются а нужные из ответа забираются)
Разьве это хорошо? :)
есть возможность это поправить как-то?
замечание от Rash я учитывал…
Warning: session_start() [function.session-start]: Cannot send session cache limiter — headers already sent (output started at N:\home\exhibition\www\config\modules\reg_question\config.php:1) in N:\home\exhibition\www\classes\modules\sys_session\Session.class.php on line 53
может это потому что сайт под денвером
Что не понравилось — мне не понравилось, что вопрос как то выбивается из стиля оформления страницы регистрации.
Что получилось:
Как сделал:
В файле \templates\language\russian.php в блоке предложенном автором для вставки дополним этой строчкой:
После этого в файле templates/skin/new/actions/ActionRegistration/index.tpl предложенный автором блок меняем на представленный ниже
И последнее.
В блоке, который нужно сохранять в кодировке UTF-8 убираем сам вопрос и оставляем просто кавычки ''.
После этих изменений, мы не вываливаемся из общего дизайна страницы.
Сделал для себя. Поделился со всеми. На авторство не претендую.
К сожалению, сейчас заниматься этим хаком у меня нет времени.
У себя на 0.5.1 я не нашел файл сlasses/modules/sys_viewer/Viewer.class.php по этому адресу.
Видимо попал в какой-то спам лист — боты так прут и гадят. Поставил recaptcha на регистрацию. Накал упал, однако кое-кто все-таки продирается сквозь нее.
Думал, решу этим проблему…
Добавляете в /templates/skin/myskin/actions/ActionRegistration/index.tpl:
И можете туда же, вверху
Это всего лишь набросок + эту систему легко обойти.