Вы находитесь на странице: 1из 75

АННОТАЦИЯ

Выпускная квалификационная работа (бакалаврская работа) на тему


«Разработка автоматизированной информационной системы частной
медицинской клиники» содержит 74 страниц пояснительной записки и 12
листов графического материала.
Ключевые слова: ЧАСТНАЯ МЕДИЦИНСКАЯ КЛИНИКА, СУБД,
ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ, ПРОЕКТИРОВАНИЕ ВЕБ САЙТА,
ПРОЕКТИРОВАНИЕ ВЕБ ПРИЛОЖЕНИЯ ЧАСТНОЙ МЕДИЦИНСКОЙ
КЛИНИКИ.
Объектом исследования работы является частная клиника –
«МедЦентрСервис» это многопрофильный медицинский центр, в котором
можно получить широкий спектр врачебных услуг.
Цель работы: разработать web-сайт для «МедЦентрСервис» с
возможностью оформления заявки на прием.
Методология исследования. В процессе исследования применялся
научный аппарат информатики, методы проектирования и разработки
программного обеспечения, и такие научные методы исследования, как:
абстрактно-логический метод; анализ научной и учебной литературы;
классификация; метод обобщения; моделирование; описательный метод;
проектный метод; синтез; системный анализ и подход; сравнительный
анализ; тестирование; структурно-логический, моделирование.
В результате выполнения работы был создан веб-сайт для
«МедЦентрСервис».
Созданная система предназначена для упрощения процессов
взаимодействия лечебного заведения и пациентов.
Язык программирования PHP, база данных MySQL.
Возможное внедрение системы в медицинскую клинику
«МедЦентрСервис».

2
СОДЕРЖАНИЕ

ВВЕДЕНИЕ .............................................................................................................. 4
1. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ. ДЕЯТЕЛЬНОСТЬ В СФЕРЕ
МЕДИЦИНСКОЙ ДЕЯТЕЛЬНОСТИ ................................................................... 6
1.1. Описание предметной области .................................................................... 6
1.2. Описание потоков данных и бизнес-процессов ......................................... 7
1.3. Описание взаимодействия пользователя с сайтом .................................. 11
1.4. Описание поведения сайта ......................................................................... 11
1.5 Выводы по 1 главе ....................................................................................... 13
2. ПРОЕКТИРОВАНИЕ САЙТА МЕДИЦИНСКОГО УЧРЕЖДЕНИЯ
«МедЦентрСервис» ............................................................................................... 14
2.1. Проектирование структуры сайта ............................................................. 14
2.2. Проектирование структуры базы данных ................................................ 18
2.3. Выводы по 2 главе ...................................................................................... 25
3. РЕАЛИЗАЦИЯ ВЕБ-САЙТА МЕДИЦИНСКОГО ЦЕНТРА ....................... 26
3.1. Реализация пользовательского интерфейса ............................................. 26
3.2. Тестирование сайта ..................................................................................... 35
3.3. Выводы по 3 главе ...................................................................................... 47
ЗАКЛЮЧЕНИЕ ..................................................................................................... 48
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ ........................................... 50
Приложение А. Исходный код приложения....................................................... 53
Приложение Б. Исходный код модуля регистрации ......................................... 69
Приложение В. Исходный код модуля записи на прием .................................. 71
Приложение Г. Исходный код модуля административной панели ................. 73

3
ВВЕДЕНИЕ

Актуальность темы заключается в том, что прогресс в информатизации


здравоохранения приводит к тому, что познания в медицине становятся
всеобщим достоянием. Конструктивное заключение трудности
удовлетворения растущего спроса на медицинские услуги лежит в русле
внедрения в здравоохранение информационных технологий. Именно они
дозволят сделать лучше систему здравоохранения и решить почти все
серьѐзные трудности в этой области. Чаще всего применение
информационных технологий в медицине реализуется в виде медицинских
информационных систем разного назначения и некоторых отдельных,
автоматизированных лечебно- исследовательских или медицинских
приборов.
Процесс информатизации медицинского учреждения направлен на
создание единого медицинского информационного пространства,
позволяющего врачам общаться друг с другом, обращаться к архивам и
библиотекам медицинских знаний и технологий, а также взаимодействовать с
функционирующей аппаратурой непосредственно с рабочего места и в
реальном времени. Прогресс в информатизации здравоохранения приводит к
тому, что медицинские знания становятся всеобщим достоянием.
Кроме этого, одним из важнейших моментов деятельности
медицинских учреждений является организация медицинской помощи. В
современных условиях развития информационных технологий процесс
обеспечения медицинской помощи можно упростить за счет автоматизации
взаимодействия медицинского учреждения и пациента. Это позволит
учреждению более эффективно вести прием и учет пациентов, а пациентам
предоставить возможность удобно записываться на прием и задавать
вопросы специалистам лечебного учреждения.
Объектом исследования работы является частная клиника –
«МедЦентрСервис» это многопрофильный медицинский центр, в котором

4
можно получить широкий спектр врачебных услуг. В клинике присутствуют
крупные объѐмы данных, о сотрудниках и о пациентах. При этом, как и
большинство клиник, в «МедЦентрСервис» возникают ряд проблем, от
недостаточного уровня автоматизации, до неудобства обслуживания
пациентов. Для достижения решения проблем клиника «МедЦентрСервис»
приняла решение разработать автоматизированную систему для онлайн
просмотра врачебных услуг и записи к врачу. Это нужно для удобства
пациентов, не нужно будет звонить или ходить в клинику чтобы записаться
или узнать интересующую вас информацию. Актуальность работы частной
клиники «МедЦентрСервис» обусловлена облегчением работы врачей,
данные медицинской карты пациента будут храниться в электронном виде.
Таким образом, целью работы является повышение эффективности
работы частной клиники, за счет разработки веб-сайта для
«МедЦентрСервис» с возможностью оформления заявки на прием.
Для достижения цели работы необходимо решить следующие задачи:
 изучить предметную область;
 разработать проект сайта для «МедЦентрСервис».;
 реализовать веб-сайт для «МедЦентрСервис»;
Объект разработки – «МедЦентрСервис».
Предмет разработки – веб-сайт для «МедЦентрСервис».

5
1. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ. ДЕЯТЕЛЬНОСТЬ В
СФЕРЕ МЕДИЦИНСКОЙ ДЕЯТЕЛЬНОСТИ

1.1. Описание предметной области

В настоящее время система управления практически всеми


медицинскими учреждениями имеет ярко выраженную функциональную
направленность. Есть руководитель, которому подчиняются заместители по
направлениям, в подчинении каждого из них находятся подразделения,
выполняющие определенные функции.
В частной клинике «МедЦентрСервис» работают квалифицированные
врачи разных специальностей. Он открыт для всех желающих, как для
взрослых, так и для детей.
Частная клиника «МедЦентрСервис» обладает лицензией на такие
виды деятельности как:
 медицинская деятельность;
 деятельность в области промышленной безопасности;
 фармацевтическая деятельность.
Клиника предоставляет платные медицинские услуги по следующим
специальностям: терапевт, кардиолог, хирург, психотерапевт, гинеколог,
уролог, дерматолог, массажист, невролог, ортопед, оториноларинголог,
психолог, фтизиатр [1, 2].
На рис. 1.1 показана общая модель функционирования медицинского
учреждения.

6
Рисунок 1.1 – Модель функционирования поликлиники

1.2. Описание потоков данных и бизнес-процессов

Более подробно рассмотрены бизнес-процессы медицинского


учреждения. Бизнес-процесс — это регулярно повторяющаяся
последовательность взаимосвязанных мероприятий (операций, процедур,
действий), при выполнении которых используются ресурсы внешней среды,
создается ценность для потребителя и выдается ему результат (в данном
случае это медицинская услуга).
Различают основные и вспомогательные процессы. Основными бизнес-
процессами являются процессы, ориентированные на производство товара
или оказание услуги, являющиеся целевыми объектами создания
предприятия и обеспечивающие получение дохода. Так, для медицинского
7
учреждения основным бизнес-процессом является оказание пациенту
качественной медицинской помощи (качественных медицинских услуг).
Вспомогательные процессы формируют инфраструктуру организации,
в медицинском учреждении - создают условия для выполнения лечебно-
диагностического процесса.
Для моделирования сложных систем существуют определенные
методологии и стандарты. К таким стандартам относятся методологии
семейства IDEF. С их помощью можно эффективно отображать и
анализировать модели деятельности широкого спектра сложных систем в
различных разрезах. При этом широта и глубина обследования процессов в
системе определяется самим разработчиком, что позволяет не перегружать
создаваемую модель излишними данными.
Модель IDEF0 всегда начинается с представления системы как единого
целого - одного функционального блока с интерфейсными дугами, которые
простираются за пределы рассматриваемой области. Данная диаграмма с
одним функциональным блоком называется контекстной диаграммой, и ее
обозначают идентификатором ―А-0‖.
Проектирование IDEF0-диаграммы можно осуществить в программе
Process Modeler. Рассмотрим бизнес-процессы поликлинического
учреждения. На рисунке 1.2 представлен бизнес-процесс «Обслуживание
пациента».

Рисунок 1.2 – Бизнес-процесс «Обслуживание пациента»

8
На изображении можно увидеть, что в поликлинику обращается
больной пациент, выходит здоровый. Лечение пациента осуществляет
медицинский персонал. Этот бизнес-процесс, в свою очередь, можно
декомпозировать на составляющие его бизнес-процессы, такие как: запись,
регистрация пациента, обследование пациента, лечение и закрытие истории
болезни (рис. 1.3).
Чтобы осуществить запись пациента, необходимо чтобы он пришел
лично в регистратуру либо позвонил по телефону. Пациент подходит к
окошку регистратуры, уточняется врач и время приема, данные заносятся в
информационную систему.

Рисунок 1.3 – Декомпозиция бизнес-процесса «Обслуживание пациента»


На рисунке 1.4 представлен бизнес-процесс «Запись пациента».

9
Рисунок 1.4 – Декомпозиция бизнес-процесса «Запись на прием»

На основании разработанной модели, можно увидеть следующие ряд


недостатков процесса обслуживания пациентов:
 отсутствие современных инструментов взаимодействия с
пациентами;
 отсутствие централизованной базы данных пациентов;
 сложность учета заявок на прием и пациентов;
 риск потери данных при аппаратных и программных сбоях
используемого оборудования;
 большая часть ручной работы в процессе обработки заявок;
 возможность ошибки при передаче данных о пациенте врачу;
 невозможность удаленного доступа к данным по заявкам на прием.
Для устранения указанных недостатков принято решение о разработке
веб-сайта поликлиники, который позволит оптимизировать процесс приема и
обработки заявок на прием.

10
1.3. Описание взаимодействия пользователя с сайтом

Для записи на прием пользователю необходимо войти на сайт и


заполнить форму записи на прием. На странице записи на прием находится
форма, в которую необходимо ввести данные для записи не прием:
 ФИО пользователя.
 Электронная почта.
 Номер телефона.
 Адрес.
 Специализацию специалиста.
 Специалиста.
 Дату приема.
 Дополнительная информация.
Далее нужно нажать кнопку «Отправить заявку», это действие
отсылает данные формы в обработчик, где они проверяются и отправляются
в базу данных.

1.4. Описание поведения сайта

Веб-сайт построен на базе трехзвенной архитектуры в состав которой


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

Клиент 1

Сервер СУБД Сервер приложений Клиент 2

