Создание сайта дистанционного тестирования клиентов

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    920,14 Кб
  • Опубликовано:
    2012-11-11
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Создание сайта дистанционного тестирования клиентов

Введение

В настоящее время сеть Интернет является не только площадкой для различного рода развлечение, но и площадкой для ведения бизнеса и заработка в сети. Доступность в сеть Интернет постоянно растёт, в нашей стране уже далеко не исключение из случая, что компьютер подключён к всемирной сети интернет. Многие люди имеют подключение к сети даже на домашнем персональном компьютере. Большинство современных организаций имеют своё представительство в сети Интернет. Многие делают простые сайты так называемые сайты-визитки, для пополнения клиентской базы, а некоторые разворачивают настоящие торговые магазины в сети. Такой интерес обусловлен всеобщей заинтересованностью людей в современных технологиях, так как Интернет это быстрый, дешёвый и удобный способ ведения бизнеса в современном обществе. На сайтах фирм выкладывается информация о деятельности фирмы, контакты связи с ней и очень часто делают представление предлагаемых товаров и услуг. В сети процветает реклама, раскрутить фирму гораздо дешевле и быстрее можно в сети Интернет, нежели другими общепринятыми способами. В настоящее время сайт организации это как лицо фирмы, на них сделан красивый и удобный интерфейс, после посещения этих сайтов у пользователя складывается первое мнение о фирме.

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

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

Цели: Создание сайта дистанционного тестирования клиентов, с дальнейшим формированием отчёта о прохождении тестирования.

Задачи:

изучить язык Веб-программирования PHP;

изучить язык запросов к базе данных (MySQL) в контексте PHP;

проанализировать современное состояние сайтов и сайто-строение;

разработать дизайн сайта;

написать функциональную часть сайта;

написать код сайта на PHP с применением таблиц баз данных (MySQL);

описать экономическую часть проекта.

Материал в дипломном проекте расположен в той последовательности как происходило изучение и обработка. В первой главе приведён анализ программных продуктов, которые были использованы при разработке и написании сайта. Во второй главе описан исходный код PHP с пояснениями, и структура самого сайта. В третей главе описано обоснование экономической эффективности от проделанной работы. Выводы по разработке интернет ресурса находятся в заключительной части.

В процессе разработки интернет ресурса были использованы бесплатные инструменты создания подобного рода интернет ресурсов. В качестве интернет сервера был выбран Apache, в качестве языка написания страниц PHP, в качестве СУБД MySQL. В связке эти три программных компонента дают огромные возможности для создания интернет ресурсов, где присутствует большая гибкость написания кода, простота и лёгкость понимания. Не последнюю роль в этом играет также и бесплатность, присущая всем OpenSource-овым проектам, к числу которых принадлежат все перечисенные продукты. Количество сайтов на связке PHP+Apache+MySQL уже исчисляется миллионами и постоянно растёт, откуда можно сделать вывод о возрастающей актуальности технологии в ближайшем будущем.

1. Анализ программного обеспечения

.1 Язык разработки PHP

(англ. PHP: Hypertext Preprocessor - «PHP: препроцессор гипертекста», англ. Personal Home Page Tools (устар.) - «Инструменты для создания персональных веб-страниц») - скриптовый язык программирования общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков программирования, применяющихся для создания динамических веб-сайтов.

1.1.1 Область применения

В области программирования для Сети PHP - один из популярных скриптовых языков (наряду с JSP, Perl и языками, используемыми в ASP.NET) благодаря своей простоте, скорости выполнения, богатой функциональности, кроссплатформенности и распространению исходных кодов на основе лицензии PHP.

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

автоматическое извлечение POST и GET-параметров, а также переменных окружения веб-сервера в предопределённые массивы;

взаимодействие с большим количеством различных систем управления базами данных (MySQL, MySQLi, SQLite, PostgreSQL, Oracle (OCI8), Oracle, Microsoft SQL Server, Sybase, ODBC, mSQL, IBM DB2, Cloudscape и Apache Derby, Informix, Ovrimos SQL, Lotus Notes, DB++, DBM, dBase, DBX, FrontBase, FilePro, Ingres II, SESAM, Firebird / InterBase, Paradox File Access, MaxDB, Интерфейс PDO);

автоматизированная отправка HTTP-заголовков;

работа с HTTP-авторизацией;

работа с cookies и сессиями;

работа с локальными и удалёнными файлами, сокетами.

обработка файлов, загружаемых на сервер;

работа с XForms.

В настоящее время PHP используется сотнями тысяч разработчиков. Согласно рейтингу корпорации TIOBE, базирующемся на данных поисковых систем, в апреле 2011 года PHP находился на 5 месте среди языков программирования. К крупнейшим сайтам, использующим PHP, относятся Facebook, ВКонтакте, Wikipedia и др.

Входит в LAMP - распространённый набор программного обеспечения для создания веб-сайтов (Linux, Apache, MySQL, PHP).

1.1.2 История PHP

В 1994 году датский программист Расмус Лердорф создал набор скриптов на Perl/CGI для вывода и учёта посетителей его онлайн-резюме, обрабатывающий шаблоны HTML-документов. Лердорф назвал набор Personal Home Page (Личная Домашняя Страница). Вскоре функциональности и быстроты Perl - интерпретатора скриптов - перестало хватать, и Лердорф разработал с использованием языка C новый интерпретатор шаблонов PHP/FI (англ. Personal Home Page / Forms Interpreter - «Личная Домашняя Страница / Интерпретатор форм»).

В 1997 году после длительного бета-тестирования вышла вторая версия обработчика, написанного на C - PHP/FI 2.0. Её использовали около 1 % (приблизительно 50 тысяч) всех интернет-доменов мира.

Версия PHP 3.0 подверглась значительной переработке, определившей современный облик и стиль языка программирования. В 1997 году два израильских программиста, Энди Гутманс и Зээв Сураски, полностью переписали код интерпретатора. PHP 3.0 был официально выпущен в июне 1998 года.

Одной из сильнейших сторон PHP 3.0 была возможность расширения ядра дополнительными модулями. Впоследствии интерфейс написания расширений привлёк к PHP множество сторонних разработчиков, работающих над своими модулями, что дало PHP возможность работать с огромным количеством баз данных, протоколов, поддерживать большое число API. Большое количество разработчиков привело к быстрому развитию языка и стремительному росту его популярности. С этой версии акроним php расшифровывается как «PHP: hypertext Preprocessor», вместо устаревшего «Personal Home Page».

К зиме 1998 года, практически сразу после официального выхода PHP 3.0, Энди Гутманс и Зээв Сураски начали переработку ядра PHP. В задачи входило увеличение производительности сложных приложений и улучшение модульности базиса кода PHP. Новый движок, названный Zend Engine, успешно справлялся с поставленными задачами и впервые был представлен в середине 1999 года. PHP 4.0, основанный на этом движке и принёсший с собой набор дополнительных функций, официально вышел в мае 2000 года. В дополнение к улучшению производительности, PHP 4.0 имел ещё несколько ключевых нововведений, таких как поддержка сессий, буферизация вывода, более безопасные способы обработки вводимой пользователем информации и несколько новых языковых конструкций.

Пятая версия PHP была выпущена разработчиками 13 июля 2004 года. Изменения включают обновление ядра Zend (Zend Engine 2), что существенно увеличило эффективность интерпретатора. Введена поддержка языка разметки XML. Полностью переработаны функции ООП, которые стали во многом схожи с моделью, используемой в Java. В частности, введён деструктор, открытые, закрытые и защищённые члены и методы, окончательные члены и методы, интерфейсы и клонирование объектов. В последующих версиях также были введены пространства имён, замыкания и целый ряд достаточно серьёзных изменений, количественно и качественно сравнимых с теми, которые появились при переходе на PHP 5.0.

Шестая версия PHP находится в стадии разработки с октября 2006 года. В ней уже сделано множество нововведений, как, например, исключение из ядра регулярных выражений POSIX и «длинных» суперглобальных массивов, удаление директив safe_mode, magic_quotes_gpc и register_globals из конфигурационного файла php.ini. Также много внимания уделено поддержке Юникода.

1.1.3 Синтаксис

Синтаксис PHP подобен синтаксису языка Си. Некоторые элементы, такие как ассоциативные массивы и цикл foreach, заимствованы из Perl.

Для работы программы не требуется описывать какие-либо переменные, используемые модули и т. п. Любая программа может начинаться непосредственно с оператора PHP.

Простейшая программа Hello world на PHP выглядит следующим образом:

<?php'Hello, world!'; ?>

PHP исполняет код, находящийся внутри ограничителей, таких как <?php ?>. Всё, что находится вне ограничителей, выводится без изменений. В основном это используется для вставки PHP-кода в HTML-документ, например, так:

<html>

<head>

<title>Тестируем PHP</title>

</head>

<body>

<?php echo 'Hello, world!'; ?>

</body>

</html>

Помимо ограничителей <?php ?>, допускается использование дополнительных вариантов, таких как <? ?> и <script language="php"> </script>. Кроме того, до версии 6.0 допускается использование ограничителей языка программирования ASP <% %> (конструкции <? ?> и <% %> могут быть выключены в конфигурационном файле php.ini).

