mysql_connect($SERVER,$USER,$PASSWD))
При удачной попытке выбираем базу данных:
mysql_select_db($DB);
И создаем таблицы. Таблицы базы данных создаются в виде скрипта PHP, затем скрипт запускается и база данных RLI_test появляется в списке данных MySQL сервера. Проверить процесс создания таблиц можно утилитой WinMySQLadmin1.4 на странице Databases.
Для выполнения различных запросов на создание, модификацию и удаление таблиц и записей в них в MySQL используется команда:
mysql_query(“Строка запроса”);
//Создаем таблицу пользователей - users
mysql_query("CREATE TABLE users
(login char(16) PRIMARY KEY,
passwd char(128) NOT NULL,
lastname char(40) NOT NULL,
firstname char(40) NOT NULL,
middlename char(40) NOT NULL,
n_group char(40) NOT NULL,
registration_date date,
sex enum('мужской', 'женский'),
email char(128) NOT NULL,
student_code char(10) NOT NULL UNIQUE,
u_admin enum('y', 'n') DEFAULT 'n',
FOREIGN KEY (login) REFERENCES user_courses (login),
FOREIGN KEY (student_code) REFERENCES correct_codes (student_code))");
//Создаем таблицу курсов - courses
mysql_query("CREATE TABLE courses
(id_course int PRIMARY KEY AUTO_INCREMENT,
course_name char(128) NOT NULL,
course_annotation text,
course_full_description char(128),
course_picture_link char(128),
course_period float,
n_teacher int NOT NULL,
FOREIGN KEY (id_course) REFERENCES user_courses (n_course),
FOREIGN KEY (id_course) REFERENCES course_parts (id_course_part))");
//Создаем таблицу ссылок загрузок курсов - course_parts
mysql_query("CREATE TABLE course_parts
(id_course_part int PRIMARY KEY AUTO_INCREMENT,
n_course int NOT NULL,
n_part int NOT NULL,
download_link char(128) NOT NULL,
download_description text,
test_name char(128),
test_question_count int NOT NULL DEFAULT 5,FOREIGN KEY (id_course_part) REFERENCES questions (n_course_part),
FOREIGN KEY (id_course_part) REFERENCES user_tests (n_course_part))");
//Создаем таблицу вопросов - questions
mysql_query("CREATE TABLE questions
(id_question int PRIMARY KEY AUTO_INCREMENT,
n_course_part int NOT NULL,
question_content char(255) NOT NULL,
FOREIGN KEY (id_ question) REFERENCES answers (n_ question))");
//Создаем таблицу ответов - answers
mysql_query("CREATE TABLE answers
(id_answer int PRIMARY KEY AUTO_INCREMENT,
n_question int NOT NULL,
answer_content char(255) NOT NULL,
right_answer enum('y', 'n') DEFAULT 'n' NOT NULL)");
//Создаем таблицу курсов пользователей - user_courses
mysql_query("CREATE TABLE user_courses
(id_user_course int PRIMARY KEY AUTO_INCREMENT,
login char(16) NOT NULL,
n_course int NOT NULL,
status enum('reg', 'end', 'not')),
registration_date date,
end_date date,
FOREIGN KEY (id_ user_course) REFERENCES user_tests (n_user_course))");
//Создаем таблицу тестов пользователей - user_tests
mysql_query("CREATE TABLE user_tests
(id_user_test int PRIMARY KEY AUTO_INCREMENT,
n_user_course int NOT NULL,
n_course_part int NOT NULL,
attemps int,
percent int,
last_test_date date)");
//Создаем таблицу преподавателей - teachers
mysql_query("CREATE TABLE teachers
(id_teacher int PRIMARY KEY AUTO_INCREMENT,
teacher_name char(128) NOT NULL,
teacher_degree char(128),
teacher_email char(128),
teacher_photo char(128),
teacher_about text,
FOREIGN KEY (id_teacher) REFERENCES courses (n_teacher))");
//Создаем таблицу корректных шифров студентов - correct_codes
mysql_query("CREATE TABLE correct_codes
(student_code char(10) PRIMARY KEY)");
//Создаем таблицу новостей - news
mysql_query("CREATE TABLE news
(id_news int PRIMARY KEY AUTO_INCREMENT,
title char(128) NOT NULL,
date_news date,
body_news char(128) NOT NULL,
autor_newschar(100))");
Используемые типы данных и их описание приведено в таблице 2.15.
Таблица 2.15 - Используемые типы данных
№п/п | Тип данных | Описание |
1 | int | Целое число. В MySQL тип данных int может быть со знаком или без знака |
2 | float | Число с плавающей запятой. Этот тип допускает больший диапазон значений, чем int, но не обладает его точностью |
3 | char(длина) | Символьная величина фиксированной длины. Поля типа char не могут содержать строки длины большей, чем указанное значение. Поля меньшей длины дополняются пробелами |
4 | date | Стандартное значение даты. Формат хранения даты по умолчанию ‘yyyy-mm-dd’ |
5 | text | Символьная величина переменной длины |
6 | enum(‘знач1’, …, ‘значN’) | Перечисляемый тип |
Создание базы данных и таблиц базы данных осуществляется один раз на сервере при установке web-приложения. Созданная база данных по умолчанию хранится в папке установки MySQL в папке data/rli_test. Заранее созданную и наполненную содержимым базу данных можно перенести на сервер, скопировав указанную папку в аналогичную на сервере.
Закрытие выбранной базы данных осуществляется функцией mysql_close().
Извлечение данных из таблицы осуществляется в цикле while() с помощью функции mysql_fetch_row, в качестве параметра которой подается массив $result, хранящий результат выполнения строки запроса выборки данных из таблиц. Функция выбирает строку из массива, которая записывается в переменную $row и автоматически переходит на следующую строку. При следующем вызове mysql_fetch_row, выбирается следующая строка из массива, и так далее до тех пор, пока не будет достигнут конец массива. В этом случае mysql_fetch_row вернет значение false, которое послужит сигналом, что все записи выбраны, и можно завершить цикл.
К каждому столбцу в массиве $row можно обратиться по его порядковому номеру, который заключается в квадратные скобки, например, $row [1], в которой хранятся значения второго столбца таблицы данных. Элементы массивов нумеруются с 0, а не с 1.
Функция mysql_fetch_array() позволяет обращаться к каждому полю массива не по номеру, а по имени, например, $row ["user"] ("user" - название столбца в базе данных и в массиве).
Cookie - это переменная, которая хранится на диске у пользователя. Cookies используются для хранения небольшой по объему информации у клиента, например, его логина и другой информации.
Для установки Cookies используется функция SetCookie. В общем случае для этой функции можно указать целых шесть параметров, но обязательный из них является только один - name:
name - задает имя (строка), закрепленное за Cookie;
value - определяет значение переменной (строка);
expire - время жизни переменной (целое число). Если этот параметр не указан, Cookie будет "жить" до конца сессии, то есть до закрытия браузера. Если время указано, то, когда оно наступит, Cookie самоуничтожится;
path - путь к Cookie (строка);
domain - домен (строка). В качестве значения устанавливается имя хоста с которого установили;
secure - передача через HTTPS-соединение.
Обычно используются только три первые параметра.
При использовании Cookies нужно иметь в виду, что Cookies должны быть установленными до первого вывода сценария (будь то оператор echo или вывод какой-нибудь функции). Поэтому желательно устанавливать Cookies в самом начале сценария. Дело в том, что Cookies устанавливаются с помощью определенного заголовка сервера, а если вы выводите что-нибудь, то это означает, что начинается тело документа. В результате Cookies не будут установлены.
Получить доступ к Cookies достаточно просто. Все они хранятся в переменной окружения НТТР_СООКIЕ. Если мы установили несколько Cookies, то в переменной НТТР_СООКIЕ они будут перечислены через "; " (через точку с запятой). Например:
mycookiel=valuel; mycookie2=value2
Для чтения значения Cookies можно обращаться к ним, как к обыкновенным переменным. Например: echo $user_name_. Только необходимо проверить существование переменной.
В работе Cookies используются для хранения данных логина пользователя, вошедшего в систему, значения параметра, вошел ли пользователь в систему (login_reg) и значения параметра, является ли пользователь администратором (login_admin). Значения переменных хранятся соответственно в Cookiesuser_name_, login_reg, login_admin. Это очень удобно, так как доступ к значению переменной, заданной Cookie, можно получить с любой страницы, при этом нет необходимости предавать их через поля. Cookie создаются на период сессии работы с системой, при выходе из системы они автоматически удаляются.
Опишем, как происходит работа системы. Алгоритм работы приложения представлен на рисунке 2.21.
Пользователь (студент или администратор) заходит на сайт и имеет возможность навигации по материалам сайта. Если пользователь зарегистрирован в системе, он может ввести логин и пароль и попасть на персональную страницу обучения. Если же не зарегистрирован, имеется возможность регистрации. При регистрации заполняются необходимые поля. Система проверяет, заполнил ли пользователь обязательные для регистрации поля. Если все верно происходит проверка, существует ли указанный пользователем (студентом) логин в системе и сверяет его шифр с разрешенными шифрами базы данных. Если все верно, то происходит успешная регистрация, и пользователь попадает на личную страницу обучения. Если что-то неверно, предлагается зарегистрироваться в системе повторно.
Рисунок 2.21 - Алгоритм работы web-приложения
На странице обучения пользователь получает возможность зарегистрироваться на какой-либо из предложенных курсов. Одновременно можно регистрировать до трех курсов одному пользователю. Выбрав зарегистрированный курс пользователь попадает на страницу обучения по этому курсу. Здесь проверяется не истек ли период действия курса, так как любой курс регистрируется на определенный срок. Курс разбит на подразделы. Студент скачивает материалы по подразделу и проходит тестирование. При успешном прохождении теста пользователь получает доступ к материалам следующего подраздела курса. После успешного тестирования по всем подразделам, необходимо пройти итоговый тест. В итоговом тесте студент отвечает на случайным образом выбранные вопросы по всему курсу. Каждый тест можно сдавать до трех раз. При неуспешной третьей попытке курс считается не сданным. Результаты тестирования хранятся в базе данных.
Для запуска web-приложения необходимо запустить Интернет-браузер и набрать в строке адреса следующее:
в локальном режиме http: // localhost/rlearning. ru или http: // localhost/rlearning. ru/index. php;
при регистрации домена в сети Интернет http: // www. rlearning. domen. ru или http: // www. rlearning. domen. ru/index. php (где domen- название домена).
Откроется главная страница приложения (рисунок 2.22).