Клиент 3

Рисунок 1.5 – Трехзвенная архитектура (сервер СУБД – сервер приложения –


клиент)

Преимущества трехзвенной архитектуры заключаются в упрощении


замены и масштабирования серверов СУБД, повышенном уровне
безопасности данных, который обеспечивается не только средствами СУБД,
но и серверным приложением, которое обрабатывает данные и производит
взаимодействие с клиентом, получая запросы и отправляя ответы,
формирующиеся на сервере, в том числи и с учетом информации из базы
данных. На уровне серверного приложения можно будет производить
дополнительные проверки пользователей, фильтрацию данных от клиента,
предварительную проверку запросов к базе данных.
На примере оформления заявки на прием рассмотрим
последовательность операций, которые выполняются веб-сервером:
 прием запроса от пациента;
 обработка запроса;
 формирование запроса к базе данных;
 получение данных с базы данных;

12
 формирование ответа клиенту;
 отправка ответа клиенту.

1.5 Выводы по 1 главе

В результате выполнения 1 главы исследованы особенности бизнес-


процессов клиники «МедЦентрСервис», описано взаимодействие
пользователей с сайтом и особенности поведения веб-сайта для
«МедЦентрСервис».

13
2. ПРОЕКТИРОВАНИЕ САЙТА МЕДИЦИНСКОГО УЧРЕЖДЕНИЯ
«МЕДЦЕНТРСЕРВИС»

2.1. Проектирование структуры сайта

Структура веб-сайта — искусственно выделенные программистом


взаимодействующие части сайта. Использование рациональной структуры
устраняет проблему сложности разработки; делает программу понятной
людям; повышает надежность работы сайта при сокращении срока ее
тестирования и сроков разработки вообще. Схема структуры сайта показана
на рис. 2.1.

Рисунок 2.1 – Схематическое изображение иерархической структуры

Далее описана структура системы. В понятие структуры программы


включается состав и описание связей всех модулей, которые реализуют
самостоятельные функции программы и описание носителей вводимых и
выводимых данных, а также данных, участвующих в обмене между
отдельными подпрограммами [1].
Разрабатываемая система состоит из блоков, которые отвечают за
функционал системы. На рисунке 2.2 показана иерархическая схема
соподчиненности модулей.

14
NEW_ADMIN.PHP

EDIT_ADMIN.PHP

DELETE.ADMIN
INDEX.PHP LOGIN.PHP MANAGE_ADMINS.PHP

NEW_PAGE.PHP
LOGOUT.PHP

MANAGE_TABLE.PHP DELETE_PAGE.PHP

ADMIN.PHP
EDIT_PAGE.PHP

FOOTER.PHP LISTOFQUESTIONS.PHP CREATE_SUBJECT

DELENE_SUBJECT
HEADER.PHP

LISTOFQUESTIONS.PHP EDIT_SUBJECT

LIST_ORDERS.PHP
ADD_ORDER.PHP
PROCESSING_ADD_ORDER.PHP

SECTION.PHP
ADD_SECTION.PHP

PROCESSING_ADD_SECTION.PHP

SPECIALIST.PHP
ADD_SPECIALIST.PHP

PROCESSING_ADD_SPECIALIST.PHP

Рисунок 2.2 – Иерархия модулей сайта

В качестве метода разработки был выбран метод нисходящего


проектирования, в виду того, что разработка ПС данным методом более
удобна, продуктивна и данный метод хорошо себя зарекомендовал в среде
программистов.
В таблице 2.1 приведена спецификация модулей сайта.

15
Таблица 2.1 – Спецификация модулей системы
Название Назначение Вызывающий Технолог
модуль ия
1 2 3 4
index.php Страница записей php
admin.php Страница php
администратора
create_subject.php Создание страницы manage_table.php php
delete_admin.php Удаление manage_admins.ph php
администратора p
delete_page.php Удаление страницы manage_table.php php
delete_subject.php Удаление раздела manage_table.php php
edit_admin.php Редактирование manage_admins.ph php
администратора p
edit_page.php Редактирование manage_table.php php
страницы
edit_subject.php Редактирование manage_table.php php
категорий
login.php Вход в систему index php
logout.php Выход из системы admin php
manage_admins.php Управление admin php
администраторами
manage_table.php Управление admin php
категориями и
записями
new_admin.php Добавление manage_admins.ph php
администратора p
new_page.php Добавление страницы manage_table.php php
new_subject.php Добавление категории manage_table.php php
order.php Форма-заявка index php
list-order.php Список заявок admin php
processing_add_section.php Обработка формы admin php
добавления
специалиста
processing_add_client.php Обработка формы admin php
добавления клиента
registration.php Регистрация на сайте admin php
listofquestions.php Список вопросов admin php
processing_contactform.php Обработка формы admin php
обратной связи
processing_add_user_info.php Обработка формы admin php
добавления
информации о
пользователе
processing_add_specialist.php Обработка добавления admin php
специалиста
processing_change_user_info.p Обработка формы admin php
hp изменения данных о
пользователе
listspecialists.php Список специалистов admin php

16
Продолжение таблицы 2.1
listsections.php Спирсок отделов admin php
add_section.php Форма добавления admin php
отделов
add_klient.php Форма записи на прием admin php
change_user_info.php Форма изменения admin php
данных о пользователе
contactform.php Форма обратной связи admin php
specialist.php Форма добавления admin php
специалистов
user_page.php Страница пользователя admin php
section.php Форма добавления admin php
отделов
processing_order_form.php Обработка формы admin php
заявки
completedorders.php Список выполненных admin php
заявок
add_completedorders.php Добавление admin php
обработанной заявки
processing_add_completedorde Обработка формы admin php
rs.php добавления
обработанной заявки
db_connect.php Подключение к базе php
данных
footer.php Нижняя част сайта index php
functions.php Функции системы admin php
header.php Верхняя часть index php
session.php Файл сессии admin php
validation_functions.php Функции валидации admin php

Наиболее общая тактика программирования состоит в разложении


процесса на отдельные действия: функционального описания на подфункции,
а соответствующих программ — на отдельные инструкции. На каждом таком
шаге декомпозиции нужно удостовериться, что решения частных задач
приводят к решению общей задачи; выбранная последовательность
отдельных действий разумна; выбранная декомпозиция позволяет получить
инструкции, в каком-либо смысле более близкие к языку, на котором будет
реализован веб-сайта. Разграничение доступа осуществляется за счет
ограничения по функционалу и ограничения по доступу к данным, что
зависит от роли пользователя.
На уровне приложения происходит разграничение к функциям web-
сайта, в соответствии с ролью после прохождения авторизации. Разные
17
группы пользователей получают разный перечень доступных страниц сайта.
На уровне СУБД происходит разграничение прав доступа к данным, права на
чтение, запись изменений конкретных таблиц.
Для организации внешнего вида сайта будут использованы
возможности HTML, CSS, Bootstrap, JavaScript [9].

2.2. Проектирование структуры базы данных

Для проектирования базы данных системы была использована среда


MySQL Workbench.
Функционал программы:
 программа позволяет наглядно представить модель базы данных в
графическом виде;
 наглядный, функциональный механизм установки связей между
таблицами, в том числе «многие ко многим» с созданием таблицы
связей;
 восстановление структуры таблиц из уже существующей на сервере
БД (связи восстанавливаются в Inno DB, при использовании My
ISAM – связи необходимо устанавливать вручную);
 удобный редактор SQL запросов, позволяющий сразу же отправлять
их серверу и получать ответ в виде таблицы;
 возможность редактирования данных в таблице в визуальном
режиме [12].
Разработка базы данных ведется в три этапа:
1) Концептуальное проектирование – представляет из себя, анализ и
редактирование условий к данным.
Концептуальное проектирование заканчивается составлением
концептуальной модели, инвариантной к структуре базы данных, которая
может быть представлена в виде модели «сущность–связь».

18
2) Логическое проектирование – процесс изменения условий к данным
в структуре данных.
3) Физическое проектирование – определение особенностей хранения
данных, методов доступа и т. д.
Таким образом, в итоге возникает необходимость в реализации и
поддержании нескольких представлений данных – одного физического,
общего логического и многих пользовательских логических. Самой
популярной является трехуровневая архитектура описания базы данных.
Концептуальная модель изучаемой предметной области, должна
представлять собой модель, в которой в содержательной форме описывается
состав системы, ее компоненты и их взаимосвязи, перечень основных
показателей, переменных, как контролируемых, так и неконтролируемых
внешних факторов. А также их взаимосвязей с показателями качества
системы, перечень решений, которые необходимо определить в результате
решения поставленной задачи [2].
Логический уровень (представление программиста) это записи,
элементы данных, связи между записями (рис. 3.3).
Большинство современных подходов к проектированию баз данных
базируется на использовании разновидностей так называемой ER–модели.
Моделирование предметной области основывается на использовании
графических диаграмм, которые включают небольшое число компонентов
разного рода [3].
Основными понятиями ER–модели являются сущность, связь и
атрибут. Сущность – это реальный или представляемый объект, информация
о котором должна быть сохранена и доступна. В диаграммах ER–модели
сущность представлена в виде прямоугольника, который содержит имя
сущности. Каждый экземпляр сущности должен отличаться от любого
другого экземпляра той же сущности. Связь – это графически
представляемая ассоциация, которая устанавливается между двумя
сущностями. В любой связи выделяются два конца, на каждом из которых

19
должно быть указано имя конца связи, степень конца связи и обязательность
связи. Атрибутом сущности является любая деталь, служащая для уточнения,
идентификации, классификации, числовой характеристики или выражения
состояния сущности. Имена атрибутов записываются в прямоугольник,
который изображает сущность, под именем сущности и изображаются
малыми буквами.

Рисунок 2.3 – Логическая модель базы данных

20
Большинство современных подходов к проектированию баз данных
базируется на использовании разновидностей так называемой ER–модели.
Моделирование предметной области основывается на использовании
графических диаграмм, которые включают небольшое число компонентов
разного рода [3].
Уникальным идентификатором сущности может быть атрибут,
комбинация атрибутов, комбинация связей или комбинация связей и
атрибутов, которая уникально отличает любой экземпляр сущности от
других экземпляров сущности того же типа.
Физический уровень (представление администратора) проектирования
базы данных, это группирование данных, индексы, методы доступа (рис.2.4).
Физическая модель данных должна соответствовать описанию данных
в базе данных конкретной системы управления базами данных, то есть схеме
данных. Специфика конкретной системы управления базами данных
включает в себя ограничения на именование объектов базы данных,
ограничения на поддерживаемые типы данных. Помимо этого, специфика
конкретной системы управления базами данных при физическом
проектировании включает выбор решений, которые связанны с физической
средой хранения данных (выбор методов управления дисковой памятью,
разделение БД по файлам и устройствам, методов доступа к данным),
создание индексов [6].

21
Рисунок 2.4 – Физическая модель базы данных

Далее покажем значения атрибутов и типы данных в полях таблиц базы


данных. На рис. 2.5 показана таблица «pages». Эта таблица предназначена
для сохранения записей публичной части системы.

Рисунок 2.5 – Таблица «pages»

22
Таблица «subjects» (рис. 2.6) сохраняет в себе информацию о
категориях публичной части сайта.

Рисунок 2.6 – Таблица «subjects»

В таблице «admins» сохраняется информация об администраторах


системы – имя пользователя и пароль, которые используются для входа в
систему.

