Разработка информационной системы для раскрытия отчетности жилищно-коммунальных организаций
ВВЕДЕНИЕ
Интернет - это всемирная компьютерная сеть,
основным назначением которой является совместное использование информации.
Интернет представляет собой совокупность множества региональных и ведомственных
сетей, функционирующих на основе протокола обмена данными IP (Internet
Protocol), объединенных в одну адресную систему.
Более корректно под словом Интернет следует
понимать не только множество соединенных между собой компьютеров, но протокол
обмена, то есть, принятые правила обмена данными и формат этих данных, а также
совокупность информационных услуг, предоставляемых в сети.
В наше время безумной скорости развития одними
красиво оформленным текстом и картинками на веб-сайте никого не удивить. К тому
же требования к сайтам существенно ужесточились. Теперь для успешного развития
компании в сети Интернет необходимо предоставлять потенциальным пользователям
всякого рода возможности: подписки, рассылку, поиск по сайту, обратную связь и
прочее другое.
При помощи одного html этого всего не достичь,
так как это всего лишь язык разметки, который является инструментом для
создания гиперссылок, вставки изображений и т.д. Для наглядности приведём
простой пример. При помощи данного языка очень просто и очень быстро можно
сделать форму для отправки какого-нибудь запроса. Такая форма будет иметь все
нужные атрибуты: поле для ввода данных и кнопку отправки. Но при её нажатии
ровным счётом ничего не произойдёт, так как не был задан сценарий действий,
который необходимо выполнить, чтобы был какой-то конкретный результат. Вот
именно поэтому создание интерактивных компонентов является задачей
Web-программирования.программирование осуществляется с помощью специальных
программных средств - скриптов. Они, в свою очередь, делятся на два основных
вида: серверные и клиентские. Серверные скрипты выполняются на сервере, то есть
того компьютера, на котором размещён сайт, ещё до загрузки страниц сайта на
компьютер пользователя. А клиентские скрипты выполняются уже после загрузки
этих страниц на компьютер пользователя.
Таким образом, моей задачей в дипломе является
реализация сайта, куда будут заноситься все необходимые данные, описанные в
регламенте Фонда содействию реформирования ЖКХ. После выполнения этого действия
данные будут отправляться специальной кнопкой на сайт реформы ЖКХ, где они
будут обрабатываться и использоваться в дальнейшем для проверки оплаты счетов
за квартиры.
На данном сайте можно узнать всю
информацию о своей деятельности, которую организации, осуществляющие
деятельность в сфере управления многоквартирными домами, обязаны раскрывать
путём публикации её в сети Интернет на сайте www.reformagkh.ru, определённый
приказом Минрегиона РФ от 02.04.2013 года № 124. Также на нём можно узнать всё
о капитальном ремонте: найти ответы на самые актуальные вопросы и контактную
информацию специалистов в своём регионе и многое другое.
1. АНАЛИТИЧЕСКИЙ ОБЗОР
Для того, чтобы начать разрабатывать
данный дипломный проект, необходимо провести анализ похожих проектов и на чём
они разрабатывались, то есть какие программные и аппаратные средства
использовались при создании.
1.1 Анализ схожих проектов
Приложение «Инфокрафт: формула ЖКХ»
Программа «Инфокрафт: формула ЖКХ»
предназначена для автоматизации учёта в ТСЖ, ЖСК, управляющих компаниях ЖКХ. Её
решения позволяют помогать рассчитывать квартплату, вести бухгалтерский и
паспортный учёт, учитывать жилой фонд, обслуживать собственников помещений и
вести претензионную работу. Решения разработаны на платформе «1С: Предприятие8»
и сертифицированы фирмой «1С». Работают на отдельном компьютере, в локальной
сети или в облаке «Инфокрафт ЖКХ 365».
Программный комплекс «Супер МКД -
Инфообмен»
Программный комплекс «Супер МКД -
Инфообмен» разработан с использованием современных информационных технологий. С
комплексом может работать неограниченное количество пользователей. При работе с
«Супер МКД - Инфообмен» формируется единая информационная среда,
автоматизируются процессы по подготовке данных для раскрытия информации, что
позволяет:
Сократить расходы на предоставление
внешней отчётности на www.reformagkh.ru.
Без дополнительных средств и затрат
времени сотрудников обеспечить раскрытие информации на втором ресурсе -
предоставленном сайте с доменным именем формата *****.731pp.ru
Анализ программных средств
разработки Web-приложений
Для того, чтобы создать данный
проект, необходимо выбрать и изучить при необходимости язык для разработки
Web-приложения. Ниже приведён анализ всех самых популярных языков
Web-программирования.
Язык РНР
РНР - скриптовый язык общего
назначения для разработки серверных частей веб-приложений. На заре своего
развития PHP был чистым интерпретатором (исполнял рукописный текст программы, а
не байт-код), что не способствовало большой производительности. Далее
оказалось, что перевести текст программы в промежуточный оптимизированный
байт-код, а затем уже исполнить результат оказывается намного быстрее.
Благодаря этому современный движок РНР состоит из двух частей: транслятора в
байт-код и интерпретатора байт-кода.
Плюсы:
Является свободным программным
обеспечением, распространяемым под особой лицензией (PHP license)
Легок в освоении на всех этапах
Поддерживается большим сообществом
пользователей и разработчиков
Имеет развитую поддержку баз данных
Имеется огромное количество
библиотек и расширений языка
Может использоваться в изолированной
среде
Предлагает натуральные средства
организации веб-сессий, программный интерфейс расширений
Является довольно полной заменой
проприетарной среды ASP (Active Server Pages) от Microsoft
Может быть развёрнут на любом
сервере
Портирован под большое количество аппаратных
платформ и операционных систем
Минусы:
Не подходит для создания десктопных
приложений или системных компонентов
Имеет слабые средства работы с
исключениями
Глобальные параметры конфигурации
влияют на базовый синтаксис языка, что затрудняет настройку сервера и
разворачивание приложений
Объекты передаются по значению, что
смущает программистов, привыкших к передаче объектов по ссылке
Веб-приложения, написанные на РНР,
зачастую имеют проблемы с безопасностью
Язык Ruby (Ruby
on Rails)
Ruby - динамический императивный
объектно-ориентированный язык программирования, разработанный Юкихиро
Матсумото. Ruby был создан под влиянием таких языков, как Perl, Eiffel и
Smalltalk. Характеризуется динамической типизацией и автоматическим управлением
памятью. Язык Ruby используется в веб-разработке в составе открытого
веб-фреймворка Rails, чаще называемого Ruby on Rails (RoR).
Плюсы:
Открытая разработка
Работает на многих платформах
Может внедряться в HTML-разметку
Относится к языкам программирования
сверхвысокого уровня (VHLL), то есть обладает высоким уровнем абстракции и
предметным подходом в реализации алгоритмов, благодаря чему программы хорошо
масштабируются и легко сопровождаются
Реализует концептуально чистую
объектно-ориентированную парадигму
Предоставляет продвинутые методы
манипуляции строками и текстом
Легко интегрирует в свои программы
высокопроизводительные серверы баз данных (DB2, MySQL, Oracle и Synbase)
Простой и чистый синтаксис, что
делает его легким в обучении и многие другие
Недостатки:
Обучение языку выше начального
уровня может оказаться непростым
Информационных ресурсов, посвященных
Ruby, на данный момент недостаточно
Низкая производительность по
сравнению со многими другими языками, применяемых в веб-разработкеотносительно
медленно развивается и разрабатывается- язык программирования общего
назначенияшироко применяется как интерпретируемый язык для скриптов различного
назначения, хотя существуют и трансляторы языка Python.
Как и Ruby, Python имеет целью
приблизить синтаксис реальной программы, написанной на нём, к описывающему
задачу псевдокоду, что позволяет программисту уменьшить объём программы. Идея
создания данного языка возникла в конце 1980-х годов и была реализована Гвидо
ван Россумом.
Элегантный дизайн и эффектный,
дисциплинирующий синтаксис этого языка облегчают программистам совместную
работу с кодом. Python - мультипарадигмальный язык программирования: он
позволяет сомещать процедурный подход к написанию кода с
объектно-ориентированным и функциональным.
Плюсы:
Открытая разработка
Прост в обучении, особенно на
начальном этапе
Особенности синтаксиса стимулируют
программиста писать хорошо читаемый код
Предоставляет средства быстрого
прототипирования и динамической семантики
Имеет большое сообщество, позитивно
настроенное по отношению к новичкам
Множество полезных библиотек и
расширений легко использовать в своих проектах
Механизмы модульности хорошо
продуманы и могут легко использоваться и др.
Недостатки:
Не слишком удачная поддержка
многопоточности
Отсутствие коммерческой поддержки
средств разработки
Изначальная ограниченность средств
для работы с базами данных
Низкая производительность
1.2 Анализ требований к приложению
Требования, предъявляемые к
Web-приложению:
Надёжность - свойство приложения
сохранять способность сохранять во времени значения всех параметров. Надёжное
приложение должно обеспечивать доступ ко всем функциям для пользователя при
любых условиях.
Безопасность включает в себя:
разграничение прав доступа, авторизации и верификация пользователей.
Масштабируемость - способность
системы увеличивать свою производительность при повышенной нагрузке и
добавлении ресурсов. Для пользователей должен оставаться незаметным момент
(т.е. время отклика системы на запросы пользователя не должно заметно
изменяться), когда возрастёт нагрузка (например, к приложению получают доступ
одновременно ещё несколько пользователей ).
Кроссплатформенность - информация
должна отображаться в том виде, в каком она есть, в самых популярных браузерах,
а именно Google Chrome, Opera, Mozilla Firefox и Safari.
2. ПРОЕКТИРОВАНИЕ ПП
После того, как был проведен теоретический
анализ, необходимо приступить к проектированию приложения, то есть нужно
определиться с его функциональностью, решить вопросы, связанные со средствами
разработки, структурами данных и приложения и алгоритмов.
Определение функциональности ПП
Функциональность программного продукта - это
способность его выполнять список функций, удовлетворяющий предполагаемые потребности
простого пользователя.
В данном случае требуются:
интуитивно-понятный интерфейс, то есть простой
пользователь не будет теряться в работе с информацией в программном продукте в
первый раз
приемлемый внешний вид, где пользователю будет
комфортно работать с информацией в программном продукте (например, текст хорошо
видим и легко читается, фон не режет глаза и т.д.)
вся информация, которая будет заноситься в базу
данных программного продукта, будет сохраняться
прежде чем пользователь решит, какую информацию
ему необходимо занести, он сможет ознакомиться с ней, просто перейдя по ссылке
в виде заголовка столбца в основной информационной таблице
Выбор и обоснование средств разработки
Так как приложение представлено в виде сайта, то
безусловно понадобятся: HTML - язык вёрстки и таблица стилей CSS.
Для работы с базой данных будет использоваться
язык MySQL в программе «phpMyAdmin, потому что для написания серверной части
кода будет использоваться язык web-программирования PHP.
Язык PHP был выбран потому, что он был уже
немного знаком, он лёгок в освоении и он поддерживается на многих платформах,
что очень хорошо подходит к данному проекту. C данным языком буду работать в
двух программах: Notepad++ для настройки кодировки файлов и написания кода и
phpDisigner 7 для отладки кода.
Разработка структур и алгоритмов
Разработка структур данных базы данных
Итак, в базе данных будут находиться 7 таблиц:
cold_water_system_system_water_system_type_wall_material
Таблицы
«cold_water_system», «heating_system», «hot_water_system», «house_type»,
«house_wall_material» будет иметь
3 поля:
id, identificator и
text, где
поле
«id» с
типом
данных
int (численный)
- это
номер
строки
в
таблице
и
первичный
ключ,
поле
«identificator» с типом
данных
int (численный)
- это
число,
которое
несёт
в
себе
некоторую
информацию,
а
поле
«text» с
типом
данных
text будет
содержать
ту
самую
информацию.
Таблица «houses» будет содержать в себе 12
полей:
id_id_year_type_wall_material_system_water_system_water_system_quarter_living_quarter_common_property
Поле «id» с типом данных int (численный) - это
номер строки в таблице и первичный ключ. Поле «house_id» с типом данных int
(численный) - это номер здания. Поле «street» с типом данных varchar (любой
символ) будет содержать наименование улицы, где расположено здание. Поле
«build_year» с типом данных int (численный) будет содержать информацию о годе
введения в эксплуатацию данного здания. Поле «house_type» с типом данных int
(численный) будет содержать информацию о типе здания, которая будет
отображаться из поля «idientificator» таблицы «house_type». Поле
«house_wall_material» с типом данных int (численный) будет содержать информацию
о материале, из которого здание выстроено, которая будет отображаться из поля
«idientificator» таблицы «house_wall_material». Поле «heating_system» с типом
данных int (численный) будет содержать информацию о типе системы отопления
здания, которая будет отображаться из поля «idientificator» таблицы
«heating_system». Поле «hot_water_system» с типом данных int (численный) будет
содержать информацию о типе системы подачи горячей воды, которая будет
отображаться из поля «idientificator» таблицы «hot_water_system». Поле
«cold_water_system» с типом данных int (численный) будет содержать информацию о
типе системы подачи холодной воды, которая будет отображаться из поля
«idientificator» таблицы «cold_water_system». Поле «living_quarter» с типом
данных int (численный) будет содержать информацию о количестве жилой площади.
Поле «not_living_quarter» с типом данных int (численный) будет содержать информацию
о количестве нежилой площади. И последнее поле «area_common_property» с типом
данных decimal (десятичное число) будет содержать информацию об общей площади
собственности.
Разработка структуры сайта
Так как у меня нет навыка работы для создания макета
сайта, поэтому воспользуюсь встроенной в ОС Windows программой Paint, чтобы
создать примерную структуру программного продукта. Примерная структура сайта
изображена на Рисунке 1.
Рисунок 1 - Примерная структура сайта
Как видно в структуре сайта имеется 4 блока. В
блоке «Название сайта» соответственно будет наименование сайта. В блоке
«Авторизация пользователя» будут поля для ввода логина и пароля, а также две
кнопки: «войти» и «регистрация». В блоке «Основное меню» будут содержаться 3
ссылки на страницы на соответствующие страницы: «Главная», «База данных» и
Контакты». И последний блок «Контент». В нём будет отображаться информация
основной таблицы «houses», а так же будет создана кнопка «Добавить запись» для
ввода и сохранения новой информации в базе данных приложения.
3. РЕАЛИЗАЦИЯ ПП
3.1 Реализация базы данных
С того момента, как я получил данную тему на
диплом, мне уже было понятно, что без хранения данных тут никак не обойтись.
Приступив к реализации БД, я сначала создал основную таблицу «houses» при
помощи виртуальных команд.
Для её создания была выполнена команда:
CREATE TABLE houses (id INT(11),
house_id INT(10), street VARCHAR(10), build_year INT(10), house_type INT(1),
house_wall_material INT(1), heating_system INT(1), hot_water_system INT(1),
cold_water_system INT(1), house_state INT(1), house_floor_type INT(1),
electricity_system INT(1), gas_system INT(1), living_quarter INT(1),
not_living_quarter INT(1), area_common_property DECIMAL(10,2));
После её создания я заполнил одну строчку в ней
командой:
INSERT TABLE houses VALUES(0, 1, “Зосимовская”,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 500,00);
Это было сделано для того, чтобы при реализации
самого сайта, я мог видеть результат правильной работы кода HTML и PHP, но об
этом позже.
После того, как таблица была заполнена, я
приступил к реализации других таблиц и их заполнению.
Создание и заполнение таблицы house_type.
CREATE TABLE house_type (id INT(11),
identificator INT(1), text TEXT);TABLE house_type (1, 1, “Общежитие”);
INSERT TABLE house_type (2, 2, “Объект
индивидуального жилищного строительства”);TABLE house_type (3, 3, “Жилой дом
блокированной застройки”);
INSERT TABLE house_type (4, 4, “Многоквартирный
дом”);
Создание и заполнение таблицы house_wall_material.
CREATE TABLE house_wall_material (id
INT(11), identificator INT(1), text TEXT);TABLE house_wall_material (1, 1, “Нет
данных”);TABLE
house_wall_material (2, 2, “Каменные,
кирпичные”);TABLE
house_wall_material (3, 3, “Панельные”);TABLE
house_wall_material (4, 4, “Блочные”);TABLE
house_wall_material (5, 5, “Смешанные”);TABLE
house_wall_material (6, 6, “Монолитные”);TABLE
house_wall_material (7, 7, “Деревянные”);TABLE
house_wall_material (8, 8, “Прочие”);
Создание и заполнение таблицы heating_system.
CREATE TABLE heating_system (id
INT(11), identificator INT(1), text TEXT);TABLE heating_system (1, 1, “Нет
данных”);TABLE
heating_system (2, 2, “Отсутствует”);TABLE
heating_system (3, 3, “Центральное”);TABLE
heating_system (4, 4, “Автономное”);TABLE
heating_system (5, 5, “Поквартирное”);TABLE
heating_system (6, 6, “Печное”);
Создание и заполнение таблицы hot_water_system.
CREATE TABLE hot_water_system (id
INT(11), identificator INT(1), text TEXT);TABLE hot_water_system (1, 1, “Нет
данных”);TABLE
hot_water_system (2, 2, “Отсутствует”);TABLE
hot_water_system (3, 3, “Централизованная
открытая”);TABLE
hot_water_system (4, 4, “Централизованная
закрытая”);TABLE
hot_water_system (5, 5, “Поквартирная”);TABLE
hot_water_system (6, 6, “Автономная”);
Создание и заполнение таблицы cold_water_system.
CREATE TABLE cold_water_system (id
INT(11), identificator INT(1), text TEXT);TABLE cold_water_system (1, 1, “Нет
данных”);TABLE
cold_water_system (2, 2, “Отсутствует”);TABLE
cold_water_system (3, 3, “Централизованное”);TABLE
cold_water_system (4, 4, “Открытое”);
Создание и заполнение таблицы house_state.
CREATE TABLE house_state (id
INT(11), identificator INT(1), text TEXT);TABLE house_state (1, 1,
“normal”);TABLE house_state (2, 2, “warning”);TABLE house_state (3, 3,
“alarm”);TABLE house_state (4, 4, “noinfo”);
Создание и заполнение таблицы house_floor_type.
CREATE TABLE house_floor_type (id
INT(11), identificator INT(1), text TEXT);TABLE house_floor_type (1, 1, “нет
данных”);TABLE
house_floor_type (2, 2, “железобетонные”);TABLE
house_floor_type (3, 3, “деревянные”);TABLE
house_floor_type (4, 4, “смешанные”);
Создание и заполнение таблицы
electricity_system.
CREATE TABLE electricity_system (id
INT(11), identificator INT(1), text TEXT);TABLE electricity_system (1, 1, “нет
данных”);TABLE
electricity_system (2, 2, “отсутствует”);TABLE
electricity_system (3, 3, “централизованное”);TABLE
electricity_system (4, 4, “комбинированное”);
Создание и заполнение таблицы gas_system.
CREATE TABLE gas_system (id INT(11),
identificator INT(1), text TEXT);TABLE gas_system (1, 1, “нет
данных”);TABLE
gas_system (2, 2, “отсутствует”);TABLE
gas_system (3, 3, “централизованное”);
Кстати говоря, хочу отметить, что все таблицы в
базе данных связаны , то есть имеется главная таблица «houses», а с ней имеют
связи оставшиеся таблицы, кроме таблицы «users» - она отдельно хранит
информацию о пользователях. Визуально связи и таблицы выглядят так, как
показано на рисунке 2.
Рисунок 2 - Таблицы и их связи мой БД
3.2 Реализация HTML- и PHP-кода
После проведения всех описанных в пункте 3.1
манипуляций я смело приступил к реализации сайта.
Сперва я создал 4 файла: index.php, header.php,
menu.php и style.css. В первом файле я реализовывал главную страницу сайта, во
втором файле - шапка сайта, в третьем - меню, которое располагалось прямо под
шапкой, а в последнем - таблица стилей моего сайта.
В первых трёх файлах я создал по одному блоку
div в формате:
<div class = header> это
шапка
</div>
<div class = menu> это
меню
</div>
<div class = content> это
контент
</div>
А в таблице стилей я прописал следующее для
каждого класса:
div.header
}.menu{: inline-block;: 100%;: 50px;
}.content{: block;: 700 px;: 100%
}
Немного поясню. Команда «display» позволяет
определить, как элемент должен быть показан в документе. Команда
«vertical-align» позволяет выровнять элемент. В данном случае - по центру.
Команда «width» позволяет задать ширину. Команда «height» позволяет задать
высоту элемента. С помощью команды «border» я залил границы каждого элемента,
то есть шапки, контента и меню чёрным цветом толщиной в 1 пиксель для
наглядности, чтобы было проще ориентироваться себе. А командой «background» я
задал фон шапке с помощью файла, найденного на просторах сети Интернет
специально подогнанного под необходимые размеры. В итоге всего этого мой
предварительный результат выглядел почти так же, как на рисунке 3.
Рисунок 3 - Предварительный вид сайта
Следующим мои шагом было создание фона контента,
а также создание таблицы, где будет отображаться вся основная информация.
Создание головы
таблицы.
<div align="center">
<font face="Times New
Roman" size="2" color="black">
<table border = "1"
align="center" cellpadding="6">
<tr>
<th>Номер
дома</th>
<th>Улица</th>
<th>Год основания</th>
<th><a
href="house_typeDB.php">Тип
здания<a></th>
<th><a
href="house_wall_material.php">Внешний
материал
здания</th>
<th><a
href="heating_system.php">Система
отопления</th>
<th><a
href="hot_water_system.php">Система
подачи
горячей
воды</th>
<th><a
href="cold_water_system.php">Система
подачи
холодной
воды</th>
<th>Жилая площадь</th>
<th>Нежилая площадь</th>
<th>Общая площадь</th>
</tr>
Немного пояснений по порядку. Тег <font>
позволяет задать некоторые свойства таблицы. В моём примере я задал свойства
шрифта, то есть стиль "Times New Roman", размер - 2 и цвет шрифта -
черный.
Далее я создаю таблицу с помощью тегов
<table></table>, также задаю ей свойства: «border» - создаю заливку
границ шириной в 1 пиксель, «align» - выравнивание текста внутри таблицы по
центру, «cellpadding=”6”» - задаю расстояние в ячейках таблицы между текстом и
границей ячейки.
Следующими тегами <th></th> создаю
заголовки столбцов, которые выделены полужирным начертанием. Попутно некоторые
заголовки я создаю в виде ссылок при помощи тегов <a></a>, указывая
при этом, на какой сайт или в какой файл она приведёт. Те файлы, что указаны в
ссылках, будут созданы позднее.
После того, как заголовки столбиков таблицы были
созданы, необходимо создать оставшуюся часть таблицы. Продолжим код создания
таблицы, но сперва нам необходимо подключиться к созданной раннее базе данных.
Это делается очень просто.
Создаётся новый файл сonnection.php, который
содержит следующие строки:
<?php
$host="localhost";
$user="root";
$password="qwerty";
$db="diplom";
$connection = mysql_connect($host,
$user, $password) or
die("Error");_query("set_client='utf8");_query("set
character_set_results='utf8");_query("set collation_connection='utf8_general_ci'");_query
("SET NAMES utf8");
$select_bd = mysql_select_db($db,
$connection) or die("Error");
?>
Кратко поясню, что делает этот файл. Перед тем,
как вообще зайти в интерфейс программы phpMyAdmin, чтобы создать базу данных,
мне требовалось создать пользователя. Таким образом, созданная БД имеет свой
хост, своего пользователя, пароль и имя базы данных. Эту информацию и хранят те
четыре переменные, что описаны в коде (имя переменной соответствует самой
информации). Следующая переменная $connection создаёт подключение к phpMyAdmin.
Если подключение успешное, то продолжаем дальше, в противном случае - выводит
сообщение о том, что подключение не удалось. А переменная $connect_bd позволяет
нам подключиться к той базе данных, которая указана в скобках.
А теперь вернёмся к завершению создания таблицы.
Последняя часть
кода
таблицы:
<?php
$result = mysql_query("SELECT *
FROM houses");($myrow = mysql_fetch_array($result))
{
$pole1=$myrow['house_id'];
$pole2=$myrow['street'];
$pole3=$myrow['build_year'];
$pole4=$myrow['house_type'];
$pole5=$myrow['house_wall_material'];
$pole6=$myrow['heating_system'];
$pole7=$myrow['hot_water_system'];
$pole8=$myrow['cold_water_system'];
$pole9=$myrow['living_quarter'];
$pole10=$myrow['not_living_quarter'];
$pole11=$myrow['area_common_property'];"<div>
<tr>
<td
align='center'>$pole1</td>
<td
align='center'>$pole2</td>
<td
align='center'>$pole3</td>
<td
align='center'>$pole4</td>
<td
align='center'>$pole5</td>
<td
align='center'>$pole6</td>
<td
align='center'>$pole7</td>
<td
align='center'>$pole8</td>
<td
align='center'>$pole9</td>
<td
align='center'>$pole10</td>
<td
align='center'>$pole11</td>
</tr>";"</div>";
}?>
</table>
Итак, в переменную $result заносится выборка
информация каждого поля одной строчки из таблицы «houses». Затем эта информация
записывается в массив $myrow. Далее каждое поле из таблицы отдельно
записывается в свою переменную. А цикл «while» помогает пробежаться по каждой
записи в таблице и. И наконец, с помощью команды вывода «echo» мы «рисуем ещё
строчку таблицы в документе, тем самым она заполняется с помощью «while».
Результат этого кода представлен на рисунке 4.
Ссылки, которые были созданы в начале кода
таблицы, указывают на файлы, благодаря которым информация отображается похожим
образом. Поэтому их создание я не буду сюда включать.
Следующим этапом проектирования было создание
кнопки, с помощью которой пользователь мог бы заносить информацию прямо с сайта
в базу данных, её сохранение и отображение.
Сперва нужно создать кнопку, которая могла бы
отправить пользователя на страницу, где пользователь мог был занести данные в
БД.
<form>
<button
formaction="invite.php">Добавить
запись</button>
</form>
С помощью этого куска кода я создаю форму, в
которой создаётся кнопка с говорящим названием «Добавить запись». Нажав на неё,
пользователь попадает на заранее созданную страницу в файле invite.php. Часть
кода, хранимого в этом файле такова:
<div align="center">
<form
action="query-invite.php" method="post">
<label>Номер
дома:</label><br
/>
<input type="text"
name="house_id"><br />
<label>Улица:</label><br
/>
<input type="text"
name="street"><br />
<label>Год ввода в
эксплуатацию:</label><br />
<input type="text"
name="build_year"><br />
<label>Тип
здания:</label><br
/>
<?php
$result = mysql_query("SELECT
identificator FROM house_type");'<select style="width: 175px"
name="house_type">';($row = mysql_fetch_array($result))
{
$pole1=$row['identificator'];"<option
value='$row[identificator]'>$row[identificator]</option>";
}"</select>";
?></br>
<label>Внешний
материал здания:</label><br
/>
<?php
$result = mysql_query("SELECT
type FROM house_wall_material");'<select style="width: 175px"
name="house_wall_material">';($row = mysql_fetch_array($result))
{
$pole1=$row['identificator'];"<option
value='$row[type]'>$row[type]</option>";
}"</select>";
?></br>
<label>Система
отопления:</label><br
/>
<?php
$result = mysql_query("SELECT
identificator FROM heating_system");'<select style="width:
175px" name="heating_system" >';($row =
mysql_fetch_array($result))
{
$pole1=$row['identificator'];"<option
value='$row[identificator]'>$row[identificator]</option>";
}"</select>";
?></br>
<label>Система
подачи горячей воды:</label><br
/>
<?php
$result = mysql_query("SELECT
identificator FROM hot_water_system");'<select style="width:
175px" name="hot_water_system">';($row =
mysql_fetch_array($result))
{
$pole1=$row['identificator'];"<option
value='$row[identificator]'>$row[identificator]</option>";
}"</select>";
?></br>
<label>Система подачи холодной
воды:</label><br />
<?php
$result = mysql_query("SELECT
identificator FROM cold_water_system");'<select style="width:
175px" name="cold_water_system">';($row =
mysql_fetch_array($result))
{
$pole1=$row['identificator'];"<option
value='$row[identificator]'>$row[identificator]</option>";
}"</select>";
?></br>
<label>Жилая
площадь:</label><br
/>
<input type="text"
name="living_quarter"><br />
<label>Нежилая
площадь:</label><br
/>
<input type="text"
name="not_living_quarter"><br />
<label>Общая
площадь:</label><br
/>
<input type="text"
name="area_common_property"><br />
<input type="submit"
name="submit"><br />
</form>
</div>
Часть информации заносится в поле вручную. Для
остальная части был сделан специально выпадающий список с помощью тега
<select></select>. В тег <option></option> заносится
содержимое столбца «identificator» соответствующей таблицы, которая указана в
переменной $result. Это одна из двух причин, для чего были созданы другие
таблицы, на которые имеются ссылки. Принцип создания выпадающего списка очень
похож с созданием таблицы, поэтому я его описывать не стану. Результат можно
увидеть на рисунке 5.
Рисунок 5 - Добавление новой записи
Чтобы отправить в БД занесённые данные в этих
полях, необходим файл query-invite.php, на который ссылается форма, описанная
выше для занесения данных. Содержимое этого
файла
таково:
<?php_once
"connection.php";
$query = "INSERT INTO houses
VALUES(0, '".$_POST['house_id']."', '".$_POST['street']."',
'".$_POST['build_year']."', '".$_POST['house_type']."',
'".$_POST['house_wall_material']."', '".$_POST['heating_system']."',
'".$_POST['hot_water_system']."',
'".$_POST['cold_water_system']."',
'".$_POST['living_quarter']."',
'".$_POST['not_living_quarter']."',
'".$_POST['area_common_property']."')";
$result = mysql_query($query,
$connection ) or die("Не
удалось
подключиться
к
серверу");("Location:
DB.php");
?>
Сначала, включаем в этот файл connection.php
файл, чтобы подключиться к БД, в которую нужно занести данные. После в
переменную $query записываем с помощью метода POST команду SQL запроса (он
передаёт данные, используя тело http запроса, то есть в адресной строке эти
данные не увидеть).
Затем отправляем сам запрос с помощью переменной
$result. Если всё прошло успешно, то результат можно увидеть сразу, так как
команда «header» отправляет на ту страницу, где отображается основная таблица. В
противном же случае появится сообщение на отдельной странице с сообщением: “Не
удалось подключиться к серверу”.
Теперь создадим блок авторизации пользователя.
Он будет находиться в правой части шапки сайта, там, где людям привычнее всего
его видеть. Сперва создадим форму блока авторизации в файле header.php.
<?php if($_SESSION['status'] !=
"login") {?>
<label>Логин:</label><br/>
<input type="text"
name="name"><br/>
<label>Пароль:</label><br/>
<input type="password" name="password"><br/>
<input type="submit"
name="submit" value="Войти">
<button
formaction="registration.php">Регистрация</button>
<?php } else
if($_SESSION['status']=="login") {?>
<label>Добро
пожаловать,<?php
echo $_SESSION['login']?></label>
<button formaction="logout.php">Выход</button>
<?php } ?>
</form>
Здесь в принципе выполняется то же самое, что и
при создании формы для занесения данных в таблицу. После этого был создан файл
с именем login.php, код которого расположен ниже:
<?php_start();"connection.php";
$login = $_POST['name'];
$password = $_POST['password'];
$query = "SELECT * FROM user
WHERE (login = '".$login."') && (password =
'".$password."')";
$result = mysql_query($query,
$connection);
$user = mysql_fetch_array($result);
$_SESSION['id'] = $user['id'];
$_SESSION['login'] = $user['login'];
$_SESSION['status'] =
"login";("Location: index.php")
Сессия необходима, для «слежки» за
зарегистрированным пользователем.
Для того, чтобы завершить работу с базой данных,
необходимо создать отдельный файл logout.php и в нем прописать код для
завершения сессии:
<?php_start();_destroy();
header("Location: index.php");
?>
Последним штрихом в создании данного сайта
является создание ссылок в блоке меню. Для этого в ранее созданном фале
menu.php я напишу такой код:
<div>
<font face="Times New
Roman" size="3" color="black">
<table align="center"
background="4.png"width="1000">
<tr>
<td height="30"
width="70" align="center">Главная"><a
href="index.php">Главная</a></td>
<td height="30"
width="70" align="center">База
данных"><a
href="DB.php">База
данных</a></td>
<td height="30"
width="70" align="center">Контакты"><a
href="cont.php">Контакты</a></td>
</tr>
</table>
Описывать не стану, так как все указанные
команды были подробно описаны выше.
4. ТЕСТИРОВАНИЕ ПП
.1 Тестирование базы данных
Отладка абсолютно всего кода проходила в
процессе разработки программного продукта.
Изначально, было сразу ясно, что если имеется
база данных, то необходимо проверить стабильность её работы. Во время
тестирования база данных оказалась надёжной.
Информация стабильно сохранялась в том формате,
которую заносили. Не было ни потерь, ни посторонних символов. Сравнение
кодировки символов работало стабильно.
база данные приложение авторизация
4.2 Тестирование сайта
Вся суть тестирования сайта заключается в
нормальном отображении информации во всех популярных браузерах, а именно Google
Chrome, Opera, Mozilla Firefox и Safari. Некоторые заказчики требуют, чтобы так
же хорошо контент отображался и в браузере Internet Explorer.
За всё время тестирования контент не искажался,
не было замечено никаких дефектов во всех 5 перечисленных браузерах.
Тестирование проводилось на двух мониторах с разрешением 1280х768 и 1024х768.
4.3 Функциональное тестирование
В данном тестировании была проведена проверка
исправности работы всех кнопок и ссылок.
Работа кнопки «войти» - исправна.
Работа кнопки «регистрация» - исправна.
Работа кнопки «выход» - исправна.
Работа кнопки «Добавить запись» - исправна.
Ссылки работают исправно и отправляют на тот
файл или страницу, которая указана в самой ссылке.
ЗАКЛЮЧЕНИЕ
В процессе работы над ВКР был проведен
аналитический обзор, в котором рассматривались подобные программные продукты,
их функционал и интерфейс в целом. Были проведён анализ существующих и наиболее
популярных и востребованных языков web-программирования. Для создания всего
сайта ничего и ни у кого за основу не бралось. Весь интерфейс абсолютно свой.
Для сайта была создана база данных, в которой хранятся как основные данные,
необходимые для работы, так и данные пользователей. Во время разработки, а
также по её окончании проводилось тестирование, в ходе которых все возможные
дефекты были устранены. В будущем после существенной доработки проект можно
опубликовать, а также использовать уже в качестве аналога рассмотренным
программным продуктам.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Никсон,
Р. Создаём динамические веб-сайты с помощью PHP,
MySQL, JavaScript, CSS и
HTML5. 3-е
изд. - СПб.: Питер, 2015. - 688 с.
. Мейер,
Э. CSS - каскадные таблицы стилей. Подробное руководство, 3-издание. - Пер. с
англ. - СПб: Символ-Плюс, - 2008. - 576 с., ил.
3. Htmlbook.ru
| Для тех, кто делает сайты [Электронный ресурс]: офиц. сайт. - Режим доступа:
<https://www.htmlbook.ru>.
. Крис,
Джамеа. Эффективный самоучитель по креативному Web-дизайну. HTML, XHTML, CSS,
JavaScript, PHP, ASP, ActiveX. Текст, графика, звук и анимация. Пер с
англ./Крис Джамеа, Конрад Кинг, Энди Андерсон - М.: ООО «ДиаСофтЮП», 2005. -
672с.
. Зандстра,
Мэтт. PHP: объекты, шаблоны и методики программирования, 4-е издание.: Пер. с
англ. - М.: ООО «И. Д. Вильямс», 2015. - 576.: ил. - Парал. тит. англ.
ПРИЛОЖЕНИЕ 1
(код страницы, на которую отправляет кнопка
«Добавить запись»)
<?php include
"header.php" ?>
<?php include
"menu.php" ?>
<?php include
"connection.php"?>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta
charset="utf-8"/>
<link rel="stylesheet"
type="text/css" href="style.css" />
</head>
<style>{: #00b0d8 url(3.png)
repeat-x;
moz-background-size: 90%;
webkit-background-size:100%;
o-background-size: 100%;
}
<style>{: 300;
}
</style>
</style>
<body
style="background-attachment: fixed" topmargin="0">
<div align="center">
<!--Document starts.-->
<form
action="query-invite.php" method="post">
<label>Номер
дома:</label><br
/>
<input type="text"
name="house_id"><br />
<label>Улица:</label><br
/>
<input type="text"
name="street"><br />
<label>Год ввода в
эксплуатацию:</label><br />
<input type="text"
name="build_year"><br />
<label>Тип
здания:</label><br
/>
<?php
$result = mysql_query("SELECT
identificator FROM house_type");'<select style="width: 175px"
name="house_type">';($row = mysql_fetch_array($result))
{
$pole1=$row['identificator'];"<option
value='$row[identificator]'>$row[identificator]</option>";
}"</select>";
?></br>
<label>Внешний
материал здания:</label><br
/>
<?php
$result = mysql_query("SELECT
type FROM house_wall_material");'<select style="width: 175px"
name="house_wall_material">';($row = mysql_fetch_array($result))
{
$pole1=$row['identificator'];"<option
value='$row[type]'>$row[type]</option>";
}"</select>";
?></br>
<label>Система
отопления:</label><br
/>
<?php
$result = mysql_query("SELECT
identificator FROM heating_system");'<select style="width:
175px" name="heating_system" >';($row =
mysql_fetch_array($result))
{
$pole1=$row['identificator'];"<option
value='$row[identificator]'>$row[identificator]</option>";
}"</select>";
?></br>
<label>Система
подачи горячей воды:</label><br
/>
<?php
$result = mysql_query("SELECT
identificator FROM hot_water_system");'<select style="width:
175px" name="hot_water_system">';($row =
mysql_fetch_array($result))
{
$pole1=$row['identificator'];"<option
value='$row[identificator]'>$row[identificator]</option>";
}"</select>";
?></br>
<label>Система подачи холодной
воды:</label><br />
<?php
$result = mysql_query("SELECT
identificator FROM cold_water_system");'<select style="width:
175px" name="cold_water_system">';($row =
mysql_fetch_array($result))
{
$pole1=$row['identificator'];"<option
value='$row[identificator]'>$row[identificator]</option>";
}"</select>";
?></br>
<label>Состояние
здания:</label><br
/>
<?php
$result = mysql_query("SELECT
identificator FROM house_state");'<select style="width:
175px" name="house_state">';($row =
mysql_fetch_array($result))
{
$pole1=$row['identificator'];"<option
value='$row[identificator]'>$row[identificator]</option>";
}"</select>";
?></br>
<label>Тип
этажей здания:</label><br
/>
<?php
$result = mysql_query("SELECT
identificator FROM house_floor_type");'<select style="width:
175px" name="house_floor_type">';($row =
mysql_fetch_array($result))
{
$pole1=$row['identificator'];"<option
value='$row[identificator]'>$row[identificator]</option>";
}"</select>";
<label>Система подачи
электричества:</label><br />
<?php
$result = mysql_query("SELECT
identificator FROM electricity_system");'<select style="width:
175px" name="electricity_system">';($row =
mysql_fetch_array($result))
{
$pole1=$row['identificator'];"<option
value='$row[identificator]'>$row[identificator]</option>";
}"</select>";
?></br>
<label>Система
газоснабжения:</label><br
/>
<?php
$result = mysql_query("SELECT
identificator FROM gas_system");'<select style="width: 175px"
name="gas_system">';($row = mysql_fetch_array($result))
{
$pole1=$row['identificator'];"<option
value='$row[identificator]'>$row[identificator]</option>";
}"</select>";
?></br>
<label>Жилая
площадь:</label><br
/>
<input type="text"
name="living_quarter"><br />
<label>Нежилая
площадь:</label><br
/>
<input type="text"
name="not_living_quarter"><br />
<label>Общая
площадь:</label><br
/>
<input type="text"
name="area_common_property"><br />
<input type="submit"
name="submit"><br/>
</form>
</div>
</body>
</html>
ПРИЛОЖЕНИЕ 2
(блок авторизации пользователя)
<?php include
"header.php" ?>
<?php include
"menu.php" ?>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Регистрация</title>
<meta
charset="utf-8"/>
<link rel="stylesheet"
type="text/css" href="style.css" />
</head>
<style>{: #00b0d8 url(3.png)
repeat-x;
moz-background-size: 90%;
webkit-background-size:100%;
o-background-size: 100%;
}
</style>
<body
style="background-attachment: fixed" topmargin="0">
<div align="center">
<!--Document starts.-->
<form
action="query-registration.php" method="post">
<label>Логин:</label><br
/>
<input type="text"
name="login"><br />
<label>Пароль:</label><br
/>
<input type="password"
name="password"><br />
<label>email:</label><br
/>
<input type="email"
name="email"><br />
<input type="submit"
name="submit"><br />
</form>
</div>
</body>
</html>