автоматизация
March 17

Автоматизация сбора регистрационных данных

Задача:

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

Структура файлов системы:

Публичная регистрационная форма:

  • HTML-форма, соответствующая фирменному стилю мероприятия, которая содержит все необходимые поля согласно макету
<form class="event" action="<?=$_SERVER['PHP_SELF'];?>"
      method="post" name="event">
<fieldset>
<legend>Personal Information:</legend>
<label for="scieTitle"><span class="rd fz14">*</span> Scientific Title:</label>
<input type="text" name="scieTitle"
       id="scieTitle" value="<?=$_SESSION['scieTitle'];?>" /><!--required-->
<label for="fName"><span class="rd fz14">*</span> First Name:</label>
<input type="text" name="fName"
       id="fName" value="<?=$_SESSION['fName'];?>" /><!--required-->
<label for="lName"><span class="rd fz14">*</span> Last Name:</label>
<input type="text" name="lName"
       id="lName" value="<?=$_SESSION['lName'];?>" /><!--required-->
<label for="mobPh"><span class="rd fz14">*</span> Mobile phone (with country prefix):</label>
<input type="tel" name="mobPh"
       id="mobPh" value="<?=$_SESSION['mobPh'];?>" /><!--required-->
<label for="eMail"><span class="rd fz14">*</span> E-mail:</label>
<input type="text" name="eMail"
       id="eMail" value="<?=$_SESSION['eMail'];?>" /><!--required-->
</fieldset>
<fieldset>
<legend>Information about Organization:</legend>
<label for="orgName"><span class="rd fz14">*</span> Organization:</label>
<input type="text" name="orgName"
       id="orgName" value="<?=$_SESSION['orgName'];?>" /><!--required-->
<label for="depName"><span class="rd fz14">*</span> Department:</label>
<input type="text" name="depName"
       id="depName" value="<?=$_SESSION['depName'];?>" /><!--required-->
<label for="posName"><span class="rd fz14">*</span> Position in&nbsp;Department:</label>
<input type="text" name="posName"
       id="posName" value="<?=$_SESSION['posName'];?>" /><!--required-->
<label for="orgPh"><span class="rd fz14">*</span> Organization phone (with country prefix):</label>
<input type="tel" name="orgPh"
       id="orgPh" value="<?=$_SESSION['orgPh'];?>" /><!--required-->
<label for="orgFax">Fax (with country prefix):</label>
<input type="tel" name="orgFax"
       id="orgFax" value="<?=$_SESSION['orgFax'];?>" />
<label for="orgSite">Website:</label>
<input type="text" name="orgSite"
       id="orgSite" value="<?=$_SESSION['orgSite'];?>" />
<label for="orgStreet"><span class="rd fz14">*</span> Street/Number:</label>
<input type="text" name="orgStreet"
       id="orgStreet" value="<?=$_SESSION['orgStreet'];?>" /><!--required-->
<label for="orgCity"><span class="rd fz14">*</span> Town/City:</label>
<input type="text" name="orgCity"
       id="orgCity" value="<?=$_SESSION['orgCity'];?>" /><!--required-->
<label for="orgCode"><span class="rd fz14">*</span> Postal/ZIP Code:</label>
<input type="text" name="orgCode"
       id="orgCode" value="<?=$_SESSION['orgCode'];?>" /><!--required-->
<label for="orgCountry"><span class="rd fz14">*</span> Country:</label>
<input type="text" name="orgCountry"
       id="orgCountry" value="<?=$_SESSION['orgCountry'];?>" /><!--required-->
</fieldset>
<fieldset>
<legend>Comments (if necessary):</legend>
<label for="cmmnts">Your Comments:</label>
<textarea name="cmmnts" id="cmmnts"><?=$_SESSION['cmmnts'];?></textarea>
</fieldset>
<fieldset style="text-align:center;">
<legend>Actions with Form:</legend>
<input type="submit" value="Submit Form" name="submit">
</fieldset>
</form>
  • Обработка POST-запроса с очисткой и проверкой полей
  • Сохранение данных в таблицу БД, генерация уникального кода активации, отправка письма со ссылкой на активацию
  • В случае ошибок заполнения или совпадения email с уже существующим в БД сохранение введённых данных в сессию и вывод сообщений об ошибках, чтобы пользователю не пришлось заполнять правильные данные заново

Страница активации учётной записи:

  • Принимает в GET-запросе email пользователя и статус активации
  • Находит пользователя по email, вычисляет ожидаемый код активации и сравнивает с переданным
  • Если код совпадает и учётная запись ещё не активирована, обновляет поля статуса и даты активации в БД
  • Выводит сообщения об успешной активации с деталями регистрации
  • Отправляет уведомление администраторам о новой активированной регистрации
  • Если пользователь уже активирован, просто отображает его данные
  • При несовпадении кода активации в БД и полученном из письма выводит ошибку

Страница для ручного добавления участников (административный функционал):

  • Содержит ту же форму, но после отправки письмо с подтверждением уходит не пользователю, а на внутренний адрес технической поддержки
  • Позволяет добавить запись в БД без необходимости подтверждения со стороны пользователя (например, если участник регистрируется по телефону или прислал данные по электронной почте)
  • Все остальные механизмы (валидация, проверка уникальности email, сохранение в сессию при ошибках) работают аналогично публичной форме

Структура таблицы базы данных:

id – автоинкрементный индивидуальный ключ пользователя, reg_date – дата и время регистрации, scie_title – научное звание, first_name – имя, last_name – фамилия, mob_phone – мобильный телефон с кодом страны, email – электронная почта, должна быть уникальной, organization – организация, department – отдел, position – должность, phone – рабочий телефон, fax – факс, w_site – веб-сайт, address – улица/дом, city – город, zip_code – почтовый индекс, country – страна, comment – комментарий, auth – флаг активации, по умолчанию 0, после активации по email обновляется на 1, auth_date – дата и время активации по ссылке из письма, hash – код активации

Структура и настройки полей таблицы БД

Используемые технологии:

  • Язык программирования: PHP
  • База данных: MySQL
  • Управление сессиями: встроенный механизм сессий PHP
  • Отправка писем: PHP-функция mail() с индивидуальными настройками
  • Вёрстка: HTML/CSS вёрстка в рамках общего макета сайта

Итог:

Веб-cистема автоматизированного сбора данных, 22 зарегистрированных и 21 авторизованный пользователь

Обзор таблицы с зарегистрированными пользователями

(Проект поддерживался для одного мероприятия, сайт больше не функционирует)

Год: 2017