Рисунок 2.7 – Таблица «admins»

Таблица «users» предназначена для сохранения данных пользователей


системы (рис. 2.8).

Рисунок 2.8 – Таблица «users»

23
В таблице «contactform» (рис. 2.9) сохраняется информация из
контактной формы.

Рисунок 2.9 – Таблица «contactform»

Таблица «section» предназначена для сохранения информации об


отделах лечебного заведения (рис. 2.10).

Рисунок 2.10 – Таблица «section»

В таблице «recording» сохраняется информация из формы записи на


прием.

Рисунок 2.11 – Таблица «recording»

24
Таблица «specialist» сохраняет информацию о специалистах, которые
работают в заведении.

Рисунок 2.12 – Таблица «specialist»

Таким образом, в результате моделирования базы данных была создана


модель базы данных, которая будет использована в качестве хранилища
данных для веб-сайта медицинской клиники.

2.3. Выводы по 2 главе

При выполнении 2 главы работы была спроектирована структура веб-


сайта для клинки «МедЦентрСервис», а также разработана база данных для
приложения, которая позволит сохранять данные, которые пользователи
вносят в информационную систему для «МедЦентрСервис».

25
3. РЕАЛИЗАЦИЯ ВЕБ-САЙТА МЕДИЦИНСКОГО ЦЕНТРА

3.1. Реализация пользовательского интерфейса

Средства разработки сайта. Язык программирования веб-сайта.


Рассмотрев несколько языков программирования, для построения веб-
приложений, в качестве языка программирования был выбран PHP. Этот
язык программирования предоставляет возможность создавать
информационные системы, при этом обеспечивая полный функционал при
работе с базой данных MySQL.
Текущая версия языка PHP предназначена для создания веб-
приложений самого широкого назначения. В настоящее время PHP
поддерживается подавляющим большинством хостинг-провайдеров, его
используют сотни тысяч программистов.
Принцип работы приложения, которое создано с помощью PHP очень
похож на тот, что используют обычные, статические веб-страницы,
созданные на основе языка HTML. В последнем случае на веб-сервере
создается сайт, состоящий из нескольких страниц с кодом HTML.
Посетитель, зашедший на сайт, загружает их в браузере, щелкая на
гиперссылках, представленных на этих страницах.
Чтобы реализовать подобную функцию на статическом сайте, нужно
создавать большое количество однотипных страниц, но с помощью PHP при
создании веб-страниц можно включать в них специальный сценарий и
передавать сценарию данные, которые он должен использовать при
обработке запроса из браузера.
Такие веб-страницы, с кодом сценария PHP, называются
динамическими, поскольку могут реагировать на действия посетителя сайта,
передавая ему в ответ на сделанный выбор именно ту информацию, которая
нужна. В отличие от статического сайта на динамическом информация может
меняться с течением времени. Подобные функции легко реализуются

26
средствами PHP, достаточно обширными и развитыми для решения
огромного круга задач [4].
Для исполнения функций, реализуемых сценариями PHP, на веб-
сервере должны содержаться специальные средства обработки кода
сценария. Их и используют средства PHP, которые играют роль
препроцессора, то есть предварительного обработчика запроса. Именно они
исполняют код сценария внутри запрошенной страницы, передают ему
данные из запроса и отправляют ответ браузеру, пользуясь возможностями
веб-сервера. Таким образом, средства языка PHP представляют собой
дополнение веб-сервера, которое делает возможным интерактивное
взаимодействие посетителя сайта с его содержимым.
Чтобы PHP-сценарий смог работать, ему нужны следующие
компоненты: браузер, веб-сервер и средства самого препроцессора PHP,
входящие в состав веб-сервера. Эти средства предназначены для обработки
кода сценария внутри страниц динамического сайта, отображаемых по
запросам посетителей в ответ на их действия на сайте.
Для создания полнофункциональных PHP-сценариев требуется
обеспечить сохранение данных на веб-сервере. Это можно реализовать
сохранением информации в файле, и для простых сценариев такой метод
вполне приемлем. Но для сложных, профессиональных сценариев
применяются более развитые средства – базы данных, обеспечивающие
хранение и извлечение данных любого типа по специальным запросам. Эти
запросы формируются на специальном языке, называемом SQL (Structured
Query Language – язык структурированных запросов). SQL – это
международный стандартный язык для работы с базами данных.
Для исполнения запросов на веб-сервере с поддержкой PHP должен
быть установлен еще один сервер, который будет воспринимать запросы к
базе данных, поступающие из сценария, и исполнять их. Таких серверов
множество, но в среде разработчиков PHP наиболее популярен MySQL,
поддерживаемый и бесплатно распространяемый на сайте mysql.com [4].

27
Таким образом, можно отметить, что для практической работы по
созданию и исполнению сценариев PHP нужен браузер и веб-сервер,
средства самого языка PHP и сервер MySQL. Любой провайдер,
обеспечивающий работу с PHP, предоставляет эти инструменты для
развертывания сайта на хостинге. Однако для создания своих
профессиональных сценариев лучше использовать инструменты работы с
PHP на рабочем компьютере, локально, что даст более гибкий и удобный
доступ к PHP-сценарию и средствам его отладки.
Язык PHP изначально был разработан как язык программирования,
специально предназначенный для написания веб-приложений (сценариев),
исполняющихся на веб-сервере. В этом состоит его преимущество, поскольку
его средства позволяют быстро и эффективно создавать
полнофункциональные веб-приложения.
Другое достоинство PHP – предоставляемая им возможность внедрять
свои сценарии в HTML-код веб-страниц, что значительно упрощает задачу
создания динамических сайтов. Благодаря PHP разработчики могут
динамически изменять HTML-код страниц в зависимости от действий
посетителя сайта [5].
Преимущества использования именно этого языка программирования
заключаются в следующем:
Возможность реализации любых интерактивных функций;
Программирование ведется без использования специального
программного обеспечения: достаточно обыкновенного текстового
редактора;
Код подразумевает легкую работу с разнообразными базами данных и
операционными системами, СУБД;
Специалисту не нужно принимать во внимание наличие прав доступа к
сценариям или имеющиеся недопустимые символы;

28
Вести работы можно на локальном компьютере, но для этого
понадобится установить локальный сервер с поддержкой PHP или Денвер,
готовый набор бесплатных программ;
Написанный сайт легко переносится на хостинг.
Сегодня язык программирования PHP получает все большую
популярность в процессе создания сайта. Данный язык интересен тем, что
разработчик сам с нуля может написать свои коды и сделать собственный
дизайна сайта. Но на сегодня существует разные шаблоны для сайтов,
созданных на PHP. Можно использовать готовые скрипты, CMS системы
управления контентом. Программист может использовать уже готовые
наработки, что существенно ускоряет весь процесс.
Он популярен и удобен наличием широкого функционала, который был
специально разработан под вебсайты. Сюда входит и интеграция с HTML,
и хорошая совместимость с различными базами данных, и безопасность,
и приятный пользовательский интерфейс.
Текущая версия языка PHP предназначена для создания веб-
приложений самого широкого назначения [7]. В настоящее время PHP
поддерживается подавляющим большинством хостинг-провайдеров, его
используют сотни тысяч программистов. PHP изначально был разработан как
язык программирования, специально предназначенный для написания веб-
приложений (сценариев), исполняющихся на веб-сервере. В этом состоит его
преимущество, поскольку его средства позволяют быстро и эффективно
создавать полнофункциональные веб-приложения.
Данный язык предоставляет возможность посылать интернет-
браузерам верные копии файлов, которые запрашиваются, а также совершать
запуск небольшие программы для того, чтобы выполнять различные задачи и
функции, так называемые PHP-скрипты. Сравнительная характеристика PHP
с другими популярными серверными языками программирования показана в
таблице 3.1 [4].

29
Таблица 3.1 – Сравнение языков программирования
PHP Ruby Python
Предназначение Создание Создание веб- Создание
динамических веб- приложений и динамических веб-
приложений компьютерах приложений и
программ компьютерных
программ
Сложность 6 4 5
освоения
ООП Да Да Да
Инструкция break Да Да Да
Многомерные Да Да Да
массивы
Цикл foreach Да Да Да
Множественное Нет Нет Да
наследование
Макросы Нет +/- Нет
Именованные Нет Да Да
параметры
Наличие библиотек Да Да Да
для работы с
графикой и
мультимедиа
Работа с MySQL Да Да Да
Наличие Да (PHPStorm) Да (RubyMine) Да (Visual Studio)
профессиональных
средств разработки
Поддержка Да (по умолчанию) Нет Нет
популярными веб- (дополнительные (дополнительные
серверами службы) службы)

Как видно из таблицы, рассмотренные языки программирования


сходятся по рядку показателях, но PHP имеет преимущества в направлении
доступности средств разработки и доступности на популярных веб-серверах,
в связи с этим, в качестве языка программирования для построения
информационной системы будет использован PHP.
Среда разработки проекта. Для разработки веб-приложений
используется среда разработки PhpStorm. Указанная программа является
интегрированной средой разработки с интеллектуальным редактором,

30
которая хорошо понимает код, обеспечивает автодополнение кода,
рефакторинг, а также предотвращает ошибки в процессе работы и
поддерживает смешивание языков.
В программе поддерживаются передовые технологии веб-разработки,
включая PHP, HTML5, CSS, Sass, SCSS, Less, Stylus, Compass, CoffeeScript,
TypeScript, ECMA Script Harmony, шаблоны Jade, ZenCoding, Emmet,
JavaScript.
PhpStorm 10 обеспечивает расширенную поддержку PHP 7, включая
инспекции совместимости. Возможность работы с:
− безымянными классами;
− декларациями типов возвращаемого значения;
− операторами объединения со значением «ноль»;
− декларациями группового использования;
− лексическими анализаторами, учитывающими контекст, а также
другие возможности версии PHP 7 [4].
При реорганизации кода в PhpStorm 10 можно локально
переименовать переменные, параметры, классы, методы, константы или
метки команд перехода прямо в редакторе.
Благодаря значительному обновлению механизма реорганизации
необходимый для переименования элемент будет подсвечиваться на панели
редактора.
Другие улучшения PHPStorm:
− дублирование поиска по выделению метода;
− интеллектуальное копирование/добавление в
последовательности;
− возможность конфигурации значений date() или time() в
шаблонах Live Templates в качестве временных отметок Unix.
Интерактивная консоль отладки для PHP (REPL) – эта новейшая
возможность PhpStorm 10 позволяет преобразовывать переменные, вызывать

31
функции PHP и определять дополнительные функции – и всѐ в процессе
работы.
Для дальнейшего улучшения процесса отладки автоматическое
завершение кода теперь доступно во время отладки при контрольных
значениях, списках вывода и точках остановки.
PhpStorm 10 предоставляет функции для анализа потока данных, что
помогает лучше разобраться в коде проекта, интерпретировать сложные
части кода, найти проблемные места в исходном коде.
Отслеживание потока данных особенно полезно при работе со
сторонним кодом или работе с общим кодом в больших группах
разработчиков.
PhpStorm 10 поддерживает все новые функции и улучшения,
выпущенные в PHPUnit 5, широко используемой тестовой платформе для
PHP. Среди возможностей также есть:
− новый принцип действия аннотации @depends;
− тесты, помеченные @small, могут быть также помечены в
качестве рискованных, если они осуществляют ввод-вывод;
− добавленные подтверждения assertFinite(), assertInfinite() и
assertNan().
С помощью нового плагина Docker для PhpStorm можно добавить в
имеющиеся проекты поддержку Docker, просматривать логии и управлять
хранилищами Docker прямо в PhpStorm.
Также есть возможность отладки веб-приложений в Xdebug или Zend
Debugger.
В число других улучшений входит удобная функция сворачивания
комментариев и язык шаблонов Twig, который автоматически настраивается
под различные расширения файлов.
С помощью PhpStorm 10 можно использовать сигнатуры типов,
которые Flow добавляет в JavaScript. При использовании аннотированных