Имена переменных начинаются с символа $, тип переменной объявлять не нужно. Имена переменных, функций и классов чувствительны к регистру. Константы также чувствительны к регистру. Переменные обрабатываются в строках, заключённых в апострофы или двойные кавычки, и heredoc-строках (строках, созданных при помощи оператора <<<).рассматривает переход на новую строку как пробел, так же как HTML и другие языки со свободным форматом. Инструкции разделяются с помощью точки с запятой (;), за исключением некоторых случаев, после объявления конструкции if/else и циклов.поддерживает три типа комментариев: в стиле языка Си (ограниченные /* */), C++ (начинающиеся с // и идущие до конца строки) и оболочки UNIX (с # до конца строки).

1.1.4 Типы данных

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

К скалярным типам данных относятся:

целый тип (integer);

вещественный тип данных (float, double);

логический тип (boolean);

строковый тип (string);

и специальный тип NULL.

К нескалярным типам относятся:

- «ресурс» (resource);

массив (array);

объект (object).

К псевдотипам относятся:

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

- number число (integer либо float);

- callback (string или анонимная функция);

void отсутствие параметров.

Диапазон целых чисел (integer) в PHP зависит от платформы (обычно, это диапазон 32-битных знаковых целых чисел, то есть, от −2 147 483 648 до 2 147 483 647). Числа можно задавать в десятичной, восьмеричной и шестнадцатеричной системах счисления. Диапазон вещественных чисел (double), также, зависит от платформы (для 32-битной архитектуры диапазон позволяет оперировать числами от ±1.7Ч10−308 до ±1.7Ч10+308).предоставляет разработчикам логический тип (boolean), способный принимать только два значения TRUE («истина») и FALSE («ложь»). При преобразовании в логический тип число 0, пустую строку, ноль в строке «0», NULL и пустой массив считаются равными FALSE. Все остальные значения автоматически преобразуются в TRUE.

Специальный тип NULL предназначен для переменных без определённого значения. Единственным значением данного типа является константа NULL. Тип NULL принимают неинициализированные переменные, переменные инициализированные константой NULL, а также переменные, удалённые при помощи конструкции unset().

Ссылки на внешние ресурсы имеют тип «ресурс» (resource). Переменные данного типа, как правило, представляют собой дескриптор, позволяющий управлять внешними объектами, такими как файлы, динамические изображения, результирующие таблицы базы данных и т. п.

Массивы (array) поддерживают числовые и строковые ключи и являются гетерогенными. Массивы могут содержать значения любых типов, включая другие массивы. Порядок элементов и их ключей сохраняется. Не совсем корректно называть php-массивы массивами, на самом деле это, скорее всего, упорядоченный хеш. Возможно неожиданное поведение при использование цикла for со счетчиком вместо foreach. Так, например, сортируя массив с численными индексами функциями из стандартной библиотеки, сортируются и ключи тоже.

Указатель на функцию в PHP может быть представлен замыканием или псевдотипом callback. Замыкание доступно с версии 5.3 и в коде выглядит как простое определение функции, в которую явно можно утянуть значения из контекста, например:

function($args..$argsN) use($ctxVar,$ctxVar1) { definition ; }

callback тип может быть представлен:

строкой (интерпретируется как название функции);

массивом где нулевой и первый элемент строки (интерпретируется как название статичной функции в классе);

массивом где нулевой элемент объект, а первый строка (интерпретируется как метод у объекта).

1.1.5 Суперглобальные массивы

Суперглобальными массивами (англ. Superglobal arrays) в PHP называются предопределённые массивы, имеющие глобальную область видимости без использования директивы global. Большая часть этих массивов содержит входные данные запроса пользователя (параметры GET-запроса, поля форм при посылке методом POST, куки и т. п.).

Все суперглобальные массивы, кроме $GLOBALS и $_REQUEST, имеют устаревшие аналоги с длинными именами, которые доступны вплоть до пятой версии PHP (в шестой версии планируется их исключение). Таким образом, обращения $_GET['year'] и $HTTP_GET_VARS['year'] идентичны (за исключением области видимости: массивы с «длинными» именами не являются суперглобальными). Cуперглобальные массивы:

$GLOBALS - Массив всех глобальных переменных (в том числе и пользовательских);

$_SERVER - Содержит переменные окружения, которые операционная система передаёт серверу;

$_ENV - Текущие переменные среды (англ. Environment variables). Их набор специфичен для платформы, на которой выполняется скрипт;

$_GET - Содержит параметры GET-запроса, переданные в URI после знака вопроса «?»;

$_POST - Ассоциативный массив значений полей HTML-формы при отправке методом POST. Индексы элементов соответствуют значению атрибута name элементов управления HTML-формы;

$_FILES - Ассоциативный массив со сведениями об отправленных методом POST файлах. Каждый элемент имеет индекс, идентичный значению атрибута «name» в форме, и, в свою очередь, также является массивом со следующими элементами:

['name'] - исходное имя файла на компьютере пользователя;

['type'] - указанный агентом пользователя MIME-тип файла. PHP не проверяет его, и поэтому нет никаких гарантий, что указанный тип соответствует действительности;

['size'] - размер файла в байтах;

['tmp_name'] - полный путь к файлу во временной папке. Файл необходимо переместить оттуда функцией move_uploaded_file. Загруженные файлы из временной папки PHP удаляет самостоятельно;

['error'] - код ошибки. Если файл удачно загрузился, то этот элемент будет равен 0 (UPLOAD_ERR_OK);

$_COOKIE - Ассоциативный массив с переданными агентом пользователя значениями куки;

$_REQUEST - Содержит элементы из массивов $_GET, $_POST, $_COOKIE. С версии PHP 4.1 включает $_FILES;

$_SESSION (уст. $HTTP_SESSION_VARS) - Содержит данные сессии.

1.1.6 Особенности интерпретатора

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

) лексический анализ исходного кода и генерация лексем;

) интаксический анализ полученных лексем;

) генерация байт-кода;

) выполнение байт-кода интерпретатором (без создания исполняемого файла).

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

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

Интерпретатор состоит из ядра и подключаемых модулей, «расширений», представляющих собой динамические библиотеки. Расширения позволяют дополнить базовые возможности языка, предоставляя возможности для работы с базами данных, сокетами, динамической графикой, криптографическими библиотеками, документами формата PDF и тому подобным. Любой желающий может разработать своё собственное расширение и подключить его. Существует огромное количество расширений, как стандартных, так и созданных сторонними компаниями и энтузиастами, однако в стандартную поставку входит лишь несколько десятков хорошо зарекомендовавших себя. Множество расширений доступно в репозитории PECL.

Интерпретатор PHP имеет специальный конфигурационный файл - php.ini, содержащий множество настроек, изменение которых влияет на поведение интерпретатора. Имеется возможность отключить использование ряда функций, изменить ограничения на используемую скриптом оперативную память, время выполнения, объём загружаемых файлов, настроить журналирование ошибок, работу с сессиями и почтовыми сервисами, подключить дополнительные расширения, а также многое другое.

Существует несколько способов использования интерпретатора PHP:

) В качестве модуля к веб-серверу посредством SAPI или ISAPI (например, для Apache модуль mod_php). Веб-сервер запускается с загруженным модулем и при обращении к php-скрипту он выполняется в окружении процесса веб-сервера. Это наиболее распространённый метод использования PHP в силу следующих причин:

он наиболее удобен для отладки, так как ошибки PHP выводятся на экран (если данный режим включен в настройках), тогда как в режиме CGI ошибка приводит к генерации HTTP-кода 500 и дополнительную информацию необходимо искать в логах веб-сервера;

имеется возможность менять некоторые настройки PHP «на лету» с помощью файла .htaccess, без перезагрузки веб-сервера;

в режиме CGI нет возможности воспользоваться HTTP-аутентификацией.

обладает более высокой скоростью работы.

) В качестве CGI. В этом случае, при вызове скрипта веб-сервер вызывает /usr/bin/php-cgi /path/to/script.php. При этом создаётся новый процесс и скрипт выполняется в окружении php-cgi, которое, в зависимости от настроек, может сильно отличаться от окружения процесса веб-сервера. Более современным вариантом является FastCGI. Несмотря на то, что препроцессор PHP все равно будет перезапускаться при каждом запросе, преимуществом данного варианта перед предыдущим является более высокая степень безопасности, потому как PHP работает как отдельное приложение со своими правами.

) В качестве скрипта командной строки, являющегося исполняемым файлом, который вызывается пользователем из командной строки; скрипт выполняется в окружении вызвавшего пользователя. В этом случае возможно использование PHP для создания клиентских GUI-приложений и решения административных задач в операционных системах UNIX, Linux, Microsoft Windows, Mac OS X и AmigaOS. Однако, в таком качестве он не получил распространение, отдавая пальму первенства Perl, Python и VBScript

1.1.7 Модуль phpMyAdmin

Программа phpMyAdmin является одним из самых распространенных средств для администрирования, управления и каждодневной работы с базами данных MySQL. Практически на каждом хостинге, где установлена поддержка этой СУБД, в качестве панели управления предлагают phpMyAdmin.- это набор скриптов, написанных на РНР, который предоставляет практически все необходимые функции по работе с базами данных MySQL. В дополнение к возможностям самого сервера MySQL, он предоставляет дополнительные "фичи", которые позволяют более эффективно и легко работать с данными.

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

Разработчики получают полный контроль над своим сервером, над всеми базами и таблицами, возможность интерактивно исполнять SQL-запросы и даже начальные функции отладки неверных запросов. Конечно, до отладчика из пакета MySQL Query Browser phpMyAdmin еще очень далеко, но это ведь совершенно различные весовые категории.имеет встроенные средства для проведения текущих работ с базами и таблицами - обслуживание, проверка и починка испорченных таблиц, резервирование и восстановление из архивов, экспорт данных из таблиц, как в формате SQL, так и в более специфических, например LaTeX или PDF. Для уменьшения объема файл с данными можно сразу же на сервере сжать архиватором - это очень полезно для создания на своей машине копии из удаленной базы на сайте.

Установка пакета очень проста, необходимо лишь указать данные для доступа к серверу MySQL - логин, пароль и имя хоста. После установки появится еще одна служебная база, в дополнение к базе самой СУБД - phpmyadmin. В этой базе программа хранит свои настройки и другие необходимые ей данные.

Рисунок 1.1 - Интерфейс «phpMyAdmin»

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

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

Программа позволяет выполнять любые SQL-запросы над базами, причем это можно делать как из специального, отдельного, окна запросов, так и для каждой таблицы отдельно. На наиболее частые запросы можно делать специальные закладки и в последствии получить доступ к ним по одному нажатию на ссылку.

Рисунок 1.2 - Обслуживание таблицы в phpMyAdmin

Очень интересная возможность - после выполнения запроса программа показывает не только детальную информацию о нем (время обработки, количество затронутых рядов), но и предлагает показать расширенную информацию о использованных данных при построении запроса (индексах и прочее, что может быть полезно при построении сложных запросов, отладке и ручной оптимизации). Еще одна функция позволяет по введенному запросу автоматически строить код на PHP. Хотя результирующий код очень прост - всего лишь переменная $sql, которая содержит код запроса, оптимизированный под синтаксис PHP, но это очень полезная функция, особенно если вы сначала отлаживаете сложный запрос через интерфейс phpMyAdmin-а, а потом, убедившись в корректной выдаче результатов, хотите перенести запрос в свой скрипт.

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

Рисунок 1.3 - Операция поиска по таблицам

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

1.2 Apache-HTTP сервер

Apache HTTP-сервер - свободный веб-сервер. Apache является кроссплатформенным ПО, поддерживает операционные системы Linux, BSD, Mac OS, Microsoft Windows, Novell NetWare, BeOS.

Основными достоинствами Apache считаются надёжность и гибкость конфигурации. Он позволяет подключать внешние модули для предоставления данных, использовать СУБД для аутентификации пользователей, модифицировать сообщения об ошибках и т. д. Входит в LAMP - распространённый набор программного обеспечения для создания веб-сайтов (Linux, Apache, MySQL, PHP).

1.2.1 История

Сервер был написан в начале 1995 года и считается, что его имя восходит к шуточному названию «a patchy» (англ. «заплаточка»), так как он устранял ошибки популярного тогда сервера Всемирной паутины NCSA HTTPd 1.3. В дальнейшем, с версии 2.х сервер был переписан заново и теперь не содержит кода NCSA, но имя осталось. На данный момент разработка ведётся в ветке 2.2, а в версиях 1.3 и 2.0 производятся лишь исправления ошибок безопасности.

Веб-сервер Apache разрабатывается и поддерживается открытым сообществом разработчиков под эгидой Apache Software Foundation и включён во многие программные продукты, среди которых СУБД Oracle и IBM WebSphere.

С апреля 1996 и до настоящего времени является самым популярным HTTP-сервером в Интернете. По статистике Netcraft, в августе 2007 года он работал на 51 % всех веб-серверов, в мае 2009 года - на 46 %. По данным Netcraft на январь 2011 года, более 160 миллионов сайтов обслуживаются веб-сервером Apache, что составляет 59 % от общего числа веб-сайтов.

1.2.2 Архитектура

Ядро Apache включает в себя основные функциональные возможности, такие как обработка конфигурационных файлов, протокол HTTP и система загрузки модулей. Ядро (в отличие от модулей) полностью разрабатывается Apache Software Foundation, без участия сторонних программистов.

Теоретически, ядро apache может функционировать в чистом виде, без использования модулей. Однако, функциональность такого решения крайне ограничена.

Ядро Apache полностью написано на языке программирования C.

Система конфигурации Apache основана на текстовых конфигурационных файлах. Имеет три условных уровня конфигурации:

Конфигурация сервера (httpd.conf);

Конфигурация виртуального хоста (httpd.conf c версии 2.2 extra/httpd-vhosts.conf);

Конфигурация уровня директории (.htaccess).

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

Часть модулей использует в своей работе конфигурационные файлы операционной системы (например /etc/passwd и /etc/hosts).

Помимо этого, параметры могут быть заданы через ключи командной строки.

1.2.3 Система модулей

Apache HTTP Server поддерживает модульность. Существует более 500 модулей[6], выполняющих различные функции. Часть из них разрабатывается командой Apache Software Foundation, но основное количество - отдельными open source-разработчиками.

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

В модулях реализуются такие вещи, как:

Поддержка языков программирования;

Добавление функционала;

Исправление ошибок или модификация основных функций;

Усиление безопасности.

1.2.4 Механизм виртуальных хостов

Apache имеет встроенный механизм виртуальных хостов. Он позволяет полноценно обслуживать на одном IP-адресе множество сайтов (доменных имён), отображая для каждого из них собственное содержимое.

Для каждого виртуального хоста можно указать собственные настройки ядра и модулей, ограничить доступ ко всему сайту или отдельным файлам. Некоторые MPM, например Apache-ITK позволяют запускать процесс httpd для каждого виртуального хоста с отдельными идентификаторами uid и guid.

Также, существуют модули, позволяющие учитывать и ограничивать ресурсы сервера (CPU, RAM, трафик) для каждого виртуального хоста.

1.2.5 Функциональные возможности

Интеграция с другим ПО и языками программирования

Существует множество модулей, добавляющих к Apache поддержку различных языков программирования и систем разработки.

К ним относятся:

PHP (mod_php);

- Python (mod python, mod wsgi);

Ruby (apache-ruby);

Perl (mod perl);

- ASP (apache-asp).

Кроме того, Apache поддерживает механизмы CGI и FastCGI, что позволяет исполнять программы на практически всех языках программирования, в том числе C, C++, sh, Java.

Безопасностьимеет различные механизмы обеспечения безопасности и разграничения доступа к данным. Основными являются:

Ограничение доступа к определённым директориям или файлам;

Механизм авторизации пользователей для доступа к директории по методу HTTP-Авторизации (mod_auth_basic) и digest-авторизации (mod_auth_digest);

Ограничение доступа к определённым директориям или всему серверу, основанное на IP-адресах пользователей;

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

Существуют модули, реализующие авторизацию через СУБД или PAM.

В некоторых MPM-модулях присутствует возможность запуска каждого процесса Apache используя различные uid и gid с соответствующими этим пользователям и группам пользователей.

Также, существует механизм suexec, используемый для запуска скриптов и CGI-приложений с правами и идентификационными данными пользователя.

Для реализации шифрования данных, передающихся между клиентом и сервером используется механизм SSL, реализованный через библиотеку OpenSSL. Для удостоверения подлинности веб-сервера используются сертификаты X.509.

Существуют внешние средства обеспечения безопасности, например mod_security.

Начиная с версии 2.0 появилась возможность определения сервером локали пользователя. Сообщения об ошибках и событиях, посылаемые браузеру, теперь представлены на нескольких языках и используют SSI технологию.

Также, можно реализовать средствами сервера отображение различных страниц для пользователей с различными локалями. Apache поддерживает множество кодировок, в том числе Unicode, что позволяет использовать страницы, созданные в любых кодировках и на любых языках.

Администратор может установить собственные страницы и обработчики для всех HTTP ошибок и событий, таких как 404 (Not Found) или 403 (Forrbiden). В том числе существует возможность запуска скриптов и отображения сообщений на разных языках.

1.3 Система Управления Базами Данных MySQL

1.3.1 Основные функции СУБД

- управление данными во внешней памяти (на дисках);

управление данными в оперативной памяти с использованием дискового кэша;

журнализация изменений, резервное копирование и восстановление базы данных после сбоев;

поддержка языков БД (язык определения данных, язык манипулирования данными).

Обычно современная СУБД содержит следующие компоненты:

ядро, которое отвечает за управление данными во внешней и оперативной памяти, и журнализацию;

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

подсистему поддержки времени исполнения, которая интерпретирует программы манипуляции данными, создающие пользовательский интерфейс с СУБД;

1.3.2 Классификации СУБД

По модели данных:

Иерархические;

Сетевые;

Реляционные;

Объектно-ориентированные;

По степени распределённости:

Локальные СУБД (все части локальной СУБД размещаются на одном компьютере);

Распределённые СУБД (части СУБД могут размещаться на двух и более компьютерах).

По способу доступа к БД:

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

На данный момент файл-серверная технология считается устаревшей.

Примеры: Microsoft Access, Paradox, dBase, FoxPro, Visual FoxPro.

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

Примеры: Oracle, Firebird, Interbase, IBM DB2, Informix, MS SQL Server, Sybase Adaptive Server Enterprise, PostgreSQL, MySQL, Cachй, ЛИНТЕР.

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

Примеры: OpenEdge, SQLite, BerkeleyDB, Firebird Embedded, Sav Zigzag, Microsoft SQL Server Compact, ЛИНТЕР.

1.3.3 MySQL

MySQL - свободная система управления базами данных (СУБД). MySQL является собственностью компании Oracle Corporation, получившей её вместе с поглощённой Sun Microsystems, осуществляющей разработку и поддержку приложения. Распространяется под GNU General Public License или под собственной коммерческой лицензией. Помимо этого разработчики создают функциональность по заказу лицензионных пользователей, именно благодаря такому заказу почти в самых ранних версиях появился механизм репликации.является решением для малых и средних приложений. Входит в состав серверов WAMP, LAMP и в портативные сборки серверов Денвер, XAMPP. Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты, однако в дистрибутив входит библиотека внутреннего сервера, позволяющая включать MySQL в автономные программы.

Гибкость СУБД MySQL обеспечивается поддержкой большого количества типов таблиц: пользователи могут выбрать как таблицы типа MyISAM, поддерживающие полнотекстовый поиск, так и таблицы InnoDB, поддерживающие транзакции на уровне отдельных записей. Более того, СУБД MySQL поставляется со специальным типом таблиц EXAMPLE, демонстрирующим принципы создания новых типов таблиц. Благодаря открытой архитектуре и GPL-лицензированию, в СУБД MySQL постоянно появляются новые типы таблиц.

Происхождение MySQL

MySQL возникла как попытка применить mSQL к собственным разработкам компании: таблицам, для которых использовались ISAM - подпрограммы низкого уровня. В результате был выработан новый SQL-интерфейс, но API-интерфейс остался в наследство от mSQL. Откуда происходит название «MySQL» - доподлинно не известно. Разработчики дают два варианта: либо потому, что практически все наработки компании начинались с префикса My, либо в честь девочки по имени My, дочери Майкла Монти Видениуса, одного из разработчиков системы.

Лицензирование

MySQL имеет двойное лицензирование. MySQL может распространяться в соответствии с условиями лицензии GPL. Однако по условиям GPL, если какая-либо программа включает исходные коды MySQL, то она тоже должна распространяться по лицензии GPL. Это может расходиться с планами разработчиков, не желающих открывать исходные тексты своих программ. Для таких случаев предусмотрена коммерческая лицензия, которая также обеспечивает качественную сервисную поддержку.

Платформы

MySQL портирована на большое количество платформ: AIX, BSDi, FreeBSD, HP-UX, Linux, Mac OS X, NetBSD, OpenBSD, OS/2 Warp, SGI IRIX, Solaris, SunOS, SCO OpenServer, SCO UnixWare, Tru64, Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP, Windows Server 2003, WinCE, Windows Vista и Windows 7. Существует также порт MySQL к OpenVMS. Важно отметить, что на официальном сайте СУБД для свободной загрузки предоставляются не только исходные коды, но и откомпилированные и оптимизированные под конкретные операционные системы готовые исполняемые модули СУБД MySQL.

История выпусков

Первый внутренний выпуск MySQL состоялся 23 мая 1995 года.

Версия для Windows систем (Windows 95 и NT) выпущена 8 января 1998.

MySQL 4.0

Несмотря на то, что версия 4.0 является устаревшей, она всё ещё имеет значительное распространение. Основные возможности этой версии:

практически полная реализация ANSI SQL-99, плюс расширения;

межплатформенная совместимость;

независимые типы таблиц (MyISAM для быстрого чтения, InnoDB для транзакций и ссылочной целостности);

транзакции;

поддержка SSL;

кэширование запросов;

репликация: один головной сервер на одного подчинённого, много - подчинённых на одного головного;

полнотекстовая индексация и поиск с использованием типа таблиц MyISAM;

внедрённая библиотека базы данных;

поддержка Юникода (UTF-8);

таблицы InnoDB, обеспечивающие соответствие требованиям ACID;

встроенный сервер, позволяющий включать MySQL в автономные приложения.

MySQL 4.1

Рекомендованной версией на 2005 год является MySQL 4.1 вышла 27 октября 2004. Она содержит следующие нововведения:

вложенные запросы и производные таблицы;

новая система кодировок и сортировок;

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

новая программа установки и настройки для Microsoft Windows и Linux;

защищённые через OpenSSL соединения клиент-сервер;

высоко-оптимизированная библиотека, которая может быть использована в сторонних программах;

полноценная поддержка Юникода (UTF-8 и UCS2);

стандартные пространственные типы данных GIS, для хранения географической информации;

улучшенный полнотекстовый поиск и система помощи.

MySQL 5.0

Версия MySQL 5.0 вышла 24 октября 2005 года, в этой версии значительно расширена функциональность, которая ставит MySQL в один ряд с коммерческими СУБД. Если раньше СУБД MySQL обвиняли в недостаточной поддержке стандарта SQL, то с появлением пятой версии этой популярной базы данных, появилась практически полная поддержка стандарта SQL. MySQL 5.0 содержит следующие нововведения:

хранимые процедуры и функции;

обработчики ошибок;

курсоры;

триггеры;

представления;

информационная схема (так называемый системный словарь, содержащий метаданные).

MySQL 5.1

Версия MySQL 5.1 продолжает путь к стандарту SQL:2003. MySQL 5.1 содержит следующие нововведения.

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

Изменено поведение ряда операторов, для обеспечения большей совместимости со стандартом SQL2003;

Построчная репликация (англ. row-based replication), при которой в бинарный лог будет записываться только информация о реально измененных строках таблицы вместо оригинального (и, возможно, медленного) текста запроса. Построчную репликацию можно использовать только для определенных типов sql-запросов, в терминах MySQL - смешанная репликация (англ. mixed replication);

Встроенный планировщик периодически запускаемых работ. По синтаксису добавление задачи похоже на добавление триггера к таблице, по идеологии - на crontab;

Дополнительный набор функций для обработки XML, реализация поддержки XPath;

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

Для упрощения операции обновления подготовлена утилита mysql_upgrade, которая выполнит проверку всех существующих таблиц на предмет совместимости с новой версией, и при необходимости выполнит надлежащие корректировки;

MySQL Cluster отныне выпущен как отдельный продукт, базирующийся на MySQL 5.1 и хранилище NDBCLUSTER;

Значительные изменения в работе MySQL Cluster, такие, как, например, возможность хранения табличных данных на диске;

Возврат к использованию встроенной библиотеки libmysqld, отсутствовавшей в MySQL 5.0;

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

Реализация парсера полнотекстового поиска в виде plug-in;

