Помощь - Поиск - Пользователи - Календарь
Полная версия: PHP Web-регистрация
UoKit.com Форумы > Ultima Online : Dev > Sphere Server > Архив готовых скриптов
Destruction
Скрипт позволяет пользователям регистрироваться на игровом сервере из интерфейса вашего сайта.

Последнее обновление 22.12.2009.

Требования:
  • PHP 5
  • SphereServer
Плюсы этого скрипта:
  • Полностью настраиваемое оформление.
  • Хорошая документация конфигурации, подсказки в случае возникновения ошибок.
  • Проверка логина на уникальность.
  • Возможность настроить необходимости ввода полей.
  • Возможность шифрования паролей md5.
  • Возможность проверки E-Mail на уникальность.
  • Возможность активации E-Mail через отправку сообщения.
  • Возможность уведомления по E-Mail о регистрации.
  • Возможность блокирования автоматических регистраций при помощи CAPTCHA.
  • Возможность автоматической генерации паролей.
  • Возможность автоматического обновления аккаунтов.
  • Возможность работы с файлами sphereacct.scp и sphereaccu.scp через FTP.
Минусы этого скрипта:
  • Скрипт нуждается в тщательном тестировании.
  • Несколько громоздкий объем скрипта, из-за широкого функционала.
Инструкция по установке:
1. Распакуйте архив.
2. Отредактируйте файл config.php (оставьте inDev = true)
3. Загрузите файлы на сервер (желательно в отдельную директорию).
4. Убедитесь, что регистрация работает и не выводит каких-либо ошибок.
5. Отредактируйте файл form.php под оформление своего сайта.
6. Установите в файле config.php значение inDev = false.

Отчеты о работоспособности и возникших ошибках оставляйте в этой теме. Если вам вдруг совершенно случайно не хватает какого-либо функционала - оставляйте подробную информацию о том, что нужно в этой теме.

FAQ
Q: Почему не поддерживается PHP 4?
A: Из принципа. Изображение

Known Issues
  • Используется хреновый алгоритм генерации имен файлов. Совсем хреновый.
  • Отсутствие логов.
  • Какие-то проблемы с объявлением HEREDOC.

PS: Скрипт разрабатывался без какого-либо ТЗ, в следствие чего в ходе разработки не раз изменялся, что привело к не самому очевидному коду. Этот скрипт является плохим примером того, как следует писать код.
ImProV1zator
Код
Parse error: syntax error, unexpected T_START_HEREDOC in W:\home\uofreedom.ru\www\register\config.php on line 157


При загрузке index.php и config.php

Пустой экран при /register/register.php

Код
    // Указывает необходимость сохранять E-Mail пользователя
    // false - E-Mail не будет сохранен
    // другое значение - значение аттрибута, в который будет сохранен E-Mail
    // Например EMAIL - для 55i, TAG.email - для 56b.
    // Эта же настройка учавствует в проверке E-Mail
    const saveEmail            = 'TAG.email';


как это должно работать?таг емейл вешается на всех чаров на аке?
Destruction
1. Скорее всего вы допустили ошибку при настройке. Приведите эдак 147-167 строки файла config.php
2. Пишет в sphereacct.scp
Код
[char]
pass=пас
{saveEmail}=мыло
итд
ImProV1zator
Код
    const lngErrorEmail2        = "Введенные E-Mail не совпадают.";
    const lngErrorCaptcha        = "Введен некорректный проверочный код.";
    const lngErrorFTP            = "Невозможно зарегистрировать аккаунт. Попробуйте позже.";
    const lngErrorActivation    = "Не удалось активировать аккаунт. Зарегистрируйтесь снова.";
    
    // Сообщение активации E-Mail адреса (выводится в обозреватель)
    // %1\$s - E-Mail адрес
    // %2\$s - Имя пользвателя
    // %3\$s - Пароль
    const lngMailActivate        = <<<EOF