32
функций или методов можно получить информацию по типизированным
параметрам в автоматическом завершении кода.
Поддержка Angular 2 в PhpStorm включает в себя автоматическое
завершение кода и навигацию по директивам и связкам и распознает новые
атрибуты событий для TypeScript или ECMAScript 2015.
PhpStorm обеспечивает интеграцию с TSLint, анализатором для кода
TypeScript. Позволяет увидеть предупреждения и ошибки прямо в редакторе
по мере ввода кода.
Другие заслуживающие упоминания функции включают в себя
улучшенную поддержку ECMAScript 2015, TypeScript 1.5 и 1.6, обновлѐнную
поддержку React, форматирование связанных вызовов метода, новые
инспекции Node.js, графики в CPU-профайлере Node.js, возможность запуска
отдельных тестирований Mocha [8].
PhpStorm 10 помогает кодировать специальные символы в HTML-
коде, заменяя их HTML-элементами, начинающимися с &. Также можно
выбрать символы или блок кода и применить кодировку специальных
символов XML/HTML.
Чтобы сделать команду FindinPath более эффективной, разработчики
добавили вкладку предпросмотра, которая отображает первые 100
результатов в режиме реального времени. Теперь для того, чтобы найти всѐ
необходимое, не нужно выходить из диалога.
Конфигурация стиля кода стала ещѐ проще. Нужно выбрать фрагмент
кода, нажать Alt+Enter и выбрать действие настройки стиля. Можно
просмотреть и настроить стиль кода, который может быть применѐн к данной
части кода, в доступном режиме предварительного просмотра [13].
Улучшен доступ ко всем проектам, что позволяет легче получить
доступ к необходимым проектам. Также, их можно группировать по любому
удобному принципу.
Обновлѐнные инструменты базы данных:
− исходная самодиагностика для MySQL, PostgreSQL, MS SQL;

33
− настраиваемая форма поведения действия Execute;
− новое окно преобразования таблиц.
Другие улучшения:
− обновлѐнные регулярные выражения в действии поиска с
заменой;
− настройки для пользователей с нарушением цветового зрения;
− совместимость с SVN 1.9.
Поддерживаемые операционные системы:
− Windows 10;
− Windows 8;
− Windows 7;
− Windows Vista;
− Windows 2003;
− Windows XP (вкл. 64-бит);
− MacOSX 10.5 и выше;
− Linux.
Требования к компьютеру:
− объѐм оперативной памяти: 1 Гб (минимум);
− объѐм оперативной памяти: 2 Гб (рекомендуется);
− минимальное разрешение экрана: 1024х768.
Модуль авторизации в системе. За авторизацию в системе отвечает
файл - login.php. Данный файл отвечает за вывод формы авторизации и
обработку данных, которые введены в форму. Обработчик формы проверяет,
есть ли данные из формы, если их нет, то система выдает сообщение о том,
что форма не заполнена. Далее осуществляется поиск пользователя и сверка
параметров доступа к системе, с данными, которые записаны в базу данных.
Если они совпадают, то осуществляется вход в систему.
Код страницы авторизации показан в приложении В.
Модуль регистрации пользователей. На странице регистрации
пользователя предоставляется возможность зарегистрироваться в системе. На

34
странице представлена форма, в которую необходимо ввести учетные данные
и нажать кнопку «Регистрация». Данные отправляются в обработчик формы,
который находится в этом же файле, и записывают полученные данные в
базу данных.
Код модуля регистрации пользователя представлен в приложении Г.
Модуль записи на прием. На странице записи пользователя
предоставляется возможность записаться на прием. На странице записи на
прием представлена форма, в которую необходимо ввести данные
пользователя и выбрать дату посещения. Данные отправляются в обработчик
формы, который находится в этом же файле, и записывают полученные
данные в базу данных [10].
Код модуля записи на прием представлен в приложении Д.
Административная панель системы. Административная панель
системы представляет собой страницу, на которой есть возможности
управления записями на сайте, а также просмотра списков заявок, вопросов,
специалистов, отделов. Предоставлены возможности добавления
специалистов и отделов [11].
Основным файлом административной панели является -
manage_table.php который представлен в приложении Е [14].

3.2. Тестирование сайта

В проектах по разработке ПО, кроме задачи по осуществлению заяв-


ленных функциональных возможностей, также есть такая задача, как обеспе-
чить качество программного обеспечения. Понятие «качество программного
обеспечения» или «Software quality» представляет собой набор параметров
ПО, которые связаны с его способностью в удовлетворении заданных и
предполагаемых потребностей.
Тестирование программного продукта относится к одному из общих и
удобных средств контроля качества. Тестирование ПО представляет собой

35
проверку на соответствия реального поведения программы с предполагае-
мым, которая выполняется при использовании определенного набора тестов.
Если рассматривать тестирование в качестве инструмента верификации и ва-
лидации, то оно выступает в роли постоянного процесса и осуществляется на
каждой стадии проекта. Во время проведения тестирования важно реализо-
вать такие цели, как:
- повышение вероятности того, что создаваемое программное
обеспечение будет верно функционировать в независимости от условий;
- повышение вероятность того, что создаваемое программное
обеспечение будет включать в себя, а главное отвечать всем заявленным тре-
бованиям;
- предоставление своевременных и точных данных о состоянии ПО на
текущий момент.
Тестирование включает следующие этапы (рис. 3.1):
 планирование работ (Test Management);
 проектирование тестов путем ручной разработки или
автоматической генерации (Test Design);
 выполнение тестирования с получением результатов (Test
Execution);
 анализ полученных результатов выполнения с целью оценки
качества ПО (Test Analysis).
Результат теста может сообщить разработчику, что ошибка
присутствует в коде, тесте или в коде и тесте одновременно. Кроме этого,
объект тестирования может выдавать большой объем выходных данных,
требующий значительных усилий для анализа.
На каждом этапе жизненного цикла информационной системы должны
выполняться верификация и валидация проекта. Верификация (Verification)
— это процесс оценки системы или еѐ компонентов с целью определения
удовлетворяют ли результаты текущего этапа разработки условиям,
сформированным в начале этого этапа. Валидация (Validation) — это

36
определение соответствия разрабатываемого ПО ожиданиям и потребностям
пользователя, требованиям к системе.

Планирование
работ
Проектирование
тестов

Выполнение тестов

Анализ результатов
тестирования

Рисунок 3.1 – Последовательность тестирования ПО

Тестирование как инструмент верификации и валидации является


постоянным процессом и проводится на всех этапах жизненного цикла
проекта. В ходе тестирования необходимо достичь следующих целей:
- повысить вероятность того, что разрабатываемое ПО будет
работать правильно при любых обстоятельствах;
- повысить вероятность того, что разрабатываемое ПО будет
соответствовать всем описанным требованиям;
- предоставить актуальную информацию о состоянии продукта на
данный момент.
На этапе тестирования выполняется итеративный запуск тестовых
наборов. Итерация тестирования запускается при изменении тестируемого
объекта. Как правило, итерация состоит из следующих шагов.
- обновление тестовых наборов. Изменения тестируемого объекта
(появление новой, изменение/исправление существующей или
удаление устаревшей функциональности) требуют изменений
тестовых наборов: добавление новых тестов, коррекция
существующих или исключение устаревших тестов;
- приемочные испытания. Выполняется проверка
работоспособности объекта тестирования. Как правило, на
приемочных испытаниях используют не большое число
37
позитивных тестов, проверяющих выполнение объектом своего
предназначения. В случае неудачи объект возвращается на
доработку, а итерация завершается;
- запуск основного набора тестов. Как правило, основной набор
состоит из большого числа тестов, что приводит к значительным
временным затратам на выполнение тестов. По результатам
запуска формируется сводная ведомость с указанием перечня
тестов, завершившихся с ошибкой;
- анализ результатов тестирования. Выполняется классификация
найденных ошибок, общая оценка тестируемого объекта. По
результатам анализа может быть принято решение о доработке
объекта тестирования и запуска следующей итерации или
завершении этапа тестирования.
Так как этап тестирования является итеративным, количество итераций
ограниченно доступными временными ресурсами (сроками сдачи проекта) и
используемыми стандартами качества. Тестирование может быть закончено
после выполнения итерации без ошибок, при достижении требуемого объема
выполненных тестов без обнаружения ошибок или по истечении выделенных
временных ресурсов. В случае наличия не исправленных ошибок в момент
завершения этапа формируется итоговый список [6].
Выявление программных ошибок является сложной задачей.
Программная ошибка (Software error) может не приводить к наблюдаемому
сбою, а, например, порождать другую программную ошибку или переводить
процесс работы в некорректное состояние. Сбой (Software failure)
порождается наличием одного или нескольких дефектов (Software defect) —
недостатков в компоненте или системе. Для выявления программных ошибок
используются тестовые случаи или тесты.
Тестовым случаем (TestCase) называют документ, который описывает
конкретные шаги, условия и параметры, необходимые для анализа
реализации тестируемой функции.

38
Каждый тест содержит три базовые части (рис. 3.2):
- предусловия (PreConditions) — шаги, которые переводят систему в
состояние, пригодном для проведения проверки;
- описание теста (Description) — шаги, которые переводят систему
из стояния в состояние. На основании полученного результата
делается вывод о соответствии реализации заявленным
требованиям;
- постусловия (PostConditions) — шаги, которые переводят систему
в изначальное положение.

Основные
составляющие теста

Предусловия Описание теста Постусловия

Рисунок 3.2 – Базовые части теста

Далее будут описаны тесты на проверку структуры исходного кода,


качества PHP-кода, валидации HTML и CSS, функциональные тесты.
Ниже приведены результаты проверки работоспособности
разработанного приложения. Рис. 3.3 отображает внешний вид исходного
кода приложения.

Рисунок 3.3 – Оформление исходного кода приложения

39
Как видно из рисунка, исходный код приложения хорошо
структурирован, содержит строки комментариев и ссылки на используемые
программные библиотеки, для отслеживания изменений используется
система контроля версий git. После проверки параметров исходного кода
были проверен функционал, который реализован в исходном коде. В
процессе тестирования программного были проведены следующие виды
тестов: тест сборки; функциональные тесты [15].
Тест сборки является копией «дымового» тестирования, которое
выполняется для подтверждения того, что после старта приложения, оно
выполняет все свои основные функции. Данное тестирование выполняется
программистами, после создания программы, и если программа не проходит
эти тесты, то в дальнейшем тестировании нет смысла, так как эти тесты
указывают на то, что программе не работает. Примером того, что программе
не прошла «smoke testing» является то, что она не запустилась, также этот
тест не проходится по причине ошибки подключения к базе данных. В
результате «smoke testing» разработанная программа запустилась, и
соединение с базой данных установлено успешно. Прохождение этого теста
указывает на возможность проведения функционального и
конфигурационного тестирования.
Функциональное тестирование представляет собой проверку того,
выполняет ли программа те функции, которые предусмотрены техническим
задание, а также степень точности выполнения проверяемых функций.
Таблица 3.2 – Тест главной страницы
Название: Тест главной страницы
Функция: Отображение меню веб-приложения
Действие Ожидаемый результат Результат
теста:
Предусловие:
Откройте программу Открытое главное окно пройден
программы
Шаги теста:
Выберите пункты из предоставленного Страница для открытия пройден
меню выбрана

