DSite CMS
DSite CMS
создано Media Programming Group
Последняя статья: Как добавить заголовок новости в Title

Поиск: 
Главная            Статьи            Форум            Новости            Описание
Обучающие ролики
Примеры сайтов на CMS DSite
Цены
Вебстудиям
Заявка на DSite
FAQ
Ссылки
Контакты
Скачать

Новости:
05.05.11 :: Обновление 4.91 (релиз)

21.04.11 :: Обновление 4.87

07.04.11 :: Обновление 4.83

04.02.11 :: Обновление от 01.02

25.06.10 :: Поиск по содержимому страниц


Логин:
Пароль:

Забыли пароль? Восстановить

Также Вы можете пройти регистрацию

07.09.2007 :: Регистрация пользователей

Регистрация пользователей - обширная задача, имеющая сотни вариантов использования, поэтому в этой статье мы не ставим себе целью осветить все возможности надстройки, а также то, что ей не по силам. Попробуем, однако, разобраться с базовыми требованиями к регистрации пользователей на сайте, применимых к большинству стандартных задач (регистрация покупателей в Интернет-магазине, регистрация посетителей закрытого раздела сайта, получение информации для удобства посетителя сайта и т.п.).

В настоящее время используется новый подход к регистрации пользователей в системе DSite - это класс dsRegUserEx в модуле dsreg.inc.

Базовые задачи регистрации это:

  1. оформление регистрации
  2. верификация данных пользователя
  3. логин
  4. логаут

Оформление регистрации и верификация данных пользователя

Для работы с функциями регистрации можно использовать утилиты (свободные функции), осуществляющие обвязку основных методов класса. Для регистрации новых пользователей, применяется следующая утилита:

function dsRegShowAndProcessRegForm(&$ru, $form_template_id, $success_section_id, $strEmailConfirm = false, $fail_section_id = false, $additional_post_fields = array())

Для начала необходимо создать шаблон с формой регистрации. Обязательными полями этой формы являются login, password, password2, email. Надо также упомянуть о том, что разработчик может вводить любые дополнительные поля, необходимые при регистрации, и более того, помещать их автоматически в БД. При этом нужно соблюдать условие, что название поля в форме совпадает с названием колонки в таблице БД. По умолчанию в регистрационной таблице есть следующие дополнительные поля: NAME, SNAME, INFO.

Итак форма может выглядеть так:

<form action="{action}" method="post">

    <p>&nbsp;Введите логин <input needed="no" name="login" type="text" value="{login}" /></p>

    <p>Введите пароль <input type="password" needed="no" name="password" /></p>

    <p>Пароль повторно <input type="password" needed="no" name="password2" /></p>

    <p>Введите имя <input needed="no" name="NAME" type="text" value="{NAME}" /></p>

    <p>Введите E-mail <input needed="no" name="email" type="text" value="{email}"/></p>

    <p><input type="submit" value="Зарегистрироваться" /></p>

</form>

Как видно из формы, существует возможность загрузки повторно значений, введённых пользователем в случае ошибки. Параметры функции:

$ru - созданный предварительно класс dsRegUserEx;

$form_template_id - идентификатор шаблона формы;

$success_section_id - идентификатор секции, куда выполнить переход в случае успеха операции (если false, то функция не выполняет переход, а лишь возвращает значение true, которое можно обработать)

$strEmailConfirm - строка, определяющая шаблон письма, отправляемого пользователю в случае верификации по e-mail. Если false, применяется верификация модератором.

$fail_section_id - идентификатор секции, куда выполняется переход в случае ошибки. Также в эту секцию передаются дополнительные параметры с кодом и операцией в которой случилась ошибки (операции могут быть: email, adduser, confirm). Если false, то переход не выполняется. Ошибку можно прочитать через класс (GetLastError()).

Скрипт обработки может выглядеть так:

<? 

require_once( PLUGINPATH.'registration/inc/dsreg.inc');

//

$ru = new dsRegUserEx();

$ru->m_bCheckDupEmails = true; // проверять пользователей с одинаковым e-mail

// $ru->m_bDebug = true; // включить отладку

if (dsRegShowAndProcessRegForm($ru, 47, false,

'registration.html', false, array('NAME')))

{

echo "Операция прошла успешно";

}

else

{

$le = $ru->GetLastError(); // получить код ошибки

if ($le) echo "Ошибка ".$le;

}

?>

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

Данная страница выполняет сразу три функции: вывод формы, приём данных заполненной формы, верификация e-mail (в случае если установлен параметр $strEmailConfirm).

Пользователь зарегистрирован. Теперь необходимо создать форму и скрипт логина. Для этого применяется другая утилита.

Логин и логаут

