Создание инструментального средства для организации социологических опросов
СОДЕРЖАНИЕ: МИНСКИЙ ИНСТИТУТ УПРАВЛЕНИЯ «К защите допускаю» Кафедра АИС Т.В.Русак « » 2008 г. КУРСОВОЙ ПРОЕКТ по дисциплине: «Сетевые информационные технологии в экономике»МИНСКИЙ ИНСТИТУТ УПРАВЛЕНИЯ
«К защите допускаю»
Кафедра АИС________________ Т.В.Русак
«____»__________________2008 г.
КУРСОВОЙ ПРОЕКТ
по дисциплине: «Сетевые информационные технологии в экономике»
на тему: «Создание инструментального средства для организации социологических опросов»
Выполнила студентка группы 41101
А.Б.Рудина
Руководитель
Т.В.Русак
Минск
2008
МИНСКИЙ ИНСТИТУТ УПРАВЛЕНИЯ
Факультет
Специальность
УТВЕРЖДАЮ
Зав. кафедрой
В.И. Курмашев
«» года
ЗАДАНИЕ
на курсовой проект
по дисциплине « Сетевые информационные технологии в экономике»
Рудиной Анне Борисовне, группа № 41101
Тема: Создание инструментального средства для организации социологических опросов. Литературные предпочтения
1. Срок сдачи студентом законченной курсовой работы: 04.06.2008
2. Исходные данные: 1. Язык программирования PHP, СУБД MySQL;
2. Количество вопросов в анкете не менее 10;
3. Количество отчетных форм не менее 2;
4. В контрольном примере не менее 10 анкет.
3. Перечень подлежащих разработке вопросов и календарный график
п/п | Наименование вопросов курсовой работы | Срок выполнения |
1 | Постановка задачи | 25.02.2008 |
2 | Обоснование выбранных технических средств и программного обеспечения (системного и средств разработки) | 10.03.2008 |
3 | Структура базы данных | 17.03.2008 |
4 | Структура приложения | 29.03.2008 |
5 | Описание интерфейса и отчетных форм | 15.04.2008 |
6 | Программная реализация | 28.04.2008 |
7 | Руководство пользователя | 15.05.2008 |
Приложение:
1. Разработанная анкета;
2. Схема базы данных;
3. Листинг программных модулей;
4. Анкеты контрольного примера.
Руководитель___________Русак Т.В.
Задание принял к исполнению ___________________
(подпись)
20 февраля 2008
РЕФЕРАТ
Курсового проекта Рудиной А.Б.
Объём работы 37с., 13 рис, 8 лит. ист., 4 прил.
Ключевые слова: Анкета, страничка, HTML , SQL -запрос, таблицы, типы данных, PHP , MySQL , сессии, массивы, веб-приложение, база данных, интерфейс, скрипт, анкета пользователя .
В курсовом проекте описывается процесс создания инструментального средства для организации социологических опросов.
В процессе выполнения курсового проекта были сделаны следующие выводы:
Разработанное приложение является мощным средством для проведения анкетирования.
Есть возможность модернизации программы и внедрения в какую либо информационную систему, как средство автоматизации приема анкет.
Хранения данных регистраций и анкет следует осуществлять в базе данных MYSQL
Отчет о пройденных анкетах разными пользователями следует осуществлять в специальной отчетной форме.
Приложение должно состоять из следующих форм: Форма регистрации, форма авторизации, форма вывода отчетов и др.
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
1 ПОСТАНОВКА ЗАДАЧИ
2 ОБОСНОВАНИЕ ВЫБРАННЫХ ТЕХНИЧЕСКИХ СРЕДСТВ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
3 СТРУКТУРА БАЗЫ ДАННЫХ
4 СТРУКТУРА ПРИЛОЖЕНИЯ
5 ОПИСАНИЕ ИНТЕРФЕЙСА И ОТЧЕТНЫХ ФОРМ
6 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ
7 РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
ПРИЛОЖЕНИЕ 1
РАЗРАБОТАННАЯ АНКЕТА
ПРИЛОЖЕНИЕ 2
СХЕМА БАЗЫ ДАННЫХ
ПРИЛОЖЕНИЕ 3
ЛИСТИНГ ПРОГРАММНЫХ МОДУЛЕЙ
ПРИЛОЖЕНИЕ 4
АНКЕТЫ КОНТРОЛЬНОГО ПРИМЕРА
ВВЕДЕНИЕ
В области программирования для Сети, PHP — один из популярнейших скриптовых языков (наряду с JSP, Perl и языками, используемыми в ASP.NET) благодаря своей простоте, скорости выполнения, богатой функциональности и распространению исходных кодов на основе лицензии PHP. PHP отличается наличием ядра и подключаемых модулей, «расширений»: для работы с базами данных, сокетами, динамической графикой, криптографическими библиотеками, документами формата PDF и т. п. Любой желающий может разработать своё собственное расширение и подключить его. Существуют сотни расширений, однако в стандартную поставку входит лишь несколько десятков хорошо зарекомендовавших себя. Интерпретатор PHP подключается к веб-серверу либо через модуль, созданный специально для этого сервера (например, для Apache или IIS), либо в качестве CGI-приложения.
Кроме этого, он может использоваться для решения административных задач в операционных системахUNIX, GNU/Linux, Microsoft Windows, Mac OS X и AmigaOS. Однако в таком качестве он не получил распространение, отдавая пальму первенства Perl, Python и VBScript.
В настоящее время PHP используется сотнями тысяч разработчиков. Порядка 20 миллионов сайтов сообщают о работе с PHP, что составляет более пятой доли доменов Интернета .
1 ПОСТАНОВКА ЗАДАЧИ
Для реализации анкеты литературные предпочтения понадобятся следующие средства разработки: PHP, MYSQL.
В процессе разработки требуется решить следующие задачи:
1. Разработка структуры хранения данных;
Хранение анкет
2. Разработка структуры приложения;
Создания скриптов для подключения к базе данных, создание интерфейсов, создание отчетов.
3. Разработка интерфейса пользователя;
4. Разработка интерфейса администратора;
5. Разработка отчетных форм;
6. Написание программного кода приложения;
Разработка PHP скриптов для грамотной работы веб-приложения.
Непосредственные задачи для выполнения на PHP:
1. Необходимо иметь возможность идентифицировать отдельных пользователей. Кроме того, следует располагать методом их аутентификации.
2. необходимо иметь возможность хранения введенных в анкету данных для отдельного пользователя.
3. необходимо создать интерфейс пользователя. Пользователь должен иметь возможность зарегистрироваться в системе, изменить пароль, заполнить анкету, редактировать введенные данные.
4. необходимо предусмотреть проверку ошибок ввода при заполнении анкеты
5. необходимо создать интерфейс администрирования сайтом. Администратор должен иметь возможность просмотра всех введенных данных.
6. администратор должен иметь возможность просмотра статистических отчетов по введенным данным.
7. запись введенных в анкету пользователем данных
2 Обоснование выбранных технических средств и программного обеспечения
PHP является языком программирования с динамической типизацией, не требующим указания типа при объявлении переменных. Преобразования между скалярными типами зачастую осуществляется неявно без дополнительных усилий (впрочем PHP предоставляет широкие возможности и для явного преобразования типов).
К скалярным типам данных относятся целый тип (integer), вещественный тип данных (float, double), булевский тип (boolean), строковый тип (string) и специальный тип NULL. К нескалярным типам относится «ресурс» (resource), массив (array) и объект (object).
Диапазон целых чисел (integer) в PHP зависит от платформы (обычно это диапазон 32-битных знаковых целых чисел, то есть от 2 147 483 648 до 2 147 483 647). Числа можно задавать в десятичной, восьмеричной и шестнадцатеричной системах счисления. Диапазон вещественных чисел (double) также зависит от платформы (для 32-битной архитектуры диапазон позволяет оперировать числами от ±1.710-308 до ±1.710+308)[1].
PHP предоставляет разработчикам булевский тип (boolean), способный принимать только два значения TRUE («истина») и FALSE («ложь»). При преобразовании в булевский тип число 0, пустая строка, ноль в пустой строке «0», NULL и пустой массив считаются FALSE. Все остальные значения автоматически преобразуются в TRUE.
Специальный тип NULL предназначен для переменных без определённого значения. Единственным значением данного типа является константа NULL. Тип NULL принимают неиницализированные переменные, переменные инициализированные константой NULL, а также переменные, удалённые при помощи конструкции unset().
Ссылки на внешние ресурсы имеют тип «ресурс» (resource). Переменные данного типа, как правило, представляют собой дескриптор, позволяющий управлять внешними объектами, такими как файлы, динамические изображения, результирующие таблицы базы данных и т. п.
Массивы (array) поддерживают числовые и строковые ключи и являются гетерогенными. Массивы могут содержать значения любых типов, включая другие массивы. Порядок элементов и их ключей сохраняется[7].
Характерные конструкции
То, что PHP относится к интерпретируемым языкам, позволило реализовать гибкий и удобный механизм обращения к переменным, функциям и классам. Обращение к переменным производится с помощью символа $, за которым следует имя переменной. Данная конструкция может быть применена также для вызова функций, методов и т.п., имя которых совпадает с содержимым переменной. Например:
$a = I am a; //записываем значение в переменную echo $a; //Выводим содержимое переменной а $b = a;echo $$b; //Выводим содержимое переменной а $c = function_name;$c(); // Вызовется функция function_name $d = Class_name;$obj = new $d(); // Создастся объект класса Class_name $obj-$b; //Обращение к полю a объекта $obj-$c(); //Вызов метода function_name объекта [2].Объектно-ориентированное программирование
PHP поддерживает широкие объектно-ориентированные возможности, полная поддержка которых была введена в пятой версии языка.
Класс в PHP объявляется с помощью ключевого слова class. Методы и поля класса могут быть общедоступными (public, по умолчанию), защищёнными (protected) и скрытыми (private). PHP поддерживает наследование (родительский класс указывается с помощью ключевого слова extends после имени класса) и интерфейсы (ставятся в соответствие с помощью implements). Разрешается объявление финальных, абстрактных методов и классов. Множественное наследование классов не поддерживается, однако класс может реализовывать несколько интерфейсов. Для обращения к методам родительского класса используется ключевое слово parent.
Классы в PHP 5 имеют ряд специальных методов (так называемых «magic methods»), начинающихся с двух символов подчёркивания. Особо стоит отметить конструктор (__construct, в ранних версиях конструктором служил метод, одноименный с классом) и деструктор (__destruct), а также методы чтения (__get) и записи (__set), свёртывания (__sleep) и развёртывания (__wake), клонирования (__clone) и др. Эти методы являются достаточно гибким инструментом: переопределяя их, можно легко добиться существенного изменения поведения объекта.
Экземпляры класса создаются с помощью ключевого слова new, обращение к полям и методам объекта производится с использованием символов -. Для доступа к членам класса из его методов используется переменная $this.
class C1 extends C2 implements I1,I2{private $a; protected $b;function __construct($a,$b){ parent::constructor($a,$b); $this-a = $a; $this-b = $b; }public function plus(){ return $a+$b; }/* ............... */ }$d = new C1(1,2);echo $d-plus(); [3]
Другие возможности
Среди наиболее часто используемых возможностей PHP стоит отметить следующие:
· имеется большой арсенал функций для работы со строками;
· работа с регулярными выражениями PCRE выполняется функциями с префиксом preg_
· работа с базами данных осуществляется посредством модулей php5-mysql для MySQL, php5-pgsql для PostgreSQL и др. Функции этих модулей позволяют открывать соединение, выполнять SQL-запросы к СУБД, получать данные в удобной для обработки виде и т.д. В серьезных проектах рекомендуется использовать модули абстракции базы данных и объектно-реляционные проекции (ORM);
· для PHP разработаны средства шаблонирования web-страниц, позволяющие эффективно разделить представление от модели в духе MVC, например Smarty[4];
3 СТРУКТУРА БАЗЫ ДАННЫХ
Таблица ` anketa ` :- Предназначена для хранения параметров анкет
`idank` int(11) NOT NULL auto_increment,
Унифицированный номер анкеты. Используется как PK, не может быть не заполнено, автоматическое увеличение поля, целочисленное.
`title` varchar(100) NOT NULL default ,
Текст названия анкеты. Храниться как уникальный (не допускает одинаковых имен), не может быть не заполнено, по умолчанию значение пробел, символьное(100).
`votes` int(11) NOT NULL default 0,
Поле, содержащее количество ответов на анкеты пользователей, не может быть не заполнено, по умолчанию значение 0, целочисленное.
Таблица ` answer ` : - Таблица предназначена для хранения ответов пользователя на анкеты.
`id` int(11) NOT NULL auto_increment,
Унифицированный номер ответа пользователя на анкету. Используется как PK, не может быть не заполнено, автоматическое увеличение поля, целочисленное.
`iduser` int(11) NOT NULL default 0,
Унифицированный номер пользователя используется как FK к таблице `users`, не может быть не заполнено, по умолчанию значение 0, целочисленное.
`idank` int(11) NOT NULL default 0,
Унифицированный номер анкеты используется как FK к таблице `ankets`, не может быть не заполнено, по умолчанию значение 0, целочисленное.
`idquest` int(11) NOT NULL defa-ult 0,
Унифицированный номер вопроса (для формирования анкет) используется как FK к таблице `quest`, не может быть не заполнено, по умолчанию значение 0, целочисленное.
`answer` varchar(100) NOT NULL default 0,
Записывается текст самого ответа, не может быть не заполнено, по умолчанию значение 0, символьное(100).
Таблица ` quest ` :-Предназначена для хранения вопросов для анкет.
`id` int(11) NOT NULL auto_increment,
Унифицированный номер вопроса (для формирования анкет) . Используется как PK.
` idank ` int (4) NOT NULL default 0, ИД анкеты
Унифицированный номер анкеты используется как FK к таблице `ankets`, не может быть не заполнено, по умолчанию значение 0, целочисленное.
`text` text NOT NULL, текст вопроса . Содержит текст вопроса, не может быть не заполнено, текстовое.
Таблица ` users ` : -Предназначена для хранения данных пользователей.
`id` int(11) NOT NULL auto_increment,
Унифицированный номер пользователя. Используется как PK.
` name ` text NOT NULL ,
Содержит Логин пользователя, не может быть не заполнено, текстовое.
` pass ` text NOT NULL ,
Содержит пароль пользователя, не может быть не заполнено, текстовое.
`type` boolean NOT NULL default 0,
Логическое поле для определения типа пользователя (обычный или администратор) , не может быть не заполнен, значение по умолчанию false.
4 Структура приложения
Приложение состоит из следующих 8 файлов:
1. ankets_manager.php
Форма управления администратора, администрирование анкет, создание сохранение, правка. Под каждое действие рисуется отдельная форма. Для редактирования одна, для панели администратора другая.
2. answer . php
Работа с ответами и с базой. Реализует функцию администратора для проверки ответов конкретных пользователей на конкретную анкету. Так же реализует счетчик, для подсчета количества ответов на анкету.
3. form . php
Прорисовка форм. Производит sql выборки из таблицы ank по её ID номеру и многое другое.
4. function . php
Реализованы функции по работе с сессиями, подключение к базе. Удаление пользователя, добавление, и остальные функции.
5. index . php
Начальная страница, создает начальную форму авторизации, создает сессию, рисует форму.
6. register . php
Реализация регистрации. Создает форма регистрации пользователя, используются функции для её обработки.
7. result_view.php
Форматирование и вывод результатов.
8. users_manager.php
Редактирование добавление записями пользователей.
Примерная работа приложения отражена на рис. 4.1, который приведен ниже.
Рис. 4.1 Структура работы приложения
5 Описание интерфейса и отчетных форм
Формы в приложении:
1. Форма для регистрации будет отражена на рис. 5.1.
Рис. 5.1 Форма регистрации
2. Форма для авторизации будет отражена на рис. 5.2.
Рис. 5.2 Форма регистрации
3. Форма редактирования личных данных пользователя отражена на рис. 5.3.
Рис 5.3 Форма редактирования личных данных пользователя
4. Форма для добавления изменения и удаления анкет отражена на рис. 5.4
Рис 5.4 Форма для добавления изменения и удаления анкет
Интерфейс создается динамически в зависимости от того, какую форму выбрал пользователь. Для построения интерфейса использовались элементы управления и теги HTML.
5. Форма редактирования анкеты
Рис. 5.5 Форма редактирования анкеты
6. Форма отчетности
Рис. 5.6 Форма отчетности
6 Программная реализация
Язык программирования - php. Хранилище данных - база MYSQL. Программа используется для анкетирования пользователей, управления анкетами, создания своих анкет.
В программе реализована авторизация. Клиент может быть пользователем и может быть администратором. В зависимости от того, кем он авторизовался, ему представляется соответствующая форма с различными возможностями.
Возможности пользователя:
· изменения личных данных
· прохождения анкетирования.
Возможности администратора:
· Добавление изменение или удаления анкет
· редактирование структуры самих анкет
· редактирование пользователей
Данные записываются и извлекаются из базы с помощью SQL – запросов.
Для того чтобы знать кто на данный момент находится на странице пользователь или администратор, чтобы санкционировать доступ к формам, используется механизм сессий.
Для реализации интерфейса используются стандартные элементы управления и теги HTML.
Основные функции приложения и их описание
· function admin_menu() Реализация панели администратора
· function admin_sess_beg() Работает для реализации функций администратора, записывает в массив сессий что пользователь является администратором
· functionapply_change($name, $pass) Исполняет изменение пароля и имени (для редактирования паролей). Принимает название пользователя и его пароль.
· function check_sess() Проверка текущей записи в массиве сессий
· functioncheck_user($name,$pass) Проверка на наличие данного пользователя в базе. Принимает название пользователя и его пароль.
· function html_footer() Дополняет страницу информацией снизу.
· function html_head() Динамический вывод заголовка для каждой страницы
· function Print_ank() Создает HTML кодсамойанкеты
· function show_my_body() создает ссылки для панели администратора
· functionshow_quest($quest,$i) Формирует вывод вопросов на конкретную анкету. Принимает текст вопроса и его ID номер.
· functionshow_text_quest($quest) Записывает в массив текущий вопрос. Принимает текст вопроса.
· function showuser($name) Выборка на пользователя по его имени.
· Принимает имя пользователя.
· function user_sess_beg() Записывает в массив сессий значение того, что вошел пользователь.
· function EditAnk($ankID) Реализует возможность редактирования анкет. Принимает ID номер анкеты.
· function ListAnk() Выборка на список анкет.
· function NewAnk() Реализует функцию создания анкет.
7 Руководство пользователя
Для регистрации требуется перейти по ссылке.
Будет форма с 3 полями в 1 поле надо ввести имя, во 2 пароль, в 3 подтверждение пароля.
Форма регистрации отражена на рисунке 7.1.
Рис 7.1 Форма регистрации
Для подтверждения информации нажмите кнопку.
Совершится переход на главную страницу, где следует ввести ваш зарегистрированный логин и пароль.
Если вы авторизуетесь как пользователь, вам следует выбрать любую анкету и нажать на её называние.
Требуется заполнить анкету, после чего нажмите на кнопку для её сохранения. Пользователь может пройти анкету одного типа один раз.
Для авторизации как администратор вам следует перейти к панели администратора нажатием на ссылку, для авторизации нужно проделать те же действия как и обычному пользователю.
На Рис. 7.2 отражена панель администратора.
Рис. 7.2. Панель администратора.
После авторизации вы увидите форму, на которой вы можете изменять имя и пароль пользователей.
Так же есть возможность редактировать анкеты, то есть удалять изменять и добавлять новые. Чтобы сделать это нажимайте на соответствующие кнопки.
7.3 Форма управления пользователями
После добавления или изменения анкеты нажмите на кнопку, чтобы изменения вступили в силу.
ЗАКЛЮЧЕНИЕ
PHP (читается как пи-эйч-пи) - один из популярнейших языков программирования в сети Интернет. Дословно аббревиатура переводиться как Personal Home Page[5].
PHP практикует в разных направлениях, но больше его используют в глобальной сети Интернет. Главной ее задачей становится создать динамическую Web-страницу. Яркими примерами можно взять чаты, форумы, гостевые книги, доски объявлений, средства голосования, почты, поиска, в общем, при помощи этого языка можно сделать все, что сейчас можно увидеть в сети[6].
В процессе выполнения курсового проекта, были выполнены следующие задачи:
· Постановка задачи;
· Обоснование выбранных технических средств и программного обеспечения (системного и средств разработки);
· Структура базы данных;
· Структура приложения;
· Описание интерфейса и отчетных форм;
· Программная реализация;
· Руководство пользователя;
· Реализация приложения.
В процессе выполнения курсового проекта были сделаны следующие выводы:
· Для реализации системы авторизации следует использовать механизм сессий.
· Хранения данных регистраций и анкет следует осуществлять в базе данных MYSQL
· HTML-страницы следует строить с помощью таблиц, для последующего удобного форматирования.
Список используемых источников
1. Кузнецов Максим, Симдянов Игорь Объектно-ориентированное программирование на PHP. — Спб.: «БХВ-Петербург», 2007. — С. 608. — ISBN 978-5-9775-0142-2
2. Кристиан Уэнц PHP. Карманный справочник = PHP Phrasebook. — М.: «Вильямс», 2007. — С. 384. — ISBN 0-672-32817-8
3. Эд Леки-Томпсон, Алек Коув, Стивен Новицки, Хьяо Айде-Гудман PHP 5 для профессионалов = Professional PHP 5. — М.: «Диалектика», 2006. — С. 608. — ISBN 0-7645-7282-2
4. Кузнецов Максим, Симдянов Игорь Самоучитель PHP 5. — 2-е изд., перераб. и доп.. — Спб.: «БХВ-Петербург», 2006. — С. 608. — ISBN 5-94157-884-9
5. Кузнецов Максим, Симдянов Игорь, Голышев Сергей PHP 5. Практика создания Web-сайтов. — Спб.: «БХВ-Петербург», 2005. — С. 960. — ISBN 5-94157-552-1
6. Кузнецов Максим, Симдянов Игорь Головоломки на PHP для хакера. — Спб.: «БХВ-Петербург», 2006. — С. 464. — ISBN 5-94157-837-7
7. Кузнецов Максим, Симдянов Игорь, Голышев Сергей PHP 5 на примерах. — Спб.: «БХВ-Петербург», 2005. — С. 576. — ISBN 5-94157-670-6
8. Дмитрий Котеров, Алексей Костарев PHP. В подлиннике. — Спб.: «БХВ-Петербург», 2005. — С. 1120. — ISBN 5-94157-245-Х
приложение 1
Разработанная анкета
Рис 1.1 Форма добавления новой анкеты
приложение 2
Схема базы данных
Рис 2.1 Схема базы данных
Названия с пометкой T – это название таблиц, названия с пометкой PK – первичный ключ. База данных состоит из 4 таблиц. Связями указаны поля взаимодействия с первичных ключей с остальными полями.
приложение 3
Листинг программных модулей
Function. php
?php
$db_host = localhost;
$db_user = root;
$db_pass = ;
$db_name = sql;
$rezult = @mysql_connect($db_host,$db_user,$db_pass);
if(!$rezult)
die(Ошибка соединение с БД);
$rez = @mysql_select_db($db_name);
if(!$rezult)
die(База данных не найдена);
function user_sess_beg() {
global $CURRENT_USER;
$_SESSION[name]=$_REQUEST[name];
$_SESSION[user]=true;
$_SESSION[check]=md5(session_id().$_REQUEST[name].$_REQUEST[pass]);
$CURRENT_USER = htmlspecialchars($_SESSION[name]);
}
function admin_sess_beg(){
global $CURRENT_USER;
$_SESSION[admin]=md5(Admin.pass);
$_SESSION[name] = Ann Katya;
$CURRENT_USER = Ann Katya;
}
function check_user($name,$pass){
$sql = SELECT * FROM user WHERE name = $name and pass=$pass;
$result = @mysql_query($sql);
if(@mysql_num_rows($result))
return true;
else
return false;
}
function check_sess(){
@$name = $_SESSION[name];
$sql = SELECT * FROM user WHERE name=$name;
$result = @mysql_query($sql);
if(@mysql_num_rows($result)){
$user=mysql_fetch_assoc($result);
$check = md5(session_id().$user[name] .$user[pass]);
if($_SESSION[check]==$check)
return true;
else
return false;
}
else return false;
}
function html_head()
{
global $CURRENT_USER;
?
html
head
titleАнкета/title
meta http-equiv=Content-Type content=text/html; charset=windows-1251 /
/head
body bgcolor=#ffff00table height=100% width=100% style=border:double; border-color:#ff33cc; background-color:#ff33cc; color:#0000cc; font-weight: 500; border-width: 20;
tr
td height=39 style=border:double; border-color:#ff33cc; background-color:#ff33cc; color:#0000CC; font-weight: 500; border-width: 20;
ph2 Имя текущего пользователя:/h2
h2?=$CURRENT_USER;?/h2
/p/td
/tr
tr
td
?
}
function html_footer()
{
?/tr/td/table/boby?
}
function show_text_quest($quest)
{
if($quest[type]==1) echo $quest[quest];
else {
$arr = split(;,$quest[quest]);
echo $arr[0];
}
}
function show_quest($quest,$i)
{
switch($quest[type]) {
case 1: ?
input type=text maxlength=60 width=400 name=answers[?=$i?][2]
? break;
case 2: $arr = split(;,$quest[quest]); $num = count($arr);
for($j=1;$j$num;$j++) {
?:input type=radio checked name=answers[?=$i?][2][] value=?=$arr[$j];?? echo $arr[$j];?br
?}; break;
case 3: $arr = split(;,$quest[quest]); $num = count($arr);
for($j=1;$j$num;$j++) {
?:input type=checkbox name=answers[?=$i?][2][] value=?=$arr[$j];?? echo $arr[$j];?br?};
break;
case 4:
$arr = split(;,$quest[quest]); $num = count($arr);
?select size=1 name=answers[?=$i?][2]
? for($j=1;$j$num;$j++) { ?
option value=?=$arr[$j]? ?=$arr[$j]? /option
? }; ?/select ?
break;
default:? Неверный тип вопроса ? break;
} ?
input name=answers[?=$i?][1] type=hidden value=?=$quest[idquest]? /
?}
function Print_ank(){
$sql = SELECT * FROM `ank`;
$result = @mysql_query($sql);
if(@mysql_num_rows($result))
{
echo ol;
while($ank=mysql_fetch_assoc($result))
{
$str = li
.a href=form.php?formid= .$ank[idank] . .$ank[title]./a
./li;
echo $str;
}
echo /ol;
}
else
echo ВБДнетанкет;
}
function showuser($name)
{
$sql = SELECT * FROM `user` WHERE `name` = $name;
$result = @mysql_query($sql);
$result = mysql_fetch_assoc($result);
?
form name=form1 method=post action=index.php
input name=id type=hidden value=?=$result[id]?
table width=100% border=1 align=center style=border:double; border-color:#ff33cc; background-color:#ff33cc; color:#0000CC; font-weight: 500; border-width: 20;
tr
tddiv align=centerfont color=#000033 Имя/font/div/td
/tr
tr
tddiv align=centerfont color=#000033
input type=text name=name value=?=$result[name]?
/font/div/td
/tr
tr
tddiv align=centerfont color=#000033Пароль:/font/div/td
/tr
tr
tddiv align=centerfont color=#000033
input type=text name=pass value = ?=$result[pass]?
/font/div/td
/tr
tr
tddiv align=centerfont color=#000033font size=1Введитепарольдляподтверждения br /font/fontfont color=#000033
input type=text name=pass2
/font/div/td
/tr
tr
tddiv align=center font color=#000033
input name=apply type=submit id=apply value=Применить
/font/div/td
/tr
tr
tdnbsp;/td
/tr
/table
/form
?
}
function apply_change($name, $pass)
{
if($name == || $pass ==)
die(pa href=index.phpНазад/a);
$id = htmlspecialchars(trim($_REQUEST[id]));
if(is_numeric($id))
{
$sql = UPDATE `user` SET `name` = $name, `pass` = $pass WHERE `id` =$id LIMIT 1;
$result = @mysql_query($sql);
}
}
function admin_menu()
{ ?
tr
td align=right height=20 style=border:double; border-color:#FF33cc; background-color:#FF33cc; color:#0000CC; font-weight: 500; border-width: 20;
Главное меню hr /
a href=?user_editУправление пользователями/a
a href=?ank_editУправление анкетами/a
a href=?answersПросмотррезультатов/a
a href=?exitВыход/a/td
/tr ? }
function show_my_body(){
?
p align=centerstrongfont color=#33ff33 size=+4Добропожаловатьвпанельадминистрирования./font/strong/p
?
}
?
Ankets_manager.php
?php
if(!isset($_SESSION[admin]) $_SESSION[admin]!=md5(Admin.pass)) die(Доступ запрещен);
$i=0;
$idank=0;
if(isset($_REQUEST[ank_del]) isset($_REQUEST[ankID]))
{
$id = htmlspecialchars($_REQUEST[ank_del]);
$query =DELETE FROM `quest` WHERE `idank` = $id;
mysql_query($query);
$query =DELETE FROM `ank` WHERE `idank` = $id;
mysql_query($query);
die(pa href=index.phpАнкета удалена/a);
}
if(isset($_REQUEST[save_new]))
{
if(!isset($_REQUEST[name]) || !isset($_REQUEST[newquest]))
die(pa href=index.phpОшибка/a);
$newq = $_REQUEST[newquest][text];
$query = SELECT COUNT(*) FROM ank WHERE `title` =.$newq .;
$name = $_REQUEST[name];
$type = $_REQUEST[newquest][type];
$result = @mysql_query($query);
if(mysql_result($result,0)0)
return;
$query = INSERT INTO `ank` ( `idank` , `title` , `votes` )
VALUES (
, $name, 0
);
$result = @mysql_query($query);
$query = SELECT idank FROM ank WHERE `title` = $name;
$result = @mysql_query($query);
$idank = @mysql_result($result,0);
$query = INSERT INTO `quest` ( `id` , `idank` , `text`,`type`) VALUES (
, $idank, $newq,$type);
$result = @mysql_query($query);
echo scriptdocument.location.href=index.php?ank_edit=editankID=$idank/script\n;
}
if(isset($_REQUEST[del]) isset($_REQUEST[ankID]))
{
$id = $_REQUEST[del];
$query = DELETE FROM `quest` WHERE id = $id LIMIT 1;
$result = @mysql_query($query);
}
if(isset($_REQUEST[saveank]))
{
@$name = $_REQUEST[name];
@$ankID = $_REQUEST[ankID];
@$quest=$_REQUEST[quest];
if($name!=)
$query = UPDATE `ank` SET `title` = $name WHERE `idank` =$ankID;
mysql_query($query);
if(!is_array($quest))
return;
foreach($quest as $k = $v)
{
$sql =UPDATE `quest` SET `text` =. $v[text] .,`type`=. $v[type]. WHERE `id` =$k;
mysql_query($sql);
}
echo scriptdocument.location.href=index.php?ank_edit=editankID=$ankID/script\n;
}
if(isset($_REQUEST[newquest]) isset($_REQUEST[ankID]) $_REQUEST[newquest][text]!=)
if($_REQUEST[newquest]!=)
{
$id = htmlspecialchars($_REQUEST[ankID]);
$text = htmlspecialchars($_REQUEST[newquest][text]);
$type = $_REQUEST[newquest][type];
if(!is_numeric($id) !is_null($id)) die(pa href=index.phpОшибка/a);
$query = INSERT INTO `quest` (`id`, `idank`, `text`,`type`) VALUES (,
.$id .,
.$text .,
.$type .);
mysql_query($query);
echo scriptdocument.location.href=index.php?ankID=$idank_edit=edit/script\n;
}
if(isset($_REQUEST[ankID]))
{
$id = $_REQUEST[ankID];
if(is_numeric($id) !is_null($id))
EditAnk($id);
else
die(pa href=index.phpОшибка/a);
}elseif(isset($_REQUEST[addank]))
{
NewAnk();
}
else
ListAnk();
function NewAnk()
{
?
form name=form1 method=post action=
input name=ank_edit type=hidden value=go
input name=save_new type=hidden value=go
palign=centerДобавление анкеты /p
table width=100% border=0 style=border:double; border-color:#FF33cc; background-color:#FF33cc; color:#0000CC; font-weight: 500; border-width: 20;
tr
td width=79%font color=#000033strongНазвание анкеты: /strong/font/td
/tr
tr
td font color=#000033strong
input type=text name=name size=70 /
/strong/font/td
/trtr
tdfont color=#000033strongВопрос:/strong/font/td
/tr
tr
tdfont color=#000033strong
input name=newquest[text] type=text size=80 /
Тип вопроса
select name=newquest[type]
option value=1Текстовое поле/option
option value=2Радио группа/option
option value=3Флажок/option
option value=4Список/option
/select
/strong/font/td
/tr
tr
tdfont color=#000033strong
input type=submit name=addquest value=Добавить вопрос /
input name=saveank type=submit value=Сохранить анкету /
/strong/font/td
/tr
/table
/form
p align=center
? }
function ListAnk(){
$query = SELECT * FROM `ank`;
$result = @mysql_query($query);
?
/pdivalign=center
pУправление анкетами/p
table border=0 style=border:double; border-color:#FF33cc; background-color:#FF33cc; color:#0000CC; font-weight: 500; border-width: 20;
tr
td width=100font color=#000033nbsp;/font/td
td width=100font color=#000033strongАнкета: /strong/font/td
td width=100font color=#000033strongОтветов:/strong/font/td
td width=100font color=#000033nbsp;/font/td
td width=100font color=#000033nbsp;/font/td
/tr
? if(@mysql_num_rows($result)) {
while($ank=mysql_fetch_assoc($result))
{ ?
tr
form action=index.php method=post
tdnbsp;/td
td?=$ank[title]?input name=ankID type=hidden value=?=$ank[idank]?/td
td?=$ank[votes]?/td
tdinput name=ank_edit type=submit value=Изменить /td
tda href=index.php?ankID=?=$ank[idank]?ank_edit=editank_del=?=$ank[idank]?Удалить/a/td
/tr
/form
? }
}else
echo В БД нет анкет;
?
/table
br /
form action=index.php method=post name=form
input name=addank type=hidden
input name=ank_edit type=submit value=Добавить анкету
/form
/div
?
}
function EditAnk($ankID)
{
$query = SELECT * FROM `ank` WHERE idank=.$ankID;
$result = @mysql_query($query);
$ank = mysql_fetch_assoc($result);
$query = SELECT * FROM `quest` WHERE idank=.$ankID;
$result = @mysql_query($query);
?
form name=form1 method=post action=
input name=ank_edit type=hidden value=?=$ank[idank]?
input name=ankID type=hidden value=?=$ank[idank]?
pnbsp; /p
table border=0 style=border:double; border-color:#FF33cc; background-color:#FF33cc; color:#0000CC; font-weight: 500; border-width: 20;
tr
td font color=#000033Название анкеты: /font/td
td font color=#000033
input name=name2 type=text value=?=$ank[title]? size=50 /
/font/td
tdfont color=#000033nbsp;/font/td
/tr
tr
tdfont color=#000033nbsp;/font/td
tdfont color=#000033nbsp;/font/td
tdfont color=#000033nbsp;/font/td
/tr
tr
? while($quest = mysql_fetch_assoc($result)) { ?
/tr
tr
tdfont color=#000033nbsp;/font/td
tdfont color=#000033
input name=quest[?=$quest[id]?][text] type=text value=?=$quest[text]? size=80 /
select name=quest[?=$quest[id]?][type]
option value=1 ? if($quest[type] == 1) echo selected=selected; ?Текстовое поле/option
option value=2 ? if($quest[type] == 2) echo selected=selected; ?Радио группа/option
option value=3 ? if($quest[type] == 3) echo selected=selected; ?Флажок/option
option value=4 ? if($quest[type] == 4) echo selected=selected; ?Список/option
/select
/font/td
tda href=index.php?ankID=?=$ankID?ank_edit=editdel=?=$quest[id]?Удалить/a/td
/tr
?} ?
tr
tdfont color=#000033nbsp;/font/td
tdfont color=#000033nbsp;/font/td
tdfont color=#000033nbsp;/font/td
/tr
tr
tdfont color=#000033Новый вопрос/font/td
tdfont color=#000033
input name=newquest[text] type=text size=60 /
Тип
select name=newquest[type]
option value=1Текстовое поле/option
option value=2Радио группа/option
option value=3Флажок/option
option value=4Список/option
/select
/font/td
tdfont color=#000033nbsp;/font/td
/tr
tr
tdfont color=#000033nbsp;/font/td
tdfont color=#000033
input type=submit name=addquest2 value=Добавить вопрос /
/font/td
tdfont color=#000033
input name=saveank2 type=submit value=Сохранить анкету /
/font/td
/tr
/table
pnbsp;/p
pnbsp;/p
/form
?} ?
Result_view.php
?php
if(!isset($_SESSION[admin]) $_SESSION[admin]!=md5(Admin.pass)) die(Доступ запрещен);
?
divalign=centerПросмотр результатов
?
if(isset($_REQUEST[showank])) {
if(is_numeric($_REQUEST[showank]))
show_ank($_REQUEST[showank]);
}elseif(isset($_REQUEST[fs]))
{
$idf = $_REQUEST[ank];
$idu = $_REQUEST[u];
if($idf== $idu ==)
die(Ошибка!!! pa href=index.phpНазад/a);
show_answer($idu,$idf);
}else
listank();
function show_ank($id) {
$sql = SELECT `title` FROM `ank` WHERE `idank` = $id;
$result = @mysql_query($sql);
$title = @mysql_result($result,0);
$sql = SELECT DISTINCT(`iduser`) FROM `ans` WHERE `idank` =$id;
mysql_free_result($result);
$result= @mysql_query($sql);
?
br
/div
br
table width=100% border=0 style=border:double; border-color:#00ffff; background-color:#00ffff; color:#0000CC; font-weight: 500; border-width: 20;
tr
td width=30%div align=rightfont color=#000033strongАнкета: /strong/font/div/td
td width=30%font color=#000033strong
?=$title?
/strong/font/td /tr tr
tdfont color=#000033nbsp;/font/td
tdfont color=#000033nbsp;/font/td
/tr tr
td colspan=2div align=centerfont color=#000033strongОтветившие пользователи/strong/font/div div align=center/div/td
/tr tr
tddiv align=rightfont color=#000033Имя пользователя: /font/div/td
td font color=#000033 ?
while($user = mysql_fetch_array($result)) {
$sql = SELECT `name`, `id` FROM `user` WHERE `id` = .$user[0];
$rez = @mysql_query($sql);
$rez = @mysql_fetch_array($rez);
echo a href=index.php?answersfsu= .$rez[1] .ank= .$id . .$rez[name] ./abr; } ?
/font/td /tr/table
? }
function show_answer($idu,$idf){
$sql = SELECT `name` FROM `user` WHERE `id` = $idu;
$result = @mysql_query($sql);
$name = @mysql_result($result,0);
$sql = SELECT `title` FROM `ank` WHERE `idank` = $idf;
$result = @mysql_query($sql);
$title = @mysql_result($result,0);
$sql = SELECT `idquest`, `answer` FROM `ans` WHERE `iduser`= $idu AND `idank` = $idf;
$result = @mysql_query($sql); ?
br
table width=100% border=0 style=border:ridge; border-color:#00ffcc; background-color:#00ffcc; color:#0000CC; font-weight: 500; border-width: 20;
tr
td width=30%div align=rightfont color=#000033 size=+2strongАнкета: /strong/font/div/td
td width=30%font color=#000033strongnbsp;nbsp;nbsp;
?=$title?
/strong/font/td
/tr
tr
tddiv align=rightfont color=#000033 size=+2strongUser:/strong/font/div/td
tdfont color=#000033bnbsp;nbsp;nbsp;
?=$name?
/b/font/td
/tr
tr
tdnbsp;/td
tdnbsp;/td
/tr
tr
tddiv align=leftfont color=#000033 size=+2strongВопрос/strong/font/div/td
tddiv align=leftfont color=#000033strongfont size=+2Ответ/font/strong/font/div/td
/tr
?
while($l = mysql_fetch_assoc($result)){
$sql = SELECT `text` FROM `quest` WHERE `id` = .$l[idquest];
$rez = @mysql_query($sql);
$quest = @mysql_result($rez,0);
?
tr
tddiv align=leftfont color=#000033
?=$quest?
/font/div/td
tddiv align=leftfont color=#000033
?=$l[answer]?
/font/div/td
/tr
? } ?
/table
? }
function listank() {
$sql = SELECT * FROM `ank`;
$result = @mysql_query($sql);
if(mysql_num_rows($result))
{
echo pВыберите анкету для просмотра результатов /p;
while($ank=mysql_fetch_assoc($result))
{
$str = lia href=index.php?answersshowank= .$ank[idank] . .$ank[title]./a;
echo $str;
}
echo brbrbr;
}
else
echo В БД нет анкет;
}
?
приложение 4
Анкеты контрольного примера
Рис 4.1 Форма прохождения анкетирования