PDA

View Full Version : регистрация нового пользователя + капча


Trash
02.02.2010, 10:22
Добрый день.
Имеется PHP NUKE версии 7.9. Очень хочется встроить в него капчу (http://www.captcha.ru/), но к сожалению, я не знаю как. На сайте капчи есть ссылка на модуль feedback в котором встроена эта капча, по аналогии сделать не удается, поскольку php я не знаю вообще, методом совсем не научного тыка ни чего не выходит. Если кто может помочь в данной проблеме, буду очень признателен.

Ниже прикрепляю файл index.php из папки your_account.

Soniks
02.02.2010, 14:32
А куда именно вы хотите встроить эту captha? На какое действие?

Trash
02.02.2010, 15:45
в нюке есть стандартная капча, но она легко обходится спам ботами.. действие при регистрации пользователя, .т.е. вводится логин, пароль, емэйл и код с картинки, если код введен правильно регистрация подтверждается. в общем заместо встроенной капчи

Soniks
07.02.2010, 11:51
Ничего сложного нет:

Скачиваем архив kaptcha сайта разработчика, если еще не скачивали.
Раззиповываем папку kaptcha в корень сайта, убеждаемся ч то в этой папке есть файл index.php
При желании настраиваем kaptchу, открыв файл kcaptcha_config.php, который находится в этой же папки.
Открывеме index.php модуля You_Account.
Находим функцию new_user(), а в ней следующее условие:
if (extension_loaded("gd") AND ($gfx_chk == 3 OR $gfx_chk == 4 OR $gfx_chk == 6 OR $gfx_chk == 7)) {
echo "<tr><td>"._SECURITYCODE.":</td><td><img src='?gfx=gfx&amp;random_num=$random_num' border='1' alt='"._SECURITYCODE."' title='"._SECURITYCODE."'></td></tr>\n"
."<tr><td>"._TYPESECCODE.":</td><td><input type=\"text\" NAME=\"gfx_check\" SIZE=\"7\" MAXLENGTH=\"6\"></td></tr>\n"
."<input type=\"hidden\" name=\"random_num\" value=\"$random_num\">\n";
}
Взамен этого вставляем следующее:
session_start();
echo "<tr><td>"._SECURITYCODE.":</td><td><img src='/kaptcha/index.php?".session_name()."=".session_id()."' border='1' alt='"._SECURITYCODE."' title='"._SECURITYCODE."'></td></tr>\n"
."<tr><td>"._TYPESECCODE.":</td><td><input type=\"text\" NAME=\"keystring\" SIZE=\"7\"></td></tr>\n";
Далее в том же файле находим функцию confirmNewUser(), а вней такие строки:
."<input type=\"hidden\" name=\"random_num\" value=\"$random_num\">"
."<input type=\"hidden\" name=\"gfx_check\" value=\"$gfx_check\">"
Меняем их на:
."<input type=\"hidden\" name=\"keystring\" value=\"".$_POST['keystring']."\">"
Находим и удаляем следующие строки:
if (extension_loaded("gd") AND $code != $gfx_check AND ($gfx_chk == 3 OR $gfx_chk == 4 OR $gfx_chk == 6 OR $gfx_chk == 7)) {
title(""._NEWUSERERROR."");
OpenTable();
echo "<center><b>"._SECCODEINCOR."</b><br><br>"
.""._GOBACK."</center>";
CloseTable();
include("footer.php");
die();
}
Находим функцию finishNewUser(), а вней удаляем следующие строки:
if (extension_loaded("gd") AND $code != $gfx_check AND ($gfx_chk == 3 OR $gfx_chk == 4 OR $gfx_chk == 6 OR $gfx_chk == 7)) {
Header("Location: modules.php?name=$module_name");
die();
}
И последнее, находим функцию userCheck(), а в ней следующую строку:
global $stop, $user_prefix, $db;
Поле нее добавляем следующее:
session_start();
if(!isset($_SESSION['captcha_keystring']) || !$_POST['keystring'] || $_SESSION['captcha_keystring'] != $_POST['keystring']) $stop = "<center>"._SECCODEINCOR."</center><br>";

Trash
09.02.2010, 13:44
Soniks
Огромнейшее, человеческое спасибо!
Сил больше нету бороться с спамерами! Спасибо!

shtrlz
09.03.2010, 14:42
Soniks помогите и мне.

все сделал как вы описали, но вот теперь выдает:

Warning: session_start() [function.session-start]: open(/storage/home/shtrlz1s/tmp/sess_ruhudld0q9rpkvsd8eld6nfu61, O_RDWR) failed: Permission denied (13) in /storage/home/shtrlz1s/htdocs/modules/Your_Account/index.php on line 621

в 621 строке собственно :
session_start();

права на папку капчи и на файлы выставил 750 (как и на другие файлы php на сайте)

ага, разобрался с правами на папку Tmp что в корне.
но теперь не кажет картинку. в файле с примером - показывает, в самом модуле - нет

и с этим поправил.

в этой строке
echo "<tr><td>"._SECURITYCODE.":</td><td><img src='/kaptcha/index.php?".session_name()

папка называется kaptcha

а в дистрибутиве kcaptcha

спасибо за решение

MaxR
02.07.2010, 20:19
В модуле Your_Account при регистрации нужно добавить два поля. версия 80 RUS если нужно файл, то залью.
http://s08.radikal.ru/i181/1007/68/a54bef704e8f.jpg

хелп ми :yell:

Soniks
05.07.2010, 21:49
MaxR ну собственно ничего сложного нет, по аналогии как описано выше в функции new_user() нужно вставить необходимые поля, и аналогично проделать действия в функции confirmNewUser(), заменяя только названия полей. А в функции finishNewUser() необходимо в запрос добавить требуемые столбцы и их значения, если вам необходимо сохранить данные в БД