Аккаунт %2\$s зарегистрирован.<br />
Администрация требует активации E-Mail адресов.<br />
На адрес %1\$s было отправлено сообщение с ссылкой для активации аккаунта.<br />
Ссылка будет действительна в течении 24 часов.
EOF;
    
    // Заголовок сообщения об активации
    const lngActivateSubject    = "MyShard :: Активация аккаунта";
    // Сообщение активации E-Mail адреса (отправляется на почту)
    // %1\$s - E-Mail адрес
    // %2\$s - Имя пользвателя


Аккаунт %2\$s зарегистрирован.<br />
157я строка
stins
Parse error: parse error, unexpected T_START_HEREDOC in C:\AppServ\www\reg\config.php on line 157
ето чё за баг хотел протестить чё за рег а инефига
stins
Цитата(Destruction @ 27.12.2009, 7:59) *

1. Скорее всего вы допустили ошибку при настройке. Приведите эдак 147-167 строки файла config.php
2. Пишет в sphereacct.scp
Код
[char]
pass=пас
{saveEmail}=мыло
итд


как понять пишите в sphereaccu ? и куда
ColleR
у тебя еще больше ошибок :-D
Destruction
Цитата(stins @ 28.12.2009, 21:35) *

Parse error: parse error, unexpected T_START_HEREDOC in C:\AppServ\www\reg\config.php on line 157
ето чё за баг хотел протестить чё за рег а инефига

Вероятно используется не последняя версия PHP 5, в которой судя по всему какие-то другие требования к объявлению HEREDOC. Можно поменять на привычные кавычки и все заработает.

Уточните пожалуйста, какую конкретно версию PHP вы используете?

Цитата(stins @ 28.12.2009, 22:05) *

как понять пишите в sphereaccu ? и куда

Я сказал в sphereacct.scp, вам рассказать как работает скрипт? - Скрипт записывает в файл sphereacct.scp аккаунт, после чего сфера его оттуда берет, подгружает себе в память и вообще переносит к остальным в sphereaccu.scp

Цитата(ColleR @ 28.12.2009, 22:10) *

у тебя еще больше ошибок :-D

Вы о чем?
stins
кокрас у меня и есть 5 php вот в чём раздув
а точто coller написал у меня сфера просто ругаеться на сфера стутс база . html smile.gif
Destruction
Цитата(stins @ 29.12.2009, 20:40) *

кокрас у меня и есть 5 php вот в чём раздув
а точто coller написал у меня сфера просто ругаеться на сфера стутс база . html smile.gif

Скрипт тестировался на PHP 5.3.1.

Исправлять уже после НГ буду, посмотрю в ранних версиях.

Что касается ругани - как именно ругается? - Скрипт к HTML сферы отношения не имеет, он лишь записывает аккаунты в sphereacct.scp и, если необходимо, отправляет команду обновления аккаунтов в консоль сферы.
stins
Ладно пока отсавлю старую регистрацию жду обновление твоей регистрации smile.gif
Rav4eG
У сферы 56b php5 нету как я понимаю?
Wap
Цитата(Rav4eG @ 30.12.2009, 17:53) *

У сферы 56b php5 нету как я понимаю?
А какое отношение сфера вообще имеет к php?
stins
Цитата(Rav4eG @ 30.12.2009, 18:53) *

У сферы 56b php5 нету как я понимаю?

Такто не у какой сферы нет php вообще laugh.gif я лично ставил свой веб серв и отнего делал веб онлайн и регестрацию хотел ету потести и не получилось smile.gif
Destruction
stins, поменять HEREDOC на кавычки и потестить уж и самостоятельно можно..
stins
HEREDOC этого не нашол в конфиге sad.gif
Destruction
Цитата(stins @ 1.1.2010, 9:07) *

HEREDOC этого не нашол в конфиге sad.gif

HEREDOC - это способ объявления строки.. Я там пишу:
Код
const varName = <<<EOF
контент
EOF;


Такой способ объявления называется HEREDOC. Можно вместо него использовать просто кавычки:
Код
const varName = "content";

Просто для многострочного контента как-то удобнее что-ли использовать HEREDOC.. Не знаю, с чего вдруг PHP там стал ругаться.. Возможно стоило меньше экспериментировать.
ImProV1zator
Не помогло.
Может стоит выложить установочник денвера на котором тестировалось?
Destruction
Цитата(ImProV1zator @ 2.1.2010, 8:48) *

