Автоматизация сбора регистрационных данных
Задача:
Разработать веб-систему для автоматизированного сбора и подтверждения регистрационных данных участников мероприятия
Структура файлов системы:
Публичная регистрационная форма:
- 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 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 авторизованный пользователь
(Проект поддерживался для одного мероприятия, сайт больше не функционирует)