Новый тип таблиц Maria (устойчивый к сбоям клон MyISAM).

MySQL 5.5

Ветка MySQL 5.5 базируется на невыпущенной серии MySQL 5.4 и содержит ряд значительных улучшений, связанных с повышением масштабируемости и производительности, среди которых:

Использование по умолчанию движка InnoDB;

Поддержка полусинхронного (semi-synchronous) механизма репликации, основанного на патчах к InnoDB от компании Google;

Улучшение функций по партицированию данных. Расширенный синтаксис для разбиения больших таблиц на несколько частей, размещенных в * разных файловых системах (partitioning). Добавлены операции RANGE, LIST и метод оптимизации «partition pruning»;

Новый механизм оптимизации вложенных запросов и JOIN операций;

Переработана система внутренних блокировок;

Интегрированы патчи Google с оптимизацией работы InnoDB на CPU с большим количеством ядер.

MySQL 6.0

Версия MySQL 6.0 пока находится в стадии альфа-тестирования. Первоначально было принято решение о создании версии 5.2, однако вскоре эта версия была переименована в 6.0.

Одним из основных нововведений версии 6.0 планировалось сделать новый тип таблиц Falcon, разработанный в качестве потенциальной замены для InnoDB компании InnoBase, приобретённой компанией Oracle. В связи с приобретением в 2010 году Sun Microsystems тем же Oracle, судьба Falcon остается под вопросом.

2. Разработка сайта системы диагностики

.1 Структура сайта

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

Структура сайта:

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

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

otchet.php - страница отчётов, это страница доступна только администрации сайта, так как прямых ссылок на сайте нет на эту страницу, и при входе нужно указать пароль доступа;

pid.php - страница Входа по уже существующему идентификатору, если введённый номер совпадает с номером который хранится в базе данных пользователь автоматически переходит на страницу выбора теста;

test.php - страница вывода тестов, в зависимости от выбранного теста может по разному выглядеть;

Скрытые страницы (используются для записи или чтения Базы Данных, пользователь не замечает, что посетил и их):

hidden_php/enter_id.php - вход по уже существующему идентификатору;

hidden_php/great_user.php - создание новой записи в БД о тестируемом;

hidden_php/exit.php - обработка выхода тестируемого с сайта.

.2 Главная страница (index.php)

Рисунок 2.1 - Главная страница сайта

Главная страница сайт состоит полностью из полей регистрации. При первом входе, тестируемый, должен ввести главные поля регистрации, которые выделены жирным текстом (Фамилия, Имя, Отчество, Пол, Место работы (город), Организацию, Подразделение, Должность, Год рождения, Общий трудовой стаж, выбрать с какого года работает в организации, с какого года в занимаемой должности, Образование, выбрать в каком году его закончил, оконченный ВУЗ, Специальность).

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

Дизайн страниц загружается из внешнего файла (style.css) в котором описан дизайн всей страницы.

Код страницы с пояснениями:

<?php

$db = mysql_connect("localhost","w0rt","qwerty");

Соединение с базой данных MySQL, ввод логина и пароля для доступа. Результат этого действия записывается в переменную $db.

mysql_select_db("imi-test",$db);

Выбор конкретной базы данных, для дальнейшей работы с ней.

$result = mysql_query("SELECT * FROM index_string ORDER BY id",$db);

Запрос к базе данных, который возвращает все поля из таблицы index_string, отсортированные по ID. Результат этой выборки записывается в переменную $result для дальнейшего использования.

$myrow = mysql_fetch_array($result);

Возвращает массив, соответствующий извлечённому ряду, или FALSE, если рядов больше нет. Присваивается переменной $myrow, которая служит для вывода информации (echo $myrow[‘ID’]).

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

($i=1; $i<20; $i++)

Этот цикл будет повторяться 20 раз, хоть полей меньше в базе данных, это сделано с запасом, если будут добавлены новые поля для регистрации.

{(isset($myrow['string']))

Если функция isset($myrow['string']) вернёт TRUE, это значит что переменная $myrow['string'] существует и её можно выводить на экран, в противном случае вывод полей регистрации заканчивается.

Вывод подписи с права от поля ввода данных:

echo "<p>" . $myrow['string'] . "</p>";

Когда приходит время для вывода 4го поля, в котором пользователь должен выбрать свой пол, выполняется другой сценарий вывода:              

if ($i == 4) {"<input type=\"radio\" name=\"" . $myrow['registr'] . "\"value=\"Жен\" /><span>Жен</span><input type=\"radio\" name=\"" . $myrow['registr'] . "\"value=\"Муж\" /><span>Муж</span>";

}{

Во всех других случаях, когда $i отлична от значения “4” выполняется вывод по этому сценарию:

($myrow['numb'] == 1){

В этом условии производится проверка, если переменная $myrow['numb'] неравна “1”, то эта часть кода пропускается, если равенство есть то выводится выпадающее поле выбора года:

сервер сайт диагностика хост

echo "<select name=\"", $myrow['registr'] ,"\" id=\"", $myrow['registr'] ,"\"><option value=\"...\">(Выбрать)</option>";($j = date("Y") ; $j >= 1900 ; $j=$j-1){

С помощью этого цикла происходит заполнение годов в поле выбора:

echo "<option value=\"$j\">$j</option>\r\n";

}

"</select>";

}

Если все предыдущие условия не выполнились, то выполняется этот сценарий вывода, выводятся поля для заполнения:

else echo "<input size=\"25\" name=\"", $myrow['registr'], "\" type=\"text\" id=\"", $myrow['registr'], "\" style=\"width:240px\" maxlength=\"26\">

}

}

$myrow = mysql_fetch_array($result);

Вызывается функция, которая в переменную $myrow записывает следующее значение (строку) из базы данных, для обработки в новом повторе цикла

}

?>

Данные формы с этой страницы отправляются на обработку в файл hidden_php/great_user.php

2.2 Страница создания записи в БД тестируемого

На эту страницу приходят данные из формы с index.php, перед тем как создать новую запись, тесть зарегистрировать тестируемого, все данные формы проверяются на заполнение:

($name == ' ') {

Условие проверяется значение переменной $name, если переменная имеет знаечение, условие не выполняется, если в переменной отсутствует значение, то переменная $err прибавляется на один, и в массив $error['1'] с идентификатором проверяемого поля, в данном случае [‘1’], записывается значение TRUE:

$err++;

$error['1'] = 'TRUE';}

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

{

Цикл делает 17 повторений, для проверки каждого значения массива $error["$i"]

$show_error = mysql_fetch_array($result_error);

if ($error["$i"] === 'TRUE'){

Если в массиве $error["$i"] встречается значение TRUE, выписывается из базы данных поле которое не было заполнено:

echo "<br>" . $show_error["string"] . "<hr><a href=\"../index.php\">Пройдите регистрацию заного!</a>"

}

}

Если все важные поля были заполнены функцией создаётся Персональный Идентификатор (PID), при помощи функции (случайное число):

$pid = rand(1000000000,9999999999); // диапазон выбран очень большой для исключения совпадения идентификаторов.

Затем получается время регистрации при помощи функции date() :

$data = date("j/m/y");

Потом идёт подключение к БД и запись всего собранного в БД:

$db = mysql_connect("localhost","w0rt","qwerty");_select_db("imi-test",$db);

Запись в базу данных производится MySQL запросом:

$result = mysql_query ("INSERT INTO registr (name,last_name,otchestvo,sex,place_job,org,unit,position,year,experience,org_year,position_year,education,educ_year,name_educ,position_educ,tel_work,tel_home,goal,pid,date) VALUES ('$name','$last_name','$otchestvo','$sex','$place_job','$org','$unit','$position','$year','$experience','$org_year','$position_year','$education','$educ_year','$name_educ','$position_educ','$tel_work','$tel_home','$goal','$pid','$data')");

После записи всех регистрационных данных срабатывает java-script который переводит тестируемого на страницу выбора теста (choise_test.php). За счёт того, что всё это происходит очень быстро, пользователь даже не замечает, что после ввода регистрационных данных, он перешёл на эту страницу для записи всех данных в БД, он сразу видит страницу выбора теста.

2.3 Страница для входа по существующему идентификатору

Рисунок 2.3 - Страница входа по идентификатору

На эту страницу пользователь попадает через ссылку с главной страницы.

Так как мой сайт рассчитан на то, что разные тестируемые могут проходить тестирование с одного компьютера, пользователь никак не запоминается на локальном компьютере, сайт не создаёт cooki файлы на машине. Эта страница позволяет зайти тестируемому который уже когда то регистрировался по своему идентификатору, чтобы не проходить процедуру регистрации заново. Основная функция этой страницы, это через поле формы, выяснить какой именно тестируемый из БД хочет произвести вход на сайт. Данные введённые в форму передаются страничке обработки входа по PID (hidden_php/enter_id.php):

<form method="post" action="hiden_php/enter_id.php">

<input name="pid" type="text" id="pid" style="width:100%" maxlength="10">

<input type="submit" name="btnSubmit" id="btnSubmit" value="Перейти к списку тестов">

</form>

2.4 Страница обработки входа по существующему идентификатору

На эту страницу методом POST приходят введённый в форму идентификатор (ID) со страницы PID.php. Этот самый идентификатор (PID) вносится в СЕССИЮ PHP, для дальнейшего опознания, тестируемого на сайте:

$_SESSION['pid'] = $_POST['pid'];

Идентификатор ищется в БД на соответствие, если соответствие найдено, то происходит переадресация на страницу выбора теста (choise_test.php):

if ($myrow['pid'] == $_POST['pid']){

"<script type=\"text/javascript\">.location = \"../choice_test.php\"

</script>";

}

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

else {"

<center><a href=\"../pid.php\">ID: \"" . $_POST['pid'] . "\" не найден, введите заново!</a>

<br>Или <a href=\"../index.php\">зарегистрироваться</a> заново!";

}

2.5 Страница выбора теста

Рисунок 2.4 - Страница выбора теста

На этой странице выводятся все тесты, которые есть в базе данных.

При входе на эту страницу из СЕССИИ выясняется, какой тестируемый будет проходить тесты:

$pid = $_SESSION['pid'];

Затем подключаемся к БД

$db = mysql_connect("localhost","w0rt","qwerty");_select_db("imi-test",$db);

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

$result = mysql_query("SELECT * FROM registr WHERE pid='$pid'",$db);

$myrow = mysql_fetch_array($result);

Вытаскиваем данные тестируемого для отображения на сайте, что-бы если произошла ошибка было наглядно, что вход произошёл под другими данными тестируемого:

$name = $myrow['name'];

$last_name = $myrow['last_name'];

$otchestvo = $myrow['otchestvo'];" $name $last_name $otchestvo";

Делаем выборку из БД описания к тестам:

$result_test = mysql_query("SELECT * FROM test_string",$db);

$myrow_test = mysql_fetch_array($result_test);

Вывод тестов реализован при помощи цикла DO-WHILE, при помощи этого цикла выводится описание теста, и кнопка перехода к тесту. В каждом блоке описания теста своя форма, со скрытыми полями, что бы передать странице test.php идентификатор выбранного теста на вывод.

do {  

"<form method=\"post\" action=\"test.php\">$myrow_test['text_test'] . "<input type=\"hidden\" name=\"test\" value=\"" . $myrow_test['num_test'] . "\">

<input type=\"submit\" value=\"Перейти к Тесту " . $myrow_test['num_test'] ."\">

</form>";

}($myrow_test = mysql_fetch_array($result_test));