40
Нажмите кнопку перехода на другую Переход на выбранную пройден
страницу приложения страницу осуществлен

Таблица 3.3 – Тест регистрации


Название: Тест регистрации
Функция: Регистрация в системе
Результат
Действие Ожидаемый результат
теста:
Предусловие:
Открытое главное окно
Откройте программу пройден
программы
Шаги теста:
Страница «Регистрация»
Выбрать пункт «Регистрация» пройден
открыта
Ввод регистрационных данных в
форму
User: User2019 Данные введены пройден
Pass: *(&kj))
Email: user2019@mail.ru
Нажать на кнопку «Регистрация» Регистрация в системе пройден

Таблица 3.4 – Тест авторизации


Название: Тест авторизации
Функция: Авторизация в системе
Результат
Действие Ожидаемый результат
теста:
Предусловие:
Открытое главное окно
Откройте программу пройден
программы
Шаги теста:
Страница «Авторизация»
Выбрать пункт «Авторизация» пройден
открыта
Ввод данных авторизации в форму
User: User2019 Данные введены пройден
Pass: *(&kj))
Нажать на кнопку «Войти» Авторизация в системе пройден
Результат
Действие Ожидаемый результат
теста:

Таблица 3.5 – Тест записи на прием


Название: Тест записи на прием
Функция: Тест записи на прием
Результат
Действие Ожидаемый результат
теста:
Предусловие:
41
Открытое главное окно
Откройте программу пройден
программы
Шаги теста:
Выбрать пункт «Запись на прием» Страница «Запись на прием» пройден

Продолжение таблицы 3.5


Ввод данных пользователя в форму
Данные введены пройден
записи на прием
Запись на прием записана в
Нажать на кнопку «Отправить заявку» пройден
базу данных
Результат
Действие Ожидаемый результат
теста:
При конфигурационном тестировании определено, что созданная
программа успешно функционирует в разных браузерах (табл. 3.6).

Таблица 3.6 – Работа приложения в разных версиях ОС семейства


Windows
Параметр Google Chrome Mozilla Opera
Firefox
Открытие главного модуля + + +
программы
Отображение меню программы + + +
Выбор модуля программы + + +
Отображение списка элементов из + + +
выбранного модуля
Добавление записей в выбранном + + +
модуле
Редактирование записей в + + +
выбранном модуле
Удаление записей в выбранном + + +
модуле
Оформление записи на прием + + +

При проверке удобства пользования, определено, что программа


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

42
- однотипные шрифты во всех модулях системы;
- отсутствие отвлекающих блоков и информации;
- удобное управление записями в модулях системы.
Для функционирования системы необходимы определенные
аппаратные ресурсы. Минимальная конфигурация аппаратных средств для
обеспечения деятельности и работы с системой представлены в таблице 3.7.
Таблица 3.7 – Минимальные требования к аппаратным средствам
Характеристика Клиентская часть Серверная часть
Процессор Pentium 4 или выше Pentium 4 или выше
Размер ОЗУ 1024 Мб 512 Мб
Объем HDD 80 Гб 10 Гб
Монитор С разрешением не менее 1280 на нет
1024
Системное ПО MS Windows 7 или новее Cent OS 7
Прикладное ПО Браузер Google Chrome или СУБД MySQL не ниже 5,
совместимый с поддержкой PHP не ниже 5
JavaScript

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


После заполнения этой формы данные отправляются и сохраняются в базу
данных.
В форме-заявки пользователю необходимо заполнить следующие поля:
 ФИО;
 Электронная почта;
 Номер телефона;
 Домашний адрес;
 Дата;
 Сообщение о проблеме.
Отображение формы на сайте показано на рис. 3.4.

43
Рисунок 3.4 – Форма заявки на прием
При попытке отправить незаполненную форму система выведет
сообщение о необходимости заполнения полей формы. В случае
возникновения ошибки при отправке формы будет выдано предупреждение
об этом. В случае, если пациент передумал заполнять форму, предназначена
кнопка «Отмена».
В случае успешной отправки данных будет выведено сообщение о том,
что заявка отправлена и пользователю присваивается номер в очереди (рис.
3.5).

Рисунок 3.5 – Успешно отправленная заявка на прием

После успешной отправки заявки ее содержание можно посмотреть из


панели администратора в пункте «Список записей на прием».
Добавление специалиста представлено на рисунке 3.6.

44
Рисунок 3.6 – Добавление специалиста
Добавление отдела представлено на рисунке 3.7.

Рисунок 3.7 – Добавление отдела

Список специалистов представлен на рисунке 3.8.

45
Рисунок 3.8 – Список специалистов

Рисунок 3.9 – Список отделов


Интерфейс веб-сайта представлен на рисунке 3.10.

46
3.10 – Интерфейс веб-сайта

3.4. Выводы по 3 главе

В процессе реализации веб-приложения для «МедЦентрСервис» был


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

47
ЗАКЛЮЧЕНИЕ

Одним из важнейших моментов деятельности медицинских


учреждений является организация медицинской помощи. В современных
условиях развития информационных технологий процесс обеспечения
медицинской помощи можно автоматизировать в части осуществления
процессов взаимодействия с пациентами. Это позволит учреждению более
эффективно вести прием и учет пациентов, а пациентам предоставить
возможность удобно записываться на прием. В связи с этим была поставлена
цель работы: разработать web-сайт поликлиники с возможностью
оформления заявки на прием.
В результате достижения цели были решены следующие задачи:
 изучены особенности предметной области;
 разработан проект сайта для «МедЦентрСервис»;
 реализован веб-сайт «МедЦентрСервис».
После определения функционала системы была разработана
концептуальная модель разрабатываемой системы, после этого была
спроектирована базы данных системы, составлена логическая и физическая
модели базы данных.
В качестве языка программирования был выбран PHP. Этот язык
программирования предоставляет возможность создавать информационные
системы, при этом обеспечивая полный функционал при работе с базой
данных MySQL.
Для разработки информационной системы была использована среда
разработки PhpStorm. Указанная программа является интегрированной
средой разработки с интеллектуальным редактором, которая хорошо
понимает код, обеспечивает автодополнение кода, рефакторинг, а также
предотвращает ошибки в процессе работы и поддерживает смешивание
языков.

48
В результате выполнения работы был создан веб-сайт для
медицинского учреждения, которая предусматривает такой функционал:
 заполнение формы записи на прием;
 регистрация пользователя в системе;
 административная панель;
 заполнение формы обратной связи;
 создание записей и категорий (для администратора);
 просмотр списка вопросов формы обратной связи (для
администратора);
 управление списком администраторов системы (для администратора);
 добавление отделов в систему (для администратора);
 просмотр отделов в системе (для администратора);
 добавление специалистов в систему (для администратора);
 просмотр списка специалистов (для администратора);
 просмотр списка записей на прием (для администратора).
Созданная система предназначена для упрощения процессов
взаимодействия лечебного заведения и пациентов.

49
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Туркова Е. А. Процессный подход в управлении медицинским


учреждением [Электронный ресурс] / Е. А. Туркова, А. М. Ооржак //
Режим доступа: https://storage.tusur.ru/files/11227/Turkova_EA_
Oorjak_AM.pdf (Дата обращения: 14.05.2020).
2. Павловский С. А. Проблемы автоматизации учета выполненных
медицинских услуг и пути их решения на примере ГУЗ
«Жириновская ЦРБ» / С. А. Павловский // Материалы VII
Международной студенческой электронной научной конференции
«Студенческий научный форум» URL:
www.scienceforum.ru/2015/1351/14704 (дата обращения: 14.03.2020).
3. Масляк Т. А. Анализ методов разработки сайтов / Т. А. Масляк, Т.
А. Колесникова // Информационные технологии: наука, техника,
технология, образование, здоровье: Тезисы докладов XXIII
Международной научно-практической конференции, Ч.IV (20-22
мая 2015 г., Харьков). – С. 230.
4. Информационные технологии в здравоохранении первой половины
21 века [Электронный ресурс] / В. Н. Решетников, К. А. Мамросенко
// Программные продукты и системы, и алгоритмы. – 2014. - №1.
Режим доступа: http://elibrary.ru/item.asp?id=25438320 (Дата
обращения: 18.03.2020)
5. Александров В. Н. Особенности информационного взаимодействия
при организации обязательного медицинского страхования в
Чувашской Республике / В. Н. Александров // Обязательное
медицинское страхование в Российской Федерации. – 2014. - №2. –
С. 64 – 70.
6. Завдстра М. РНР: объекты, шаблоны и методики программирования,
4-е изд. Пер. с англ. / М. Завдстра - М.: ООО "И.Д. Вильяме", 2015. -
576 с.

50
7. Мустафайева Э. И. Использование СУБД MySQL для разработки
информационно-справочной системы «Рекреационные ресурсы
города Евпатория» [Электронный ресурс] / Э. И. Мустафаева, Ф. В.
Шкарбан // Тезисы Всеукраинской научно-практической on-line
конференции аспирантов, молодых ученых и студентов,
посвященной Дню науки; Т. 1. Режим доступа:
http://eztuir.ztu.edu.ua/123456789/1037 (1.03.2020).
8. Open Server. Лучший инструмент для разработки под Windows
[Электронный ресурс] / Режим доступа: http://open-server.ru/
(1.05.2020).
9. PhpStorm – интегрированная среда разработки на PHP [Электронный
ресурс] / Режим доступа: http://jetbrains.ru/products/phpstorm/
(05.05.2020).
10. Евсеев Д. А. Web-дизайн в примерах и задачах: учебное пособие /
Д.А. Евсеев, В.В. Трофимов; под ред. В.В. Трофимова. — М.:
КНОРУС, 2016. – C. 14 – 17.
11. Жуков Р. А. СУБД с открытым исходным кодом: возможность
применения алгоритмов распараллеливания / Р. А. Жуков //
Технические науки. – 2015. – № 1–2 (35–36). – С. 20 – 21.
12. Зашеловский А. Е. Среды разработки программного обеспечения,
ориентированные на процессы [Электронный ресурс] / А. Е.
Зашеловский, О. Ф. Абрамова. – Режим доступа:
http://www.scienceforum.ru/2015/pdf/15128.pdf (18.05.2020).
13. Приступа В. В. Подход к выбору технологии создания
динамического сайта [Электронный ресурс] / В. В. Приступа. -
Режим доступа:
http://www.repository.hneu.edu.ua/jspui/bitstream/123456789/6097/29/s
ect3_Prystupa.pdf (дата обращения 11.03.2020)
14. Карпов О.Э., Клейменова Е.Б., Назаренко Г.И., Силаева Н.А.
Автоматизированное проектирование медицинских

51
технологических процессов / Под ред. Г.И. Назаренко. – М.:
Деловой экспресс, 2016. – 200 с.
15. Самарев Р. С. Создание простейших HTML-страниц, валидаторы
кода. Каскадные таблицы стилей CSS: методические указания к
выполнению практикума № 1 и лабораторной работы № 1 по
дисциплинам «Языки интернет-программирования» и «Практикум
по интернет-программированию» / Р. С. Самарев. — Москва:
Издательство МГТУ им. Н. Э. Баумана, 2015. — 39 с.