Не помогло.
Может стоит выложить установочник денвера на котором тестировалось?

Ни на каком денвере это не тестировалось.

http://httpd.apache.org/
http://php.net/
Kanibal
А как настроить FTP доступ? blink.gif
Скрипт подключается к ftp серверу, заходит в каталог где лежат акки, и дальше ничего не происходит, пишет только на сайте что регистрация сейчас не доступна и т.д.
Jakut
Как сделать скрипт скажите???
Parse error: syntax error, unexpected T_START_HEREDOC in C:\AppServ\www\register\config.php on line 157

Бесит этот Еррор.... Я не очень понимаю в пхп... так-что могли вы бы помочь мне.
Kanibal
Цитата(Jakut @ 19.8.2010, 11:30) *

Как сделать скрипт скажите???
Parse error: syntax error, unexpected T_START_HEREDOC in C:\AppServ\www\register\config.php on line 157

Бесит этот Еррор.... Я не очень понимаю в пхп... так-что могли вы бы помочь мне.



уже было написано как обойти ошибку...... у меня всё работает норм
Jakut
То, что я там прочитал, я нечего не понял, вот вам трудно например глупому человеку объяснить где и как там исправить чтобы работала?
Kanibal
Цитата(Jakut @ 19.8.2010, 21:40) *

То, что я там прочитал, я нечего не понял, вот вам трудно например глупому человеку объяснить где и как там исправить чтобы работала?


вместо

const lngMAccountCreated = <<<EOF
Логин: %2\$s<br />
Пароль: %3\$s<br />
E-Mail: %1\$s
EOF;

написать

const lngMAccountCreated = "
Логин: %2\$s<br />
Пароль: %3\$s<br />
E-Mail: %1\$s
";
kalinka
а скрипт на хостинге будет работать или только с локальной машины
Ozzy Osbourne
Для регистрации я использую следующий вариант:

1. Пользователь проходит регистрацию через сайт. Данные поступают в таблицу users в базе. Вот к примеру дамп:

Код
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(255) NOT NULL,
  `login` varchar(255) NOT NULL,
  `passwd` varchar(255) DEFAULT NULL,
  `ip` varchar(255) NOT NULL,
  `active` smallint(1) NOT NULL DEFAULT '0',
  `code` varchar(255) NOT NULL,
  `sphere` smallint(1) NOT NULL DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `login` (`login`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;


Поле active в моем случае это флаг подтвердил учетку юзер по email или нет. А вот поле sphere будет говорить создан пользователь у нас в sphereaccu или еще нет.

2. Пишем маленькую функцию для выборки всех записей с таблицы где sphere = 0, т.е. тех кто был зарегистрирован на сайте но еще небыл добавлен в базу:

Код
[FUNCTION reg_new_users]
IF (<DB.Connected>==0)
    DB.Connect
ENDIF
DB.QUERY "SELECT * FROM users WHERE `sphere`=0"
if (<DB.ROW.numrows> > 0)
    for i 0 <eval <DB.ROW.numrows>-1>
        SERV.ACCOUNT add <DB.ROW.<eval <LOCAL.i>>.login> <eval <DB.ROW.<eval <LOCAL.i>>.passwd>>
        DB.EXECUTE "UPDATE users SET `sphere`=1 WHERE `login`='<DB.ROW.<eval <LOCAL.i>>.login>'"
        SERV.LOG New User: <DB.ROW.<eval <LOCAL.i>>.login> created!
    end
endif


(функцию добавляем в любой .scp файл или создаем новый в папке scripts)

3. Открываем sphere_triggers.scp, находим f_onserver_timer и добавляем в самом начале запуск нашей функции:

Код
[FUNCTION f_onserver_timer]
reg_new_users
SERV.Account UPDATE
...


Вот и все, теперь каждые N минут функция reg_new_users будет автоматически запускаться и добавлять
в сферу новых пользователей.

п.с. Интервал запуска f_onserver_timer зависит от директивы TimerCall=5 в sphere.ini
Destruction
Помнится я по каким-то причинам отказался юзать СуБД напрямую из сферы..

Только вот в упор сейчас не могу понять почему. Выглядит красиво.
Ozzy Osbourne
Пока единственная проблема которую я вижу - это нет возможности сделать мгновенное добавление аккаунта в сферу после регистрации. Т.е. в любом случае если таймер стоит 5 минут - то аккаунт реально создастся только спустя 1-5 минут после заполнения формы регистрации.

Конечно подождать 5 минут думаю юзеру будет не проблема, но все равно это минус данного подхода. Но есть также много плюсов, к примеру мне не нужно конектится по телнету к сфере и логинится под реальной учеткой админа что б создать кого то в базе, что само по себе не супер безопасное решение (как в скрипте из этой темы)

База короче рулит, жалко только что сферу нельзя поднять на постгресе или оракле...
Mirage
Может быть можно как то связать обновление аккаунтов с самим письмом?
Либо использовать функцию проверки файла sphereacct.scp на предмет новой информации и при наличии запустить обновление.
Ozzy Osbourne
Проверка sphereacct ничего не даст если аккаунты юзеров которые еще не созданы в сфере - находятся в БД.
fantasyuo
// Указывает состояние скрипта. После проверки обязательно поставить FALSE!
// true - скрипт в режиме тестирования, отображается дополнительная информация, в случае необходимости
// false - скрипт в рабочем режиме, дополнительная информация скрыта
const inDev = FALSE;


Notice: Use of undefined constant E_NONE - assumed 'E_NONE' in C:\xampp\htdocs\index.php on line 13


kak eto popravitj?
fantasyuo
Цитата(fantasyuo @ 5.12.2013, 9:25) *

// Указывает состояние скрипта. После проверки обязательно поставить FALSE!
// true - скрипт в режиме тестирования, отображается дополнительная информация, в случае необходимости
// false - скрипт в рабочем режиме, дополнительная информация скрыта
const inDev = FALSE;


Notice: Use of undefined constant E_NONE - assumed 'E_NONE' in C:\xampp\htdocs\index.php on line 13
kak eto popravitj?

FIXED
ColloR
Люди подскажите этот скрипт реально канает ? и по подробней можете описать установку его?
Llirik
Он регистр букв не чувствует. Т.е. llirik, Llirik, LLIRIK - это для него разные аккаунты и он их регает.( А так всё вроде работает норм.)
RL_ka
Цитата(Llirik @ 19.9.2019, 22:37) *

Он регистр букв не чувствует. Т.е. llirik, Llirik, LLIRIK - это для него разные аккаунты и он их регает.( А так всё вроде работает норм.)


Получается наоборот чувствует
Llirik
Цитата(RL_ka @ 20.9.2019, 12:38) *

Получается наоборот чувствует

Ну какая разница? Факт в том, что баг.
Aimed
Пхп скрипт 2009 года блэт.
Баг это когда код выполняет действия которые не задумывались. С чего это ты так уверен что там чувствительность регистра не была задумкой?
Llirik
Цитата(Aimed @ 20.9.2019, 15:28) *

Пхп скрипт 2009 года блэт.
Баг это когда код выполняет действия которые не задумывались. С чего это ты так уверен что там чувствительность регистра не была задумкой?

Я тестил
Llirik
Ну произнесите колдунство, чтобы это исправить!)
Juzzver
добавь пару строк, чтобы во время создания ник приводился к нижнему регистру, типа lirik. Это решает проблему.
Либо во время сравнения, существует ли такое имя аккаунта, приводи все ники к нижнему регистру и сравнивай с введенным.
https://www.w3schools.com/php/func_string_strtolower.asp
Destruction
Я бы не стал пользоваться этим скриптом.. Но если горит регистронезависимость, то смотреть в register.php строка 208:
Код
if( $line == $usertmp ){


Превратить в:
Код
if( strtolower($line) == strtolower($usertmp) ){


И наверное аналогично с емейлом, парой строк пониже:
Код
if( Conf::checkEmail && $line == $mailtmp ){

Код
if( Conf::checkEmail && strtolower($line) == strtolower($mailtmp) ){
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.