function dsRegShowAndProcessLoginForm(&$ru, $form_template_id, $success_section_id, $fail_section_id = false)

Все параметры аналогичны предшествующей функции. Создаём форму. Для этой формы обязательным считается два параметра: login, password.

<form action="{action}" method="post">

&nbsp; Логин:

<p><input needed="no" name="login" type="text" /></p>

<p>Пароль:</p>

<p><input type="password" needed="no" name="password" /></p>

<p><input type="submit" value="Войти" /></p>

<p>&nbsp;</p>

<p>Также вы можете <a href="http://localhost/index.php?id=29">пройти регистрацию</a></p>

</form>

 Простой скрипт, проверяющий статус и введённый логин пароль, а также одновременно выводящий форму регистрации: 

<? 

require_once( PLUGINPATH.'registration/inc/dsreg.inc');

//

$ur = new dsRegUserEx();

if (dsRegShowAndProcessLoginForm($ur, 46, false)===true)

{

echo "Добро пожаловать ".$ur->GetUserField('NAME');

}

?>

Проверка статуса заключается в том, что для пользователя, прошедшего процедуру аутентификации не требуется повторный ввод пароля и логина. Вообще, используя метод Login() класса dsRegUserEx вы имеете возможность в любой момент. Он не вызывает дополнительных обращений к БД, определяя автоматически вошёл пользователь или нет.

Для выхода пользователя необходимо вызвать метод Logout().

Полноценные решения

Для того чтобы решение по регистрации пользователей стало полноценным, необходимо реализовать следующий функционал:

  1. процесс регистрации и активации пользователя;
  2. проверку логина и пароля;
  3. возможность восстановления пароля путём генерации нового или отсылки старого;
  4. возможность изменения данных пользователя;

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

<?

// Templates:

$editparams_tid = 66;

$registration_tid = 67;

$letter_tid=68;

//

require_once( PLUGINPATH.'registration/inc/dsreg.inc');

//

$ru = new dsRegUserEx();

$ru->m_bCheckDupEmails = true; // проверять пользователей с одинаковым e-mail

// $ru->m_bDebug = true; // включить отладку

if ($ru->Login()) // если уже вошёл в систему, предложить редактировани

{

if (isset($_POST['password']) && isset($_POST['password2']))

{

$r = dsRegShowAndEditParams($ru, $editparams_tid, true,

array('NAME', 'SNAME', 'INFO'));

}

dsRegShowAndEditParams($ru, $editparams_tid, false,

array('NAME', 'SNAME', 'INFO'));

if ($r)

{

echo "Данные успешно изменены"; }

}

elseif ($r = dsRegShowAndProcessRegForm($ru, $registration_tid, false,

$letter_tid, false, array('NAME', 'SNAME', 'INFO')))

{

if (isset($_GET['login']))

{

echo "Операция прошла успешно. Ваш эккаунт активирован.";

}

else

echo "Пользователь зарегистрирован успешно.

Для активации эккаунта было отослано письмо на Ваш адрес.";

}

if (!$r && $_POST) // поступили данные из формы, но возникла ошибка

{

// расшифровка кодов ошибок

$error_messages = array(REGU_ERR_UNDEFINED=>'Неизвестная ошибка',

REGU_ERR_NOTFOUND=>'Пользователь не найден',

REGU_ERR_DUPLOGIN=>'Пользователь с таким логином (или e-mail) уже существует',

REGU_ERR_SHORTPASS=>'Слишком короткий пароль',

REGU_ERR_SHORTLOGIN=>'Слишком короткий логин',

REGU_ERR_INVALIDPASS=>'Неверный пароль или логин',

REGU_ERR_EMAILCHECK=>'Неверный e-mail',

REGU_ERR_NOTIN=>'Пользователь не прошёл авторизацию',

REGU_ERR_NOTACTIVE=>'Пользователь не активирован',

REGU_ERR_PASSWMISMATCH=>'Пароли не совпадают',

REGU_ERR_SQLEXECUTE=>'Ошибка работы с базой данных',

REGU_ERR_HASHNOTMATCHED=>'Несовпадают данные регистрации',

REGU_ERR_MAILFAILED=>'Ошибка отсылки контрольного письма. Обратитесь к администратору сайта.');

$le = $ru->GetLastError(); // получить код ошибки

if ($le) echo $error_messages[$le];

}

?>

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

Внимание! Для использования класса необходимо вставить session_start() в начало вывода (например, в шаблон) web страниц.

Дополнительные возможности описаны в статье "личный кабинет пользователя".



Статьи:

1  2  » 


FAQ  Поиск на форуме
Новое сообщение
Copyright © 2017 Webmedia.ru - создание сайтов & Media Programming Group