При нажатии кнопки с выбранным тестом, все данные формы отправляются методом POST на страницу вывода тестов (test.php)

На этой странице есть дополнительные проверки присутствия персонального идентификатора для правильной работы системы. Если пройдя тестирование, тестируемый нажал кнопку Выход, а потом вспомнив что не прошёл другой тест, как обычно нажмёт в браузере кнопку «Назад», то сервер выдавал выбор тестов, но персональный номер был удалён из Сессии PHP после прохода через страничку выхода из системы (exit.php) и получалось что тестируемый проходил тест, а его результаты никуда не записывались, потому что неясно серверу в какую ячейку базы данных нужно записать ответы. Для решения этой проблемы перед выводом выбора теста идёт проверка условием на присутствие идентификатора:

if (isset($pid)) {код страницы}

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

"<p>Отсутствует индетификатор тестируемгого <br> <a href=\"hiden_php/exit.php\">Пройдите регистрацию заного</a>или <a href=\"pid.php\">войдите по существующему ID</a></p>";

2.6 Страница вывода тестов

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

$test = $_POST['test'];

В основном вывод вопросов и ответов происходит по одному алгоритму, в цикле DO-WHILE, но каждый тест имеет ряд особенностей, поэтому перед выводом теста мы проверяем, какой надо выводить тест, обычной проверкой:

($test == "1") {};

Рисунок 2.5 - Иллюстрация первого теста

На странице также присутствует счётчик количества посещений страницы, который служит для вывода номера вопроса-ответа:

$numb = 1;

$numb = $numb + $_POST['numb'];

При первом посещении этой страницы, переменная $_POST['numb'] не существует, поэтому переменная $numb остаётся равной 1. После ответа на вопрос отправляется несколько POST-запросов, один из них это номер вопроса, на который отправляется ответ и каждый раз отправляется номер теста, для вывода выбранного теста:

echo "<form method=\"post\" action=\"test.php\" id=\"myform\">

<input type=\"hidden\" name=\"numb\" value=\"" . $numb . "\">

<input type=\"hidden\" name=\"test\" value=\"" . $test . "\">";

Вывод вопросов производится при помощи цикла FOR, перед выводом происходит подключение к базе данных и делается выборка из таблицы согласно условиям выбранного теста:

$result = mysql_query("SELECT * FROM test_$test WHERE num_question='$numb'",$db);

$myrow = mysql_fetch_array($result);

Выборка будет сделана из таблицы test_$test, где $test - это номер теста, который пришёл нам с страницы выбора теста. Так как это переменная, то этот алгоритм подходит для вывода любого теста из базы данных.

Далее мы опять делаем MySQL-запрос к базе данных, для выяснения количества вопросов в выбранном тесте. Результат этого запроса заносится в переменную $if которая в дальнейшем будет использоваться в качестве условия выполнения вывода вопросов:

$result_if = mysql_query("SELECT num_question FROM test_$test ORDER BY num_question DESC",$db);

$myrow_if = mysql_fetch_array($result_if);

$if = $myrow_if['num_question'] + 1;

Переменную $if я намеренно увеличил на 1, так как если в тесте 25 вопросов, то ответ на 25 вопрос придёт когда $numb будет равна 26, если не увеличивать эту переменную на единицу, то когда переменная $if будет равна $numb вывод вопросов тестирования закончится, и попросту 25 вопрос не отобразится.

if ($numb < $if){"<form action=\"test.php\" method=\"post\">";

Вывод номера вопроса и теста вопроса:

echo "Вопрос: " . $myrow['num_question'] . "<hr>" . $myrow['question_string'] . "<br>";

Так как максимальное количество ответов во всех тестах равно 5, то цикл делает 5 повторений:

($otv = 1; $otv <= 5; $otv++){

Производим проверку на присутствие текста ответа в переменной $myrow["question_values$otv"], если переменная непустая то выполняется её вывод:

if ($myrow["question_values$otv"] <> ''){

В 3м тесте за счёт его индивидуальности производится отличный от других тестов заполнение скрытых полей формы и дополнительный вывод шкалы уверенности в выбранном ответе:

Рисунок 2.6 - иллюстрация 3го теста

($test == "3"){

$abc_otv = $otv + 223;"<label><input name=\"q_" . $myrow['num_question'] . "\" type=\"radio\" value=\"" . chr($abc_otv) . "\">" . $myrow["question_values$otv"] . "</label><br>";"<br>Насколько Вы уверены в своем выборе?<br>

<table width=\"100%\" cellspacing=\"2\" cellpadding=\"0\" bgcolor=\"#F0F0F0\" align=\"center\">

<tr>

<td align=\"right\">Совершенно</td>";($j = 10 ; $j > 0 ; $j=$j-1){"<td align=\"center\">$j</td>";}"<td>Далеко</td></tr>

<tr><td align=\"right\">уверен</td>";($k = 10 ; $k > 0 ; $k=$k-1){"<td align=\"center\"><input type=\"radio\" name=\"qs$numb\" value=\"$k\"></td>";}"<td>не уверен</td></tr></table><br>";

}

Во всех других случаях, если номер выбранного теста отличен от 3го, происходит заполнение скрытых полей формы по одному образцу:

Рисунок 2.7 - Иллюстрация 2го теста

{

echo "<label><input name=\"q_" . $myrow['num_question'] . "\" type=\"radio\" value=\"" . $otv . "\">" . $myrow["question_values$otv"] . "</label><br>\r\n";

}

}"</td></tr></table><br>\r\n\r\n";

"<center><input type=\"submit\" name=\"okbutton\" value=\"Следующий\">" .

"<input type=\"hidden\" name=\"test\" value=\"" . $test . "\">" .

"<input type=\"hidden\" name=\"numb\" value=\"" . $numb . "\">" .

"</form></center></table>";

}

В ситуации когда переменная $numb становится равной переменной $if, такое происходит когда пользователь ответил на все предложенные вопросы выдаётся сообщение о окончании тестирования:

echo "

<table border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"2\" width=\"640px\"><tr><td>

<center>

<p>Тест закончен... <br><a href=\"choice_test.php\">Выбрать другой тест</a><br><a href=\"hiden_php/exit.php\">Выход</a></p>

</td></table>";

}

}

Рисунок 2.8 - Сообщение об оконченном тестировании

Запись выбранных ответов ведётся с каждым обращением к этой странице, на этой странице одновременно выполняется вывод нового вопроса и запись ответа в БД на предыдущий вопрос, который приходит при помощи POST-запроса:

$otvet = $numb - 1;

$_POST["q_$otvet"] и $_POST["qs$otvet"]

Действия записи или обновления данных в базе данных. При первом посещении этой страницы if ($numb == 1) в базу данных делается MySQL запрос, на обновление результатов, а точнее если тестируемый решил повторно пройти тест, то ответы предыдущего прохождения стираются, чтобы не было наложения старых и новых ответов. А если тестируемый первый раз проходит тестирования, этот запрос попросту создаёт новую запись в базе данных:

if ($numb == 1) mysql_query("UPDATE test_values SET test_values_$test='' WHERE pid='$pid'",$db);

$result_3 = mysql_query("SELECT * FROM test_values WHERE pid='$pid'",$db);

$myrow_3 = mysql_fetch_array($result_3);

Так как все действия по записи данных в базе данных логичны только на втором обращении к странице ($numb > 1) когда приходит ответ наа ей вопрос, то оператору IF мы пишем такое условие:

($numb > 1) {

Так как записи новых данных по времени прохождения тестирования производится методом дописывания нового ответа к старому, то делается проверка, если в базе данных есть уже запись под этим идентификатором:

($pid == $myrow_3['pid']) {запросом мы делаем выборку данных из базы данных ответов:

$result_2 = mysql_query("SELECT * FROM test_values WHERE pid='$pid'",$db);

Переменной $valSQL присваивается значение ответов на предыдущие вопросы:

$valSQL = mysql_fetch_array($result_2);

Процедура добавления нового значения ответа на последний вопрос выглядит следующим образом:

Сначала проверяется, если идёт обработка 3го теста, то выполняется сценарий записи новых значений с двумя ответами:($test == '3') {

Переменной $val присваивается значение $valSQL["test_values_$test"] где находятся ответы на предыдущие вопросы, затем приплюсовывается значение $_POST["q_$otvet"] - ответ на вопрос, и приплюсовывается $_POST["qs$otvet"] - ответ который тестируемый выбирает в шкале уверенности:

$val = $valSQL["test_values_$test"] . $_POST["q_$otvet"] . $_POST["qs$otvet"]. "";

Далее значение переменной $val записывается в базу данных ответов, в ячейку который соответствует идентификатору тестируемого:

$update_value = mysql_query("UPDATE test_values SET test_values_$test='$val' WHERE pid='$pid'",$db);

}

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

Переменной $val присваивается значение ответов на предыдущие вопросы и пристыкуется новый ответ, полученный методом POST из формы:

$val = $valSQL["test_values_$test"] . $_POST["q_$otvet"];

Затем новое значение переменной $val записывается в базу данных:

$ update_value = mysql_query("UPDATE test_values SET test_values_$test='$val' WHERE pid='$pid'",$db);

}

Если тестируемый зашёл первый раз для прохождения этого теста, то создаётся новая запись в базе данных, а не её обновление как описано выше:

{

Сначала проверяется, если идёт обработка 3го теста, то выполняется сценарий записи новых значений с двумя ответами:

if ($test == '3') {

Переменной $val присваивается значение $_POST["q_$otvet"] - ответ на вопрос, и приплюсовывается $_POST["qs$otvet"] - ответ который тестируемый выбирает в шкале уверенности:

$val = $_POST["q_$otvet"] . $_POST["qs$otvet"] . " ";

Далее значение переменной $val записывается в базу данных ответов, в ячейку который соответствует идентификатору тестируемого:

$insert_value = mysql_query("INSERT INTO test_values (pid, test_values_$test) VALUES('$pid','$val')",$db);

}{

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

$val = $_POST["q_$otvet"];

Затем значение этой переменной и идентификатор тестируемого мы записываем в базу данных:

$insert = mysql_query("INSERT INTO test_values (pid, test_values_$test) VALUES('$pid','$val')",$db);

}}}

По окончанию теста, выдаётся табличка с ссылками на выбор другого теста или выход из системы:

echo "

<table border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"2\" width=\"640px\"><tr><td>

<center>

<p>Тест закончен... <br><a href=\"choice_test.php\">Выбрать другой тест</a><br><a href=\"hiden_php/exit.php\">Выход</a></p>

</td></table>";

2.7 Административная страница отчётов

Вход на данную страницу возможен только при вводе пароля, который известен только администратору сайта. При входе на данную страницу проверяется наличие в Сессии PHP ключа:

$propusk = $_SESSION['key'];($propusk == "12345"){код страницы};

Если в Сессии есть ключ, то выполняется вывод всего содержимого страницы на экран администратору.

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

{($propusk <> ''){"<p>Неверный ключ</p><p>Введите ключ доступа:<form method=\"POST\" action=\"otchet.php\">\r\n<input name=\"key\" type=\"password\" id=\"key\" maxlength=\"8\"><input type=\"submit\" value=\" ok \"></form></p>";}

}

Если ключ вообще не существует, переменная $propusk и $_SESSION['key'] не существуют, значит пользователь первый раз посетил эту страницу, и система предлагает ввести ключ доступа, который в дальнейшем будет записан в Сессию PHP ($_SESSION['key']) и соответственно будет присвоен переменной $propusk:

{

echo "<p>Введите ключ доступа:<form method=\"POST\" action=\"otchet.php\">\r\n<input name=\"key\" type=\"password\" id=\"key\" maxlength=\"8\"><input type=\"submit\" value=\" ok \"></form></p>;

}

}

Основное назначение этой страницы - создавать текстовые файлы результатов прохождения тестирования пользователями, эти текстовые файлы определённого формата хранятся на сервере, в каталоге, где расположен сайт в папке (otchet_att). На этой странице можно формировать 3 разных вида отчётов:

индивидуальный файл отчёта, в нём будет написана информация только о конкретном тестируемом

файл отчёта по организации, в нём будет выписана информация о прохождении тестирования всеми работниками выбранной организации

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

2.7.1 Файл отчёта по организации

Рисунок 2.9 - Иллюстрация по созданию отчёта по организации

В самом верхнем блоке страницы, сервер формирует выпадающий список организаций, работники которых проходили тестирование. Для формирования текстового файла необходимо выбрать нужную организацию и нажать кнопку формы «ok». На языке PHP это выглядит так:

"<p>Отчёт по организации:</p>

<form action=\"otchet.php\" method=\"POST\">

<select name=\"org_otch\" id=\"org_otch\">\r\n<option value=\"...\">(Выбрать)</option>";

Выполняем SQL-запрос к базе данных, в результате в переменную $view_org_otchet присваивается наименование организации, в которой тестируемый работает, вся эта информация берётся из таблицы регистрационных данных тестируемых:

$org_otchet = mysql_query ("select * from registr");

$view_org_otchet = mysql_fetch_array ($org_otchet);

Затем с помошью цикла DO-WHILE перебираем все места работы тестируемых, которые есть в базе данных:

{

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

$num_firm++; ($num_firm == '1') {"<option value=\"" . $view_org_otchet['org'] . "\">" . $view_org_otchet['org'] . "</option>";

В массив переменной $firma[1] записывается наименование организации, которая была вписана в выпадающий список, это нужно для дальнейшего сравнения на совпадение:

$firma["$num_firm"] = $view_org_otchet['org'];  

}

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

else    {

$nesovpal = 0;

Переменная $nesovpal хранит в себе значение несовпадений наименования организации, которая сравнивается в данном проходе цикла. При проверки каждого нового наименования фирмы эта переменная обнуляется. Каждое новое значение наименования фирмы записывается в массив переменной $firma["$num_firm"], для дальнейшего сравнения на уникальность:

$firma["$num_firm"] = $view_org_otchet['org'];

При помощи цикла FOR мы сравниваем наименование организации которое пришло из базы данных, со всеми предыдущими наименованиями:

for ($a = 1; $a < $num_firm; $a++){

Если значение в переменной $view_org_otchet['org'] равно значению переменной $firma[$a] значит что найдено совпадение, и наименование организации которое пришло из базы данных уже выписано в выпадающий список. В этом случае никаких операций не происходит, и программа заканчивает этот проход цикла и начинается следующий, так сравниваются все значения нового наименования и всех значений организаций, которые находятся в массиве переменной $firma[$a]:

if ($view_org_otchet['org'] === $firma[$a]) {}

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

{

$nesovpal++;

Если значение переменной $nesovpal равно значению переменной $num_firm - 1, это означает что наименование фирмы точно уникально и его нужно внести в выпадающий список наименований организаций:

if ($nesovpal == $num_firm - 1){"<option value=\"" . $view_org_otchet['org'] . "\">" . $view_org_otchet['org'] . "</option>";

}}}}}($view_org_otchet = mysql_fetch_array ($org_otchet));"<input type=\"submit\" value=\" ok \"></form></table></form>";

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