52
ПРИЛОЖЕНИЕ А. ИСХОДНЫЙ КОД ПРИЛОЖЕНИЯ

<?php include 'includes/session.php'; ?>


<?php include 'includes/db_connect.php'; ?>
<?php require_once 'includes/functions.php'; ?>
<?php $layout_context = "public"; ?>
<?php include 'includes/header.php'; ?>
<?php find_selected_page(true); ?>
<!-- contact -->
<div class="contact">
<div class="container">
<h3>Запись в электронную очередь</h3>
<p class="et">Заполните форму записи в электронную очередь на
прием!</p>
<div class="contact-grid">
<div class="col-md-8 contact-grid-left">
<h3 style="color: green"> <?php echo message(); ?></h3>
<h3 style="color: red"> <?php $errors = errors(); ?></h3>
<h3 style="color: red"><?php echo form_errors($errors); ?></h3>
<form action="processing_add_order.php" method="post">
<input type="text" value="Ведите свою Фамилию и Имя"
name="name_lastname_klienta"
onfocus="this.value = '';"
onblur="if (this.value == '') {this.value = 'Ведите свою Фамилию и
Имя';}" required="">

<input type="email" value="Електронная почта" name="email"


onfocus="this.value = '';"
onblur="if (this.value == '') {this.value = 'Электронная почта';}"
required="">

<input type="text" value="Номер телефона" name="phonenumber"


onfocus="this.value = '';"
onblur="if (this.value == '') {this.value = 'Номер телефона';}"
required=""
style="margin-bottom: 15px">

<input type="text" value="Домашний адрес" name="homeadress"


onfocus="this.value = '';"
onblur="if (this.value == '') {this.value = 'Ваша адрес';}" required=""
style="margin-bottom: 15px">

<label for="speciality">Выберите специальность</label>


<select class="form-control" name="idsection" id="speciality"
style="height: 48px; margin-bottom: 15px;">
<?php
$query = "SELECT `id`, `name` FROM section";
$result = mysqli_query($connection, $query);
?>
<?php
while ($section = mysqli_fetch_assoc($result)) {
?>
53
<option
value="<?php echo $section["id"]; ?>"><?php echo
$section["name"]; ?> </option>
<?php
}
?>
<?php mysqli_free_result($result); ?>
</select>

<label for="specialist">Выберите специалиста</label>


<select class="form-control" name="idsection" id="specialist"
style="height: 48px; margin-bottom: 15px;">
<?php
$query = "SELECT `id`, `firstname`, `secondname` FROM specialist";
$result = mysqli_query($connection, $query);
?>
<?php
while ($section = mysqli_fetch_assoc($result)) {
?>
<option
value="<?php echo $section["id"]; ?>"><?php echo
$section["firstname"]; ?> <?php echo $section["secondname"]; ?> </option>
<?php
}
?>
<?php mysqli_free_result($result); ?>
</select>

<label for="datetime">Выберите дату</label>


<input type="date" class="form-control" id="datetime" value="<?php
echo date("Y-m-d"); ?>" name="date" onfocus="this.value = '';"
onblur="if (this.value == '') {this.value = '<?php echo date("Y-m-d");
?>';}" required="" style="height: 48px;">

<?php //include "calendar.php" ?>

<hr>
<textarea type="text" name="message" onfocus="this.value = '';"
onblur="if (this.value == '') {this.value = 'Сообщение...';}"
required="">Сообщение...</textarea>
<hr>
<input type="submit" name="submit" value="Отправить заявку"
style="margin-bottom: 15px; margin-right: 5px; width: 69%; height: 49px;" ><input
type="reset" value="Отмена" style="background: orangered; width: 30%; height: 49px; color:
white; border: 0; border-radius: 5px">
</form>
</div>
<!-- <div class="col-md-4 contact-grid-right">-->
<!-- <h4>Наш адрес</h4>-->
<!-- <p>г. Москва, ул. Ленина, 22</p>-->
<!-- <ul>-->

54
<!-- <li>Номер телефона :+7 978 4589 2456</li>-->
<!-- <li>Номер телефона :+7 978 4589 2456</li>-->
<!-- <li>Факс :+7 978 4589 2456</li>-->
<!-- <li><a
href="mailto:info@example.com">medforyou@medforyou</a></li>-->
<!-- </ul>-->
<!-- </div>-->
<div class="clearfix"></div>
</div>
</div>
</div>
<!-- //contact -->
<?php include 'includes/footer.php';

<?php include 'includes/session.php'; ?>


<?php include 'includes/db_connect.php'; ?>
<?php require_once 'includes/functions.php'; ?>
<?php $layout_context = "public"; ?>
<?php include 'includes/header.php'; ?>
<?php find_selected_page(true); ?>
<!-- contact -->
<div class="news">
<div class="container">
<div class="news-grid">
<div class="col-md-8 blog-left">
<div class="blog-left-grid">
<h4>Добавить отдел</h4>
<h4 style="color: green"> <?php echo message(); ?></h4>
<h4 style="color: red"> <?php $errors = errors(); ?></h4>
<h4 style="color: red"><?php echo form_errors($errors); ?></h4>
<form action="processing_add_section.php" method="post">
<input type="text" name="name"
placeholder="Название" class="form-control"
required
style="margin-bottom: 15px; height: 48px; width: 100%">
<input type="text" placeholder="Номер кабинета" name="office"
class="form-control"
required
style="height: 48px; margin-bottom: 15px">
<hr>
<input type="submit" name="submit" class="form-control btn-primary"
value="Добавить" style="height: 48px;">
</form>
</div>
</div>
<div class="col-md-4 blog-right">
<h2>Меню</h2>
<ul>
<?php
if (htmlentities($_SESSION["username"]) == 'Admin' or
htmlentities($_SESSION["username"]) == 'Admin_2') {
include 'admin_menu.php';

55
} else {
$layout_context = "user";
echo "<li><a href='user_page.php'>Страница пользователя " .
htmlentities($_SESSION['username']) . " </a></li>";
}
?>
<li><a href="logout.php">Выход</a></li>
</ul>
</div>
<div class="clearfix"></div>
</div>
</div>
</div>
<!-- //contact -->
<?php include 'includes/footer.php';
?>

<?php include 'includes/session.php'; ?>


<?php include 'includes/db_connect.php'; ?>
<?php require_once 'includes/functions.php'; ?>
<?php $layout_context = "public"; ?>
<?php include 'includes/header.php'; ?>
<?php find_selected_page(true); ?>
<!-- contact -->
<div class="news">
<div class="container">
<div class="news-grid">
<div class="col-md-8 blog-left">
<div class="blog-left-grid">
<h4>Добавить специалиста</h4>
<h4 style="color: green"> <?php echo message(); ?></h4>
<h4 style="color: red"> <?php $errors = errors(); ?></h4>
<h4 style="color: red"><?php echo form_errors($errors); ?></h4>
<form action="processing_add_specialist.php" method="post">
<input type="text" name="firstname"
placeholder="Имя" class="form-control"
required
style="margin-bottom: 15px; height: 48px; width: 100%">
<input type="text" placeholder="Фамилия" name="secondname"
class="form-control"
required
style="height: 48px; margin-bottom: 15px">
<select class="form-control" name="idsection" style="height: 48px;
margin-bottom: 15px;">
<?php
$query = "SELECT `id`, `name` FROM section";
$result = mysqli_query($connection, $query);
?>
<?php
while ($section = mysqli_fetch_assoc($result)) {
?>
<option

56
value="<?php echo $section["id"]; ?>"><?php echo
$section["name"]; ?> </option>
<?php
}
?>
<?php mysqli_free_result($result); ?>
</select>
<textarea name="description"
class="form-control">Дополнительная информация</textarea>
<hr>
<input type="submit" name="submit" class="form-control btn-primary"
value="Добавить" style="height: 48px;">
</form>
</div>
</div>
<div class="col-md-4 blog-right">
<h2>Меню</h2>
<ul>
<?php
if (htmlentities($_SESSION["username"]) == 'Admin' or
htmlentities($_SESSION["username"]) == 'Admin_2') {
include 'admin_menu.php';
} else {
$layout_context = "user";
echo "<li><a href='user_page.php'>Страница пользователя " .
htmlentities($_SESSION['username']) . " </a></li>";
}
?>
<li><a href="logout.php">Выход</a></li>
</ul>
</div>
<div class="clearfix"></div>
</div>
</div>
</div>
<!-- //contact -->
<?php include 'includes/footer.php';
?>
<?php require_once 'includes/session.php'; ?>
<?php include 'includes/db_connect.php'; ?>
<?php require_once 'includes/functions.php'; ?>
<?php confirm_logged_in(); ?>
<?php $layout_context = "admin"; ?>
<?php include 'includes/header.php'; ?>
<!-- admin page -->
<div class="news">
<div class="container">
<div class="news-grid">
<div class="col-md-8 blog-left">
<div class="blog-left-grid">
<h2>
<?php

57
echo "Пользователь - ";
echo htmlentities($_SESSION["username"]); ?> </h2>
<h4>Добавить информацию</h4>
<h4 style="color: green"> <?php echo message(); ?></h4>
<h4 style="color: red"> <?php $errors = errors(); ?></h4>
<h4 style="color: red"><?php echo form_errors($errors); ?></h4>
<form action="processing_add_user_info.php" method="post">
<input type="text" name="firstname" value="<?php

echo $user['firstname'] ?>"


placeholder="Имя" class="form-control"
required
style="margin-bottom: 15px; height: 48px; width: 100%">
<input type="text" placeholder="Фамилия" name="secondname"
class="form-control"
required
style="height: 48px; margin-bottom: 15px">
<input type="text" placeholder="Дата рождения" name="dateofbirth"
class="form-control"
required
style="height: 48px; margin-bottom: 15px">
<input type="text" placeholder="Группа крови" name="blood"
class="form-control"
required
style="height: 48px; margin-bottom: 15px">
<input type="text" placeholder="Хроничесие болезни"
name="chronicdisease"
class="form-control"
style="height: 48px; margin-bottom: 15px">
<input type="text" placeholder="Аллергическая реакция"
name="allergy"
class="form-control"
style="height: 48px; margin-bottom: 15px">
<textarea name="otherinfo"
class="form-control">Дополнительная
информация...</textarea>
<hr>
<input type="submit" name="submit" class="form-control btn-primary"
value="Добавить" style="height: 48px;">
</form>
<div class="clearfix"></div>
</div>
</div>
<div class="col-md-4 blog-right">
<h2>Меню</h2>
<ul>
<?php
if (htmlentities($_SESSION["username"]) == 'Admin' or
htmlentities($_SESSION["username"]) == 'Admin_2') {
include 'admin_menu.php';
} else {
$layout_context = "user";

58
echo "<li><a href='user_page.php'>Информация о пользователе " .
htmlentities($_SESSION['username']) . " </a></li>";
echo "<li><a href='add_user_info.php'>Добавить
информацию</a></li>";
echo "<li><a href='change_user_info.php'>Изменить
информацию</a></li>";
}
?>
<li><a href="logout.php">Выход</a></li>
</ul>
</div>
<div class="clearfix"></div>
</div>
</div>
</div>
<!-- //admin page -->
<?php include 'includes/footer.php';