if ($_POST['org_otch'] <> ''){

$firma = $_POST['org_otch'];

Отчёты хранятся в отдельной папке для удобства, для начала их создания, нужно сменить каталог (по стандарту выставлен каталог, где расположена страница), меняем каталог на "otchet_txt":

chdir("otchet_txt");

Делаем выборку из базы данных, выбираются все поля из таблицы регистрационных данных, где поле Работа выбрана организация которая нас интересует:

$search_org = mysql_query("select * from registr where org='$firma'");

$view_org = mysql_fetch_array($search_org);

Файлы отчёта уникальны, чтобы не было засорения на сервере при создании нового отчёта старый удаляется:

if (file_exists("firma.att") == 'TRUE') {("firma.att"); }

С помошью цикла DO-WHILE перебираем все записи в базе данных:

{

Переменной $pid_view_values присваиваем значение персонального идентификатора тестируемого, это значение участвует в другом запросе к базе данных, в котором берутся данные о прохождении теста пользователем:

$pid_view_values = $view_org['pid'];

$otveti = mysql_query("SELECT * FROM test_values where pid='$pid_view_values'");

$view_otveti = mysql_fetch_array($otveti); 

С помощью функции fopen открываем файл firma.att с атрибутом 'a' (Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать.):

$f = fopen("firma.att" , 'a');

Далее функцией fwrite производим запись данных из базы в текстовый файл отчёта:

fwrite($f, $shift9 . $view_org["org"] . ", " . $view_org["date"] . $shift0 . "\r\n");($f, "1.ФАМ:" . $view_org["name"] . " 2.ИМЯ:" . $view_org["last_name"] . " 3.ОТЧ:" . $view_org["otchestvo"] . " Пол:" . $view_org["sex"] ."\r\n");($f, "4.ГОРОД:" . $view_org["place_job"] . "5.ОРГАНИЗАЦИЯ:" . $view_org["org"] . "\r\n");

fwrite($f, "6.ПОДРАЗДЕЛЕНИЕ:" . $view_org["unit"] . " 7.ДОЛЖНОСТЬ:" . $view_org["position"] . "\r\n");($f, "8.ГОД РОЖДЕНИЯ:" . $view_org["year"] . " 9.ОБЩ. ТРУД. СТАЖ:" . $view_org["experience"] . " 10.В ДАННОЙ ОРГ-ИИ С:" . $view_org["org_year"] . "\r\n");($f, "11.В ЗАНИМАЕМОЙ ДОЛЖНОСТИ С:" . $view_org["position_year"] . " 12.ОБРАЗОВАНИЕ:" . $view_org["education"] . "\r\n");($f, "13.В:" . $view_org["educ_year"] . " ГОДУ ЗАКОНЧИЛ:" . $view_org["name_educ"] . "\r\n");($f, "14.ПО СПЕЦИАЛЬНОСТИ:" . $view_org["position_educ"] . "\r\n");($f, "ТЕЛЕФОН: РАБОЧИЙ " . $view_org["tel_work"] . " ДОМАШНИЙ:" . $view_org["tel_home"] . "\r\n");($f, "16.ОСНОВНЫЕ ЦЕЛИ ДЕЯТЕЛЬНОСТИ И РЕШАЕМЫЕ ЗАДАЧИ:" . $view_org["goal"] . "\r\n");($f, "РАВЕН:" . $view_otveti["test_values_1"] . "\r\n");($f, "ВЕРБАЛЬНЫЙ:" . $view_otveti["test_values_2"] . "\r\n");($f, "СИТУАЦИОННЫЙ:" . $view_otveti['test_values_3'] . "\r\n");($f, "ПСИХОЛОГИЧЕСКИЙ:\r\n");

В базе данных, в таблице где находятся ответы на 4й тест, ответы написаны непрерывным списком, а для файла отчёта нужно использовать шаблон выписки ответов, поэтому мы разбиваем длинную строку на 4 функцией substr(переменная, начало, длина), и присваиваем их переменным:

$otvet_60 = substr($view_otveti['test_values_4'], 1, 60);

$otvet_120 = substr($view_otveti['test_values_4'], 61, 60);

$otvet_180 = substr($view_otveti['test_values_4'], 121, 60);

$otvet_235 = substr($view_otveti['test_values_4'], 181, 55);($f, "1- 60:" . $otvet_60 . "\r\n");($f, "61-120:" . $otvet_120 . "\r\n");($f, "121-180:" . $otvet_180 . "\r\n");($f, "181-235:" . $otvet_235 . "\r\n\r\n");($f);

}($view_org = mysql_fetch_array($search_org));

По окончанию записи в файл выдаётся сообщение, что файл отчёта был создан и ссылка на его скачивание с сервера:

echo "<table>

<p>Файл отчёта по организации $firma создан (<a href=\"otchet_txt/firma.att\" target=\"_blank\">firma.att</a>)</p></center>

</td></tr></table>";

Рисунок 2.10 - Сообщение о создании отчёта по организации

2.7.2 Индивидуальный файл отчёта

В среднем блоке страницы выводится информация о всех пользователях, которые существуют в базе данных. Информация представлена в таблице, в которой выписаны ФИО тестируемых и отмечены тесты, которые они проходили. В самой последней колонке таблицы присутствует кнопка «Записать в отчёт». При нажатии на эту кнопку на сервер отправляется форма:

<input name=\"number_action\" value=\"" . $i . "\" type=\"hidden\">,

с командами на выполнение операции по формированию индивидуального отчёта по тестируемому. Значение, которое приходит из формы, с информацией какого именно тестируемого из базы данных записать в файл индивидуального отчёта присваиается пременной $man, далее вся работа будет происходить с этой переменной.

$man = $_POST['number_action'];

Если администратор нажал на кнопку «Записать в отчёт», то переменная $man будет иметь значение, и будет выполняться условия, в противном случае эта часть кода просто пропускается

if ($man <> ' ') {условия}

Для записи в внешний файл используются функции fopen() и fwrite(). Для начала опять меняем каталог с стандартного где хранится страница, на каталог созданный специально для таких текстовых файлов отчётов:

("otchet_txt");

Делаем выборку из базы данных для конкретного тестируемого:

$otveti = mysql_query("SELECT * FROM test_values WHERE pid='$pid_post'");

$view_otveti = mysql_fetch_array($otveti);

Функцие открываем текстовый файл индивидуального отчёта (otchet.att) с атрибутом 'w' (Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует - пробует его создать.). Открываем именно с этим атрибутом, так как если есть индивидуальный файл отчёта с данными другого тестируемого, функция с таким атрибутом удаляет всю старую информацию и записывает новую. Таким образом не создаётся много файлов и старая информация удаляется:

$f = fopen('otchet.att' , 'w');

Далее записываем все интересующие данные в файл:

fwrite($f, $org["$man"] . ", " . $data["$man"] . "\r\n");($f, "1.ФАМ:" . $name["$man"] . " 2.ИМЯ:" . $last_name["$man"] . " 3.ОТЧ:" . $otchestvo["$man"] . " Пол:" . $sex["$man"] ."\r\n");($f, "4.ГОРОД:" . $place_job["$man"] . "5.ОРГАНИЗАЦИЯ" . $org["$man"] . "\r\n");($f, "6.ПОДРАЗДЕЛЕНИЕ:" . $unit["$man"] . " 7.ДОЛЖНОСТЬ:" . $position["$man"] . "\r\n");($f, "8.ГОД РОЖДЕНИЯ:" . $year["$man"] . " 9.ОБЩ. ТРУД. СТАЖ:" . $experience["$man"] . " 10.В ДАННОЙ ОРГ-ИИ С:" . $org_year["$man"] . "\r\n");($f, "11.В ЗАНИМАЕМОЙ ДОЛЖНОСТИ С:" . $position_year["$man"] . " 12.ОБРАЗОВАНИЕ:" . $education["$man"] . "\r\n");($f, "13.В:" . $educ_year["$man"] . " ГОДУ ЗАКОНЧИЛ:" . $name_educ["$man"] . "\r\n");($f, "14.ПО СПЕЦИАЛЬНОСТИ:" . $position_educ["$man"] . "\r\n");($f, "ТЕЛЕФОН: РАБОЧИЙ " . $tel_work["$man"] . " ДОМАШНИЙ:" . $tel_home["$man"] . "\r\n");

fwrite($f, "16.ОСНОВНЫЕ ЦЕЛИ ДЕЯТЕЛЬНОСТИ И РЕШАЕМЫЕ ЗАДАЧИ:" . $goal["$man"] . "\r\n");($f, "РАВЕН:" . $view_otveti["test_values_1"] . "\r\n");($f, "ВЕРБАЛЬНЫЙ:" . $view_otveti["test_values_2"] . "\r\n");($f, "СИТУАЦИОННЫЙ:" . $view_otveti['test_values_3'] . "\r\n");($f, "ПСИХОЛОГИЧЕСКИЙ:\r\n");

В базе данных, в таблице где находятся ответы на 4й тест, ответы написаны непрерывным списком, а для файла отчёта нужно использовать шаблон выписки ответов, поэтому мы разбиваем длинную строку на 4 функцией substr(переменная, начало, длина), и присваиваем их переменным:

$otvet_60 = substr($view_otveti['test_values_4'], 1, 60);

$otvet_120 = substr($view_otveti['test_values_4'], 61, 60);

$otvet_180 = substr($view_otveti['test_values_4'], 121, 60);

$otvet_235 = substr($view_otveti['test_values_4'], 181, 55);($f, "1- 60:" . $otvet_60 . "\r\n");($f, "61-120:" . $otvet_120 . "\r\n");($f, "121-180:" . $otvet_180 . "\r\n");($f, "181-235:" . $otvet_235 . "\r\n");

fclose($f);

По окончанию всех действий администратору выдаётся информационный блок, где говорится, что файл создан и даётся ссылка на его скачивание:

<center>В файл выборочного отчёта (<a href=\"otchet_txt/otchet.att\" target=\"_blank\">otchet.att</a>) <br>записана информация по тестируемому:<br> " . $name["$man"] . " " . $last_name["$man"] . "</center>

Рисунок 2.11 - Сообщение о создании индивидуального отчёта

2.7.3 Общий отчёт

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

($_POST['all_otchet'] == 1) {

Отчёты хранятся в отдельной папке для удобства, для начала их создания, нужно сменить каталог (по стандарту выставлен каталог, где расположена страница), меняем каталог на "otchet_txt":

chdir("otchet_txt");

Выполняем запрос к базе данных и берём из неё значения пройденных тестов:

$otveti = mysql_query("SELECT * FROM test_values");

Файлы отчёта уникальны, чтобы не было засорения на сервере при создании нового отчёта старый удаляется:

if (file_exists("otchet_all.att") == 'TRUE'){("otchet_all.att");}

С помощью цикла FOR будем перебирать все пользователей по очереди и дописывать их данные в отчёт:

($k = 1; $k <= $i; $k++){

Переменной $view_otveti присваиваем значение строки из базы данных:

$view_otveti = mysql_fetch_array($otveti);

Открываем файл 'otchet_all.att' с атрибутом 'a' (Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать.):

$f = fopen("otchet_all.att" , 'a');

Затем записываем все данные из базы данных в внешний файл полного отчёта:

fwrite($f, $shift9 . $org["$k"] . ", " . $data["$k"] . $shift0 . "\r\n");($f, "1.ФАМ:" . $name["$k"] . " 2.ИМЯ:" . $last_name["$k"] . " 3.ОТЧ:" . $otchestvo["$k"] . " Пол:" . $sex["$k"] ."\r\n");($f, "4.ГОРОД:" . $place_job["$k"] . "5.ОРГАНИЗАЦИЯ" . $org["$k"] . "\r\n");($f, "6.ПОДРАЗДЕЛЕНИЕ:" . $unit["$k"] . " 7.ДОЛЖНОСТЬ:" . $position["$k"] . "\r\n");($f, "8.ГОД РОЖДЕНИЯ:" . $year["$k"] . " 9.ОБЩ. ТРУД. СТАЖ:" . $experience["$k"] . " 10.В ДАННОЙ ОРГ-ИИ С:" . $org_year["$k"] . "\r\n");($f, "11.В ЗАНИМАЕМОЙ ДОЛЖНОСТИ С:" . $position_year["$k"] . " 12.ОБРАЗОВАНИЕ:" . $education["$k"] . "\r\n");($f, "13.В:" . $educ_year["$k"] . " ГОДУ ЗАКОНЧИЛ:" . $name_educ["$k"] . "\r\n");($f, "14.ПО СПЕЦИАЛЬНОСТИ:" . $position_educ["$k"] . "\r\n");($f, "ТЕЛЕФОН: РАБОЧИЙ " . $tel_work["$k"] . " ДОМАШНИЙ:" . $tel_home["$k"] . "\r\n");($f, "16.ОСНОВНЫЕ ЦЕЛИ ДЕЯТЕЛЬНОСТИ И РЕШАЕМЫЕ ЗАДАЧИ:" . $goal["$k"] . "\r\n");($f, "РАВЕН:" . $view_otveti["test_values_1"] . "\r\n");($f, "ВЕРБАЛЬНЫЙ:" . $view_otveti["test_values_2"] . "\r\n");($f, "СИТУАЦИОННЫЙ:" . $view_otveti['test_values_3'] . "\r\n");($f, "ПСИХОЛОГИЧЕСКИЙ:\r\n");

$otvet_60 = substr($view_otveti['test_values_4'], 1, 60);

$otvet_120 = substr($view_otveti['test_values_4'], 61, 60);

$otvet_180 = substr($view_otveti['test_values_4'], 121, 60);

$otvet_235 = substr($view_otveti['test_values_4'], 181, 55);($f, "1- 60:" . $otvet_60 . "\r\n");($f, "61-120:" . $otvet_120 . "\r\n");($f, "121-180:" . $otvet_180 . "\r\n");($f, "181-235:" . $otvet_235 . "\r\n");

fclose($f);

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

<center>Файл полного отчёта создан (<a href=\"otchet_txt/otchet_all.att\" target=\"_blank\">otchet_all.att</a>)</center>

Рисунок 2.12 - Сообщение о созданном полном отчёте

3. Анализ экономической эффективности проекта

Эффективность разработки сайта для системы диагностики можно разделить на две части. Первая - это прямой эффект от создания сайта системы диагностики, связанный с экономией средств на материалы, рабочее время сотрудников и т.д. Вторая часть - это косвенный эффект от создания сайта в сети Интернет и проведения тестирования через этот сайт. Это так называемые качественные показатели. К ним можно отнести:

) Повышение престижа компании:

В современном обществе Интернет технологии плотно вошли в бизнес. Далеко в прошлое ушли старые методы проведения тестов. У всех на рабочих местах и дома есть компьютеры.

) Сокращение ресурсов на проведение тестирования:

За счёт того что тестирование происходит в виртуальной среде, экономятся ресурсы на проведение тестов, такие как бумага, ручки, не требуется специальное место для проведения тестирования, каждый может пройти его со своего персонального компьютера.

) Сокращение времени на обработку результатов:

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

) Простота и лёгкость изменения:

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

3.1 Бюджет проекта

Создание сайта системы диагностики заняло 42 рабочих дня, одного программиста и одного менеджера.

3.1.1 Определение затрат на разработку сайта

Издержки = Материалы + ЗПосн + ЗПдоп+ ЕСН + Аренда + Энергия + Аотч+Инт (3.1)

где ЗПосн - основная заработная плата;

ЗПдоп - дополнительная заработная плата;

Материалы - стоимость используемых материалов;

ЕСН - единый социальный налог;

Аренда - аренда помещений;

Энергия - энергозатраты;

Аотч - амортизационные отчисления;

Инт - расходы на Интернет.

Цена продукта принимается равной себестоимости, потому что сайт является внутренней разработкой, предназначенной для использования в сети Интернет (3.2):

ЦенаСайта = Издержки (3.2),

где ЦенаСайта - цена программного продукта веб-сайта.

Основная заработная плата.

К этой статье относится заработная плата программиста и менеджера, непосредственно связанных с разработкой сайта. Для удобства расчётов в дальнейшем заработные платы исполнителей проекта рассчитаны на заработные платы, которую получает исполнить за один рабочий день, все эти данные представлены в Таблице №1:

Таблица 1 «Заработная плата разработчиков сайта»

Должность

Заработная плата в месяц, руб.

Стоимость одного рабочего дня, руб.

Программист

17000

740

Менеджер

12000

521


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

Таблица 2 «Распределение трудоёмкости по исполнителям»

Исполнитель

Трудоёмкость, дней

Сумма, руб.

Разработка технического задания

Менеджер

5

2605

Подбор литературы, поиск информации

Менеджер Программист

5 5

2605 3700

Написание кода сайта и отладка

Программист

20

14800

Оценка результатов и тестирование

Менеджер Программист

8 8

4168 5920

Составление документации

Менеджер Программист

4 4

2084 2960

Итого

42

38842

Следовательно, величина основной заработной платы за всю продолжительность проекта составит:

ЗПосн = 38842 руб.

Дополнительная заработная плата

Примем величину дополнительной заработной платы в размере 15% от величины основной заработной платы:

ЗПдоп = ЗПосн * 0,15 = 38842 * 0,15 = 5826 руб.

Единый Социальный Налог

Единый социальный налог объединяет в себе следующие отчисления:

ПФР (пенсионный фонд России) - 26%;

ФСС (фонд социального страхования) - 2,9%;

в ФФОМС (федеральный фонд обязательного медицинского страхования) - 2,1%;

ТФОМС (территориальный фонд обязательного медицинского страхования) - 3%;

В общей сложности отчисления составляют 34% от суммы основной и дополнительной заработной платы и составят (3.3):

       (3.3)


Стоимость материалов и изделий.

Стоимость использованных материалов составляет 10% от фонда оплаты труда (3.4):

(3.4)


Аренда помещения.

Стоимость аренды помещения вычистится по формуле (3.5):

          (3.5),

где Т - продолжительность аренды помещения;

- стоимость  арендуемого помещения в месяц

- площадь арендуемого помещения.

Продолжительность аренды равно продолжительности выполнения проекта, т.е. 42 дня, что в свою очередь составляет Т=2 месяца. Стоимость аренды квадратного метра в офисном помещении в месяц составляет ;

Размер необходимой арендуемой площади S определяется по формуле (3.6):

         (3.6),

где  - норма площади на одного человека, равная 6 кв.м.;

N - количество исполнителей.

.


Энергозатраты

Затраты на электроэнергию рассчитываются по формуле (3.7):

                                   (3.7),

где W - потребляемая мощность,- количество часов работы оборудования,- стоимость киловатт-часа электроэнергии;

В настоящее время .

Для работы были задействованы 1 компьютер, 1 МФУ. Рабочий день программиста длится 8 часов, в среднем пользование МФУ 1 час в день. Исходя из этих данных, получаем:

Компьютер:

к = 0,85кВт, Тк = 336ч.

МФУ: Wмфу= 0,5кВт, Тмфу= 42 ч.

Тогда затраты на электроэнергию составят:


Амортизационные отчисления

Амортизационные отчисления берутся исходя из стоимости ПЭВМ, на которой выполнялась разработка, и стоимости принтера.

Таблица 3 «Стоимость оборудования»

Наименование

Обозначение

Стоимость,руб

Компьютер

Цк

30000

МФУ

Цмфу

10500


С учетом норм амортизации на компьютер - 12,5%, а на МФУ - 11,1%, амортизационные отчисления за все рабочие дни составляют (3.8):

    (3.8),

где Цк - цена компьютера;

 - норма амортизации на компьютер;

- норма амортизации на МФУ;

П - период разработки проекта.

Сумма амортизационных отчислений составит:


Расходы на Интернет

Расходы за использование сети Интернет составляют 15% от фонда оплаты труда, т.е. (3.9):

          (3.9)


Затраты на разработку сайта сведены в таблицу 4:

Таблица 4 «Затраты на разработку сайта»

Статья затрат

Сумма затрат, руб.

Основная ЗП

38842,00

Дополнительная ЗП

5826,00

Материалы

4466,00

ЕСН

11703,00

Аренда

23800,00

Энергозатраты

711,31

Амортизационные отчисления

782,00

Затраты на Интернет

6814,50

Общие затраты на разработку

92944,80


3.1.2 Определение затрат на эксплуатацию сайта

Определим затраты на эксплуатацию. Эти затраты будут состоять из следующих показателей (3.10):

    (3.10),

где  - затраты на производство и внедрение;

 - затраты на оборудование, реализующие сайт;

Затраты на внедрение.

Затраты на внедрение состоят из большого числа факторов, но выделим лишь те, влияние которых наиболее существенно, это

- подготовка сайта к эксплуатации в конкретных условиях;

- обучение персонала и др.

Поэтому полные затраты на внедрение и подготовку к эксплуатации равны:


Будем исходить из предположения, что на подготовку сайта к эксплуатации и настройку для работы будет затрачено 1 день работы одного программиста. Тогда стоимость будет определяться дневной зарплатой программиста:

На обучение персонала предположительно необходимо 2 дня, поэтому стоимость будет определяться дневной зарплатой программиста:


Общие затраты на внедрение равны:

Затраты на оборудование, реализующие сайт.

Поскольку для работы привлечено существующее оборудование, затрат на эксплуатацию реализующей ЭВМ.

Затраты на эксплуатацию реализующей ЭВМ, ввиду низкой стоимости машинного времени, могут быть приравнены к затратам на потребляемую электроэнергию (3.11):

     (3.11),

где - удельная стоимость машинного времени;

 - продолжительность использования системы.


Исходя из опыта работы аналогичных систем, можно сказать, что в год продолжительность пользования системой составит:

=.

Тогда затраты на эксплуатацию, реализующей ЭВМ составят:


Суммарные затраты на эксплуатацию составят:


3.1.3 Затраты на сопровождение сайта

Затраты  на сопровождение сайта складываются из:

затраты на обнаружение и устранение ошибок;

затраты на модернизацию и доработку.

Непосредственно дать денежную оценку сложно, поэтому примем, что для обнаружения, устранения и модернизации сайта будет требоваться в среднем 12 дней труда программиста в год. В день программист зарабатывает 800 рублей + 34% (ЕСН) = 1072 руб.


Обслуживание сайта

Обслуживание сайта минимальное. Всё обслуживание складывается из того, что менеджер один раз в неделю заходит в административную часть сайта и делает файлы отчётов о прохождении тестов. Для этого нужно будет требоваться 53 рабочих дня в год, в день менеджер зарабатывает 521 руб., затраты на обслуживание (3.12):

(3.12),

где - количество рабочих дней менеджера;

 

Все затраты на обслуживание сайта сведены в Таблицу 5:

Таблица 5 «Расходы на обслуживание сайта в год»

Статья затрат

Сумма затрат,руб

Хостинг

1500,0

Сопровождение сайта

12864,0

Зарплата Менеджера

27613,0

ЕСН

7234,6

Итого

49211,6


Тогда общие затраты на разработку и внедрение проекта составят (3.13):

    (3.13)


3.2 Прямой экономический эффект

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

полный отказ от аренды помещения, для проведения тестирования;

экономия на бумажных носителях;

экономия на канцелярских предметах;

экономия времени на обработку информации;

уменьшение затрат на персонал, обслуживающий тестирование.

Для анализа экономической целесообразности внедрения системы обобщим эти параметры и рассмотрим следующие:

сокращение затрат на проведение тестирования;

повышение производительности труда.

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

Для оценки экономии расходных материалов для проведения тестирования примем, что в неделю проходит тестирование 30 человек, каждому человеку выдаётся по 4 теста. На один лист А4 помещается 6 вопросов, так как общее количество вопросов в 4 тестах составляет 333 вопроса, то это получается что для опроса одного тестируемого уходит порядка 55 страниц А4. Листы используются не однократно, но для надлежащего вида их перепечатывают один 4 раза за год. Отсюда экономия на расходные материалы считается по формуле (3.14):

                                (3.14),

где N - количество тестируемых в год;- среднее число листов А4, приходящееся на одного тестируемого;

с - стоимость печати одного листа формата А4;

= 30*53= 1590= 55


Рассмотрим какой экономический эффект даст повышение производительности труда. Для обработки тестов менеджеру требуется 30 минут, за это время обрабатывается одна анкета. За год менеджер на обработку анкет тратил времени Т (3.15):

                                        (3.15),

где t - время обработки одной анкеты;- количество тестируемых в год;


За год тратится порядка 795 труда/час на обработку результатов. При 8 часовом распорядке дня, это выполняется за 100 рабочих дней. Заработная плата менеджера в этом случае равняется:


После внедрения информационной системы заработная плата менеджера равняется:


Все расчёты сведём в таблицу 6:

Таблица 6 «Прямой экономический эффект»

Наименование

Сумма,руб

Экономия расходных материалов

32793,75

Повышение производительности труда

24487,00

Итого

57280,75


Из наших расчётов получаем что прям экономический эффект от внедрения информационной системы равен:

Срок окупаемости затрат на разработку и внедрение сайта определяется по формуле (3.17).

  (3.17),

где Tок - срок окупаемости изделия, год.

Срок окупаемости составит:


Расчетный коэффициент экономической эффективности капитальных затрат на разработку и внедрение сайта рассчитывается по формуле (3.18):

     (3.18).

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


Таким образом, можно сделать вывод, что мероприятия по созданию и внедрению сайта являются эффективными (Ер = 0,35 > Ен = 0,15 ) и окупятся в течение 2,8 года, а это 2 года 10 месяцев.

3.3 Косвенный эффект

Так же существуют и косвенный экономический эффект от внедрения информационной системы, но этот эффект тяжело измерить. Можно выделить несколько выгод:

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

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

повышение безопасности при расчёте результатов тестирования. Так как все расчёты происходят на компьютере сервере, есть большая уверенность в достоверности данных, потому что компьютеры редко дают сбой и информация без искажений и ошибок записывается в базу данных, для дальнейшей обработки.

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

Заключение

Все цели и задачи, которые ставились в начале работы были мною достигнуты. В процессе выполнения данной работы мною была собрана и изучена информация по созданию сайтов. Изучен язык веб-програмирования PHP, изучен язык запросов к базе данных MySQL. Использованный в работе сервер Apache работал стабильно и без сбоев. Данная связка программного обеспечения (Apache+PHP+MySQL) давно зарекомендовала себя в области сетевых технологий. Язык программирования PHP позволяет создавать сайты, из блоков подгружая нужные и экономя тем самым время на создание. Вся информация, содержащаяся на сайте находится в базе данных MySQL на сервере. Удобство такого расположения информации и есть главный плюс при создание сайта на PHP. Весь смысл тандема этих двух систем в гибкости запросов к безе данных и абсолютная свобода действий над хранимой там информацией.

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

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

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

Разработанный сайт системы диагностики позволил:

сократить затраты на бумажные носители

сократить затраты на проведение тестирования

сократить затраты и время на анализ результатов тестирования

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

повысить безопасность расчёта данных тестов

повысить престиж организации

Список использованных источников

1.   Стивен Хольцнер, PHP в примерах, Бином-Пресс, 2009 г.

2.       Стив Суэринг, Тим Конверс, Джойс Парк, PHP и MySQL. Библия программиста, Диалектика, 2010 г.

.        Люк Веллинг, Лора Томсон, Разработка веб-приложений с помощью PHP и MySQL, Вильямс, 2010 г.

.        Дамашке Гизберт, PHP и MySQL, НТ Пресс, 2008 г.

.        Игорь Шапошников, PHP 5.1. Учебный курс, Питер, 2007 г.

.        Максим Кузнецов, Игорь Симдянов, PHP. Народные советы, БХВ-Петербург, 2007 г.

.        Робин Никсон, Создаем динамические веб-сайты с помощью PHP, MySQL и JavaScript, Питер, 2011 г.

.        Николай Прохоренок, HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера, БХВ-Петербург, 2010 г.

.        А. С. Строганов, Ваш первый сайт с использованием PHP-скриптов, Диалог-МИФИ, 2008 г.

.        Максим Кузнецов, Игорь Симдянов, PHP. Практика создания Web-сайтов, БХВ-Петербург, 2008 г.

.        А. А. Орлов, PHP. Полезные приемы, Горячая Линия - Телеком, 2006 г.

.        Мэтт Зандстра «PHP: объекты, шаблоны и методики программирования» «Вильямс» 2010

.        Якоб Нильсен, Хоа Лоранжер «Веб-дизайн: удобство использования веб-сайтов (юзабилити)» «Вильямс» 2009

.        Брайан Айзенберг, Джон Кварто вон Тивадар «Тестирование и оптимизация веб-сайтов: руководство по Google Website Optimizer» «Диалектика» 2009

15.     http://www.spravkaweb.ru/main/ - справочник WEB-языков

.        <http://www.softtime.ru/bookphp/gl1_1.php> - справочник по PHP

.        http://evgeniypopov.com/ - примеры PHP

.        http://ruseller.com/adds.php?rub=12 - видео уроки по PHP

.        http://php.su/ - справочник по PHP

.        <http://www.opennet.ru/cgi-bin/opennet/ks.cgi?mask=php> - советы по установке связки Apache+PHP+MySQL

1.      

 

         http://htmlweb.ru/java/example.php - примеры Java-Script22. <http://htmlweb.ru/java/example.php - примеры Java-Script21.> http://htmlbook.ru/ - справочник по HTML

.        <http://cssmake.ru/> - справочник по CSS и примеры

.        <http://www.nbuv.gov.ua/e-journals/vsunud/2009-6E/09svaivp.htm> - история PHP

25. http://www.oborot.ru/article/222/24 современные стандарты сайтостроения.

26.     http://www.intuit.ru/department/database/mysql/1/1.html введение в СУБД и mysql.

.        http://yapro.ru/web-master/apache/chto_takoe_apache.html каталог справочных материалов.

.        http://ru.wikipedia.org/wiki/Apache материалы из википедии сервер Apache

.        http://ru.wikipedia.org/wiki/Php - материалы из википедии.

.        http://phpclub.dp.ua/ - справочник языка PHP

.        http://altblog.ru/ - пять основных принципов успешного веб-сайта.

Похожие работы на - Создание сайта дистанционного тестирования клиентов

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!