<?php require_once 'includes/session.php'; ?>


<?php require_once 'includes/functions.php'; ?>
<?php confirm_logged_in(); ?>
<?php $layout_context = "admin"; ?>
<?php include 'includes/header.php'; ?>
<!-- admin page -->
<div class="news">
<div class="container">
<div class="news-grid">
<div class="col-md-8 blog-left">
<div class="blog-left-grid">
<h2>
<?php
if (htmlentities($_SESSION["username"]) == 'Admin' or
htmlentities($_SESSION["username"]) == 'Admin_2') {
echo "Страница администратора";
} else {
echo "Страница пользователя";
$layout_context = "user";
}
?>
- <?php echo htmlentities($_SESSION["username"]); ?> </h2>
<p><?php echo htmlentities($_SESSION["username"]); ?>! Добро
пожаловать в админ-панель!</p>
<div class="clearfix"></div>
</div>
</div>
<div class="col-md-4 blog-right">
<h2>Меню</h2>
<ul>
<?php
if (htmlentities($_SESSION["username"]) == 'Admin' or
htmlentities($_SESSION["username"]) == 'Admin_2') {

59
include 'admin_menu.php';
} else {
$layout_context = "user";
echo "<li><a href='user_page.php'>Страница пользователя " .
htmlentities($_SESSION['username']) . " </a></li>";
}
?>
<li><a href="logout.php">Выход</a></li>
</ul>
</div>
<div class="clearfix"></div>
</div>
</div>
</div>
<!-- //admin page -->
<?php include 'includes/footer.php';

<?php require_once 'includes/session.php'; ?>


<?php include 'includes/db_connect.php'; ?>
<?php require_once 'includes/functions.php'; ?>
<?php confirm_logged_in(); ?>
<?php $layout_context = "admin"; ?>
<?php include 'includes/header.php'; ?>
<!-- admin page -->
<div class="news">
<div class="container">
<div class="news-grid">
<div class="col-md-8 blog-left">
<div class="blog-left-grid">
<h2>
<?php
echo "Пользователь - ";
echo htmlentities($_SESSION["username"]); ?> </h2>
<h4>Добавить информацию</h4>
<h4 style="color: green"> <?php echo message(); ?></h4>
<h4 style="color: red"> <?php $errors = errors(); ?></h4>
<h4 style="color: red"><?php echo form_errors($errors); ?></h4>
<form action="processing_change_user_info.php" method="post">
<?php
$username = htmlentities($_SESSION["username"]);
$query = "SELECT firstname, secondname, dateofbirth, blood,
chronicdisease, allergy, otherinfo FROM users WHERE username = '$username' ";
$result = mysqli_query($connection, $query);
confirm_query($result);
?>
<?php
while ($user = mysqli_fetch_assoc($result)) {
?>
<input type="text" name="firstname" value="<?php echo
$user['firstname'] ?>"
placeholder="Имя" class="form-control"

60
required
style="margin-bottom: 15px; height: 48px; width: 100%">
<input type="text" placeholder="Фамилия" name="secondname"
class="form-control"
value="<?php echo $user['secondname'] ?>"
required
style="height: 48px; margin-bottom: 15px">
<input type="text" placeholder="Дата рождения"
name="dateofbirth" class="form-control"
value="<?php echo $user['dateofbirth'] ?>"
required
style="height: 48px; margin-bottom: 15px">
<input type="text" placeholder="Группа крови" name="blood"
class="form-control"
value="<?php echo $user['blood'] ?>"
required
style="height: 48px; margin-bottom: 15px">
<input type="text" placeholder="Хроничесие болезни"
name="chronicdisease"
value="<?php echo $user['chronicdisease'] ?>"
class="form-control"
style="height: 48px; margin-bottom: 15px">
<input type="text" placeholder="Аллергическая реакция"
name="allergy"
value="<?php echo $user['allergy'] ?>"
class="form-control"
style="height: 48px; margin-bottom: 15px">
<textarea name="otherinfo"
class="form-control"><?php echo $user['otherinfo']
?></textarea>
<hr>
<input type="submit" name="submit" class="form-control btn-
primary"
value="Изменить" style="height: 48px;">
<?php
}
?>
</form>
<div class="clearfix"></div>
</div>
</div>
<div class="col-md-4 blog-right">
<h2>Меню</h2>
<ul>
<?php
if (htmlentities($_SESSION["username"]) == 'Admin' or
htmlentities($_SESSION["username"]) == 'Admin_2') {
include 'admin_menu.php';
} else {
$layout_context = "user";
echo "<li><a href='user_page.php'>Информация о пользователе " .
htmlentities($_SESSION['username']) . " </a></li>";

61
echo "<li><a href='add_user_info.php'>Добавить
информацию</a></li>";
echo "<li><a href='change_user_info.php'>Изменить
информацию</a></li>";
}
?>
<li><a href="logout.php">Выход</a></li>
</ul>
</div>
<div class="clearfix"></div>
</div>
</div>
</div>
<!-- //admin page -->
<?php include 'includes/footer.php';

<?php include 'includes/session.php'; ?>


<?php include 'includes/db_connect.php'; ?>
<?php require_once 'includes/functions.php'; ?>
<?php $layout_context = "public"; ?>
<?php include 'includes/header.php'; ?>
<?php find_selected_page(true); ?>
<!-- contact -->
<div class="contact">
<div class="container">
<h3>Вопрос специалисту</h3>
<p class="et">Задавайте свои вопросы в этой форме! Наши специалисты
прочитают и ответят Вам на эл. адрес.</p>
<div class="contact-grid">
<div class="col-md-8 contact-grid-left">
<h3 style="color: green"> <?php echo message(); ?></h3>
<h3 style="color: red"> <?php $errors = errors(); ?></h3>
<h3 style="color: red"><?php echo form_errors($errors); ?></h3>
<form action="processing_contactform.php" method="post">
<input type="text" value="Ведите свое Имя" name="name"
onfocus="this.value = '';"
onblur="if (this.value == '') {this.value = 'Ведите свое Имя';}"
required="" style="width: 100%">

<input type="email" value="Електронная почта" name="email"


onfocus="this.value = '';"
onblur="if (this.value == '') {this.value = 'Электронная почта';}"
required="" style="width: 100%">

<input type="date" class="form-control" name="date"


onfocus="this.value = '';"
onblur="if (this.value == '') {this.value = '';}" required=""
style="height: 48px;">
<hr>
<textarea type="text" name="question" onfocus="this.value = '';"
onblur="if (this.value == '') {this.value = 'Сообщение...';}"

62
required="">Сообщение...</textarea>
<hr>
<input type="submit" name="submit" value="Отправить вопрос">
</form>
</div>
<div class="col-md-4 contact-grid-right">
<h4>Наш адрес</h4>
<p>г. Москва, ул. Ленина, 22</p>
<ul>
<li>Номер телефона :+1 078 4589 2456</li>
<li>Номер телефона :+1 078 4589 2456</li>
<li>Факс :+1 078 4589 2456</li>
<li><a
href="mailto:info@example.com">medforyou@medforyou</a></li>
</ul>
</div>
<div class="clearfix"></div>
</div>
</div>
</div>
<!-- //contact -->
<?php include 'includes/footer.php';
?>

<?php include 'includes/session.php'; ?>


<?php include 'includes/db_connect.php'; ?>
<?php require_once 'includes/functions.php'; ?>
<?php require_once 'includes/validation_functions.php'; ?>
<?php
if (isset($_POST['submit'])) {
// Обработка формы
$menu_name = mysql_prep($_POST["menu_name"]);
$position = (int) $_POST["position"];
$visible = (int) $_POST["visible"];
// проверка формы
$required_fields = array("menu_name", "position", "visible");
validate_presences($required_fields);
$fields_with_max_lengths = array("menu_name" => 60);
validate_max_lengths($fields_with_max_lengths);
if (!empty($errors)) {
$_SESSION["errors"] = $errors;
redirect_to("new_subject.php");
}
$query = "INSERT INTO subjects (";
$query .= " menu_name, position, visible";
$query .= ") VALUES (";
$query .= " '{$menu_name}', {$position}, {$visible}";
$query .= ")";
$result = mysqli_query($connection, $query);
if ($result) {
// Success
$_SESSION["message"] = "Успешно добавлено";

63
redirect_to("manage_table.php");
} else {
// Failure
$_SESSION["message"] = "Ошибка добавления";
redirect_to("new_subject.php");
}
} else {
redirect_to("new_subject.php");
}
?>
<?php
if (isset($connection)) { mysqli_close($connection); }

<?php include 'includes/session.php'; ?>


<?php include 'includes/db_connect.php'; ?>
<?php require_once 'includes/functions.php'; ?>
<?php confirm_logged_in(); ?>
<?php
$admin = find_admin_by_id($_GET["id"]);
if (!$admin) {
// неверный ID администратора или админ не найден в БД
redirect_to("manage_admins.php");
}

$id = $admin["id"];
$query = "DELETE FROM admins WHERE id = {$id} LIMIT 1";
$result = mysqli_query($connection, $query);

if ($result && mysqli_affected_rows($connection) == 1) {


// Success
$_SESSION["message"] = "Администратор удален.";
redirect_to("manage_admins.php");
} else {
// Failure
$_SESSION["message"] = "Ошибка удаления администратора.";
redirect_to("manage_admins.php");
}

<?php include 'includes/session.php'; ?>


<?php include 'includes/db_connect.php'; ?>
<?php require_once 'includes/functions.php'; ?>
<?php
$current_page = find_page_by_id($_GET["page"], false);
if (!$current_page) {
// неверный ID страницы или она не найдена в БД
redirect_to("manage_table.php");
}
$id = $current_page["id"];
$query = "DELETE FROM pages WHERE id = {$id} LIMIT 1";
$result = mysqli_query($connection, $query);

if ($result && mysqli_affected_rows($connection) == 1) {

64
// Успшно
$_SESSION["message"] = "Страница удалена.";
redirect_to("manage_table.php");
} else {
// Не получилось
$_SESSION["message"] = "Ошибка удаления страницы.";
redirect_to("manage_table.php?page={$id}");
}
<?php include 'includes/session.php'; ?>
<?php include 'includes/db_connect.php'; ?>
<?php require_once 'includes/functions.php'; ?>
<?php $layout_context = "admin"; ?>
<?php include 'includes/header.php'; ?>
<?php find_selected_page(true); ?>
<div class="blog">
<!--table of client -->
<div class="typo">
<div class="container">

<div class="news-grid">
<div class="col-md-8 blog-left">
<div class="blog-left-grid">
<div class="page-header">
<h3 class="bars">Электронная очередь на прием</h3>
</div>
<table class="table table-bordered">
<thead>
<tr>
<th>Номер</th>
<th>Клиент</th>
<th>Адрес</th>
<th>Телефон</th>
<th>Дата</th>
<th>E-mail</th>
<th>Сообщение</th>
</tr>
</thead>
<tbody>
<?php
$query = "SELECT idzakaz, name_lastname_klienta, homeadress, date,
message, phonenumber, email FROM zakaz ";
$result = mysqli_query($connection, $query);
confirm_query($result);
?>
<?php
while ($master = mysqli_fetch_assoc($result)) {
?>
<tr>
<td><?php echo $master["idzakaz"]; ?></td>
<td><?php echo $master["name_lastname_klienta"]; ?></td>
<td><?php echo $master["homeadress"]; ?></td>
<td><?php echo $master["phonenumber"]; ?></td>

65
<td><?php echo $master["date"]; ?></td>
<td><?php echo $master["email"]; ?></td>
<td><?php echo $master["message"]; ?></td>
</tr>
<?php
}
?>
</tbody>
</table>

<div class="clearfix"></div>
</div>
</div>

<div class="col-md-4 blog-right">


<h2>Меню</h2>
<ul>
<?php
if (htmlentities($_SESSION["username"]) == 'Admin' or
htmlentities($_SESSION["username"]) == 'Admin_2') {
include 'admin_menu.php';
} else {
$layout_context = "user";
echo "<li><a href='user_page.php'>Информация о пользователе " .
htmlentities($_SESSION['username']) . " </a></li>";
echo "<li><a href='add_user_info.php'>Добавить
информацию</a></li>";
echo "<li><a href='change_user_info.php'>Изменить
информацию</a></li>";
}
?>
<li><a href="logout.php">Выход</a></li>
</ul>
</div>

</div>
</div>
</div>
<!-- //table of client -->

<?php include 'includes/footer.php';

<?php include 'includes/session.php'; ?>


<?php include 'includes/db_connect.php'; ?>
<?php require_once 'includes/functions.php'; ?>
<?php $layout_context = "admin"; ?>
<?php include 'includes/header.php'; ?>
<?php find_selected_page(true); ?>
<div class="blog">
<!--table of client -->

66
<div class="typo">
<div class="container">
<div class="news-grid">
<div class="col-md-8 blog-left">
<div class="blog-left-grid">
<div class="page-header">
<h3 class="bars">Список отделов</h3>
</div>
<table class="table table-bordered">
<thead>
<tr>
<th>Название</th>
<th>Кабинет</th>
</tr>
</thead>
<tbody>
<?php
$query = "SELECT name, office FROM section ";
$result = mysqli_query($connection, $query);
confirm_query($result);
?>
<?php
while ($question = mysqli_fetch_assoc($result)) {
?>
<tr>
<td><?php echo $question["name"]; ?></td>
<td><?php echo $question["office"]; ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
<div class="clearfix"></div>
</div>
</div>
<div class="col-md-4 blog-right">
<h2>Меню</h2>
<ul>
<?php
if (htmlentities($_SESSION["username"]) == 'Admin' or
htmlentities($_SESSION["username"]) == 'Admin_2') {
include 'admin_menu.php';
} else {
$layout_context = "user";
echo "<li><a href='user_page.php'>Информация о пользователе " .
htmlentities($_SESSION['username']) . " </a></li>";
echo "<li><a href='add_user_info.php'>Добавить
информацию</a></li>";
echo "<li><a href='change_user_info.php'>Изменить
информацию</a></li>";
}

67
?>
<li><a href="logout.php">Выход</a></li>
</ul>
</div>
</div>
</div>
</div>
<!-- //table of client -->
<?php include 'includes/footer.php';

68
ПРИЛОЖЕНИЕ Б. ИСХОДНЫЙ КОД МОДУЛЯ РЕГИСТРАЦИИ

<?php include 'includes/session.php'; ?>


<?php include 'includes/db_connect.php'; ?>
<?php require_once 'includes/functions.php'; ?>
<?php require_once 'includes/validation_functions.php'; ?>
<?php
$username = "";
if (isset($_POST['submit'])) {
// обработка формы
// проверка
$required_fields = array("username", "password");
validate_presences($required_fields);

$fields_with_max_lengths = array("username" => 30);


validate_max_lengths($fields_with_max_lengths);

if (empty($errors)) {
// Создание
$username = mysql_prep($_POST["username"]);
$hashed_password = password_encrypt($_POST["password"]);
$query = "INSERT INTO admins (";
$query .= " username, hashed_password";
$query .= ") VALUES (";
$query .= " '{$username}', '{$hashed_password}'";
$query .= ")";
$result = mysqli_query($connection, $query);
if ($result) {
// Усшех
$_SESSION["message"] = "Пользователь добавлен";
redirect_to("login.php");
} else {
// Не получилось
$_SESSION["message"] = "Ошибка добавления пользователя";
}
}
} else {

} // if (isset($_POST['submit']))

?>

69
<?php $layout_context = "user"; ?>
<?php include 'includes/header.php'; ?>
<!-- Форма авторизации на сайте -->
<div class="blog">
<div class="typo">
<div class="container">
<div class="contact-grid">
<h2>Регистрация на сайте</h2>
<div class="col-md-12 contact-grid-left">
<h3 style="color: green"> <?php echo message(); ?></h3>
<h3 style="color: red"><?php echo form_errors($errors); ?></h3>
<form action="registration.php" method="post">
<input type="text" name="username"
required=""
style="margin-bottom: 15px; height: 48px; width: 100%">

<input type="password" value="Пароль" name="password" onfocus="this.value = '';"


required=""
class="form-control" style="height: 48px;">
<hr>
<input type="submit" name="submit" value="Регистрация">
</form>
</div>
</div>
</div>
</div>
</div>
<?php include 'includes/footer.php'; ?>

70
ПРИЛОЖЕНИЕ В. ИСХОДНЫЙ КОД МОДУЛЯ ЗАПИСИ НА ПРИЕМ

<?php include 'includes/session.php'; ?>


<?php include 'includes/db_connect.php'; ?>
<?php require_once 'includes/functions.php'; ?>
<?php $layout_context = "public"; ?>
<?php include 'includes/header.php'; ?>
<?php find_selected_page(true); ?>
<!-- contact -->
<div class="contact">
<div class="container">
<h3>Записаться на прием</h3>
<p class="et">Заполните форму записи на прием. И наши специалисты будут ждать Вас в
нашем заведении!</p>
<div class="contact-grid">
<div class="col-md-8 contact-grid-left">
<h3 style="color: green"> <?php echo message(); ?></h3>
<h3 style="color: red"> <?php $errors = errors(); ?></h3>
<h3 style="color: red"><?php echo form_errors($errors); ?></h3>
<form action="processing_add_client.php" method="post">
<input type="text" value="Ведите свою Фамилию и Имя"
name="name_lastname_klienta"
onfocus="this.value = '';"
onblur="if (this.value == '') {this.value = 'Ведите свою Фамилию и Имя';}"
required="">
<input type="email" value="Електронная почта" name="email" onfocus="this.value = '';"
onblur="if (this.value == '') {this.value = 'Электронная почта';}" required="">
<input type="text" value="Номер телефона" name="phonenumber" onfocus="this.value =
'';"
onblur="if (this.value == '') {this.value = 'Номер телефона';}" required=""
style="margin-bottom: 15px">
<input type="text" value="Домашний адрес" name="homeadress" onfocus="this.value =
'';"
onblur="if (this.value == '') {this.value = 'Ваша адрес';}" required=""
style="margin-bottom: 15px">
<input type="date" class="form-control" name="date" onfocus="this.value = '';"
onblur="if (this.value == '') {this.value = '';}" required="" style="height: 48px;">
<hr>
<textarea type="text" name="message" onfocus="this.value = '';"
onblur="if (this.value == '') {this.value = 'Сообщение...';}"
required="">Сообщение...</textarea>
<hr>

71
<input type="submit" name="submit" value="Отправить заявку">
</form>
</div>
<div class="col-md-4 contact-grid-right">
<h4>Наш адрес</h4>
<p>г. Москва, ул. Ленина, 22</p>
<ul>
<li>Номер телефона :+7 978 4589 2456</li>
<li>Номер телефона :+7 978 4589 2456</li>
<li>Факс :+7 978 4589 2456</li>
<li><a href="mailto:info@example.com">medforyou@medforyou</a></li>
</ul>
</div>
<div class="clearfix"></div>
</div>
</div>
</div>
<!-- //contact -->
<?php include 'includes/footer.php';

72
ПРИЛОЖЕНИЕ Г. ИСХОДНЫЙ КОД МОДУЛЯ
АДМИНИСТРАТИВНОЙ ПАНЕЛИ

<?php include 'includes/session.php'; ?>


<?php include 'includes/db_connect.php'; ?>
<?php require_once 'includes/functions.php'; ?>
<?php confirm_logged_in(); ?>
<?php $layout_context = "admin"; ?>
<?php include 'includes/header.php'; ?>
<?php find_selected_page(); ?>
<!-- admin page -->
<div class="news">
<div class="container">
<div class="news-grid">
<div class="col-md-8 blog-left">
<div class="blog-left-grid">
<h2>Управление сайтом</h2>
<?php echo message(); ?>
<?php if ($current_subject) { ?>
<h2>Редактирование страниц категорий</h2>
Название: <?php echo htmlentities($current_subject["menu_name"], ENT_QUOTES,
"UTF-8"); ?>
<br/>
Позиция: <?php echo $current_subject["position"]; ?><br/>
Видимость: <?php echo $current_subject["visible"] == 1 ? 'да' : 'нет'; ?><br/>
<br/>

<a href="edit_subject.php?subject=<?php echo urldecode($current_subject["id"]);


?>">Изменить</a>

<div style="margin-top: 2em; border-top: 1px solid #000000;">


<h3>Страницы в этой категории:</h3>
<ul>
<?php
$subject_pages = find_pages_for_subject($current_subject["id"]);
while ($page = mysqli_fetch_assoc($subject_pages)) {
echo "<li>";
$safe_page_id = urlencode($page["id"]);
echo "<a href=\"manage_table.php?page={$safe_page_id}\">";
echo htmlentities($page["menu_name"], ENT_QUOTES, "UTF-8");
echo "</a>";

73
echo "</li>";
}
?>
</ul>
<br/>
+ <a href="new_page.php?subject=<?php echo urlencode($current_subject["id"]);
?>">Добавить
новую
страницу в категорию</a>
</div>
<?php } elseif ($current_page) { ?>
<h2>Редактирование страниц</h2>
<p><a href="edit_page.php?page=<?php echo urlencode($current_page['id']); ?>"
class="btn btn-primary">Редактировать
страницу</a></p>
Название: <?php echo htmlentities($current_page["menu_name"], ENT_QUOTES,
"UTF-8"); ?><br/>
Позиция: <?php echo $current_page["position"]; ?><br/>
Видимость: <?php echo $current_page["visible"] == 1 ? 'yes' : 'no'; ?><br/>
Содержимое:<br/>
<div class="view-content">
<?php echo($current_page["content"]); ?>
</div>
<?php } else { ?>
Пожалуйста, выберите пункт меню
<?php } ?>
</div>
</div>
<div class="col-md-4 blog-right">
<?php
if (htmlentities($_SESSION["username"]) == 'Admin' or
htmlentities($_SESSION["username"]) == 'Admin_2') {
echo "<h2>Меню публичной части</h2>";
echo navigation($current_subject, $current_page);
}
?>
<?php// echo navigation($current_subject, $current_page); ?>
<h2>Меню</h2>
<ul>
<?php
if (htmlentities($_SESSION["username"]) == 'Admin' or
htmlentities($_SESSION["username"]) == 'Admin_2') {

74
include 'admin_menu.php';
} else {
$layout_context = "user";
echo "<li><a href='user_page.php'>Страница пользователя " .
htmlentities($_SESSION['username']) . " </a></li>";
}
?>
<li><a href="logout.php">Выход</a></li>
</ul>
</div>
<div class="clearfix"></div>
</div>
</div>
</div>

<?php include 'includes/footer.php';

75