50827

Взаимодействие PHP и MySQL. Механизмы сессий

Лабораторная работа

Информатика, кибернетика и программирование

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

Русский

2014-01-31

144 KB

8 чел.

Лабораторная работа №5

Взаимодействие PHP и MySQL. Механизмы сессий.

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

Основные понятия MySQL

СУБД MySQL - одна из множества баз данных, поддерживаемых в PHP. Система MySQL распространяется бесплатно и обладает достаточной мощностью для решения реальных задач.

SQL - это аббревиатура от слов Structured Query Language, что означает структурированный язык запросов. Этот язык является стандартным средством для доступа к различным базам данных.

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

Для работы с базами данных удобно пользоваться средством, входящее в комплект Web-разработчика: Denwer phpMyAdmin. Здесь можно создать новую базу данных, создать новую таблицу в выбранной базе данных, заполнить таблицу данными, а также добавлять, удалять и редактировать данные.

В MySQL определены три базовых типа данных: числовой, дата и время и строчный. Каждая из этих категорий подразделяется на множество типов. Основные из них:

Тип

Описание

INT

Целое число

TINYINT

Маленькое целое число (-127 до 128 или от 0 до 255)

FLOAT

Вещественное число с плавающей точкой

DATE

Дата. Отображается в виде ГГГГ-ММ-ДД

TIME

Время. Отображается в виде ЧЧ:ММ:СС

DATETIME

Дата и время. Отображается в виде ГГГГ-ММ-ДДЧЧ:ММ:СС

YEAR[(2|4)]

Год. Можно определить двух- или четырехциферный формат

CHAR(M)

Строка фиксированной длины М (M<=255)

VARCHAR(M)

Строка произвольной длины до М (M<=255)

TEXT

Длинные текстовые фрагменты (<=65535)

BLOB

Большие двоичные объекты (изображения, звуки)

Каждый столбец после своего типа данных содержит и другие спецификаторы:

Тип

Описание

NOT NULL

Все строки таблицы должны иметь значение в этом атрибуте. Если не указано, поле может быть пустым (NULL)

AUTO_INCREMENT

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

PRIMARY KEY

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

UNSIGNED

После целочисленного типа означает, что его значение может быть либо положительным, либо нулевым

Создание новой базы данных MySQL осуществляется при помощи SQL-команды CREATE DATABASE.

CREATE DATABASE IF NOT EXISTS `base`

DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin

Создание новой таблицы осуществляется при помощи SQL-команды CREATE TABLE. Например, таблица books для книжного магазина будет содержать пять полей: ISBN, автор, название, цена и количество экземпляров:

CREATE TABLE books (ISBN CHAR(13) NOT NULL,

                   PRIMARY KEY (ISBN),

                   author VARCHAR(30),

                   title VARCHAR(60),

                   price FLOAT(4,2),

                   quantity TINYINT UNSIGNED);

Чтобы избежать сообщения об ошибке, если таблица уже есть необходимо изменить первую строчку, добавив фразу "IF NOT EXISTS":

CREATE TABLE IF NOT EXISTS books ...

Добавление данных в эту таблицу осуществляется при помощи SQL-команды INSERT. Например:

INSERT INTO books ( ISBN, author, title, price, quantity )

          VALUES ('5-8459-0184-7', 'Зандстра Мэт',

                  'Освой самостоятельно PHP4 за 24 часа', '129', '5');

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

Символ * означает, что необходимы все поля. Например:

SELECT * FROM books;

Для получения доступа только к некоторому полю следует указать его имя в инструкции SELECT. Например:

SELECT author, title, price FROM books;

Чтобы получить доступ к подмножеству строк в таблице, следует указать критерий выбора, который устанавливает конструкция WHERE. Например, чтобы выбрать имеющиеся в наличии недорогие книги о PHP, надо составить запрос:

SELECT * FROM books WHERE

price < 200 AND title LIKE '%PHP%' AND quantity != 0;

% Соответствует любому количеству символов, даже нулевых
_ Соответствует ровно одному символу

Для того, чтобы строки, извлеченные по запросу, перечислялись в определенном порядке, используется конструкция ORDER BY. Например:

SELECT * FROM books ORDER BY price;

По умолчанию порядок сортировки идет по возрастанию. Изменить порядок сортировки на обратный можно с помощью ключевого слова DESC:

SELECT * FROM books ORDER BY price DESC;

Сортировать можно и по нескольким столбцам. Вместо названий столбцов можно использовать их порядковые номера:

SELECT * FROM books ORDER BY 4, 2, 3;

Для изменения ранее записанных в таблицу значений нужно воспользоваться командой UPDATE. Например, цену всех книг повысили на 10%:

UPDATE books SET price = price * 1.1;

Конструкция WHERE ограничит работу UPDATE определенным строками. Например:

UPDATE books SET price = price * 1.05 WHERE price <= 250;

Для удаления строк из базы данных используется оператор DELETE. Ненужные строки указываются при помощи конструкции WHERE. Например, какие-то книги проданы:

DELETE FROM books WHERE quantity = 0;

Связь PHP с базой данных MySQL

Создав в  phpMyAdmin базу данных, можно приступить к подключению этой базы данных к внешнему Web-интерфейсу.

Чтобы получить доступ к базе данных из Web, используя PHP, надо сделать следующие основные шаги:

  •  Подключение к серверу MySQL.
  •  Выбор базы данных.
  •  Выполнение запроса к базе данных:
    •  добавление;
    •  удаление;
    •  изменение;
    •  поиск;
    •  сортировка.
  •  Получение результата запроса.
  •  Отсоединение от базы данных.

Для подключения к серверу базы данных в PHP есть функция mysql_connect( ). Ее аргументы: имя компьютера, имя пользователя и пароль. Эти аргументы можно опустить. По умолчанию имя компьютера = localhost, тогда имя пользователя и пароль не требуется. Если PHP используется в сочетании с сервером Apache, то можно воспользоваться функцией mysql_pconnect(). В этом случае соединение с сервером не исчезает после завершения работы программы или вызова функции mysql_close(). Функции mysql_connect() и mysql_pconnect() возвращают идентификатор подключения, если все прошло успешно. Например:

$link = mysql_pconnect ();

if ( !$link ) die ("Невозможно подключение к MySQL");

После того, как соединение с сервером MySQL установлено, нужно выбрать базу данных. Для этого используется функция mysql_select_db(). Ее аргумент: имя базы данных. Функция возвращает true, если указанная база данных существует и доступ к ней возможен. Например:

$db = "sample";

mysql_select_db ( $db ) or die ("Невозможно открыть $db");

Для добавления, удаления, изменения и выбора данных нужно сконструировать и выполнить запрос SQL. Для этого в языке PHP существует функция mysql_query(). Ее аргумент: строка с запросом. Функция возвращает идентификатор запроса.

Пример:

<html>

<head>

 <title>Пример</title>

</head>

<body>

<?
/* Скрипт показывает пользователей, зарегистрировавшихся после 1 мая 2010г. */

/* Переменные для соединения с базой данных */
$hostname = "localhost";
$username = "my_login";
$password = "my_password";
$dbName = "my_database";

/* создать соединение */
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
/* выбрать базу данныхЕсли произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die(mysql_error()); 

/* составить запроскоторый выберет всех пользователей */
$query = "SELECT * FROM users WHERE date > '2010-05-01'";
/* Выполнить запросЕсли произойдет ошибка - вывести ее. */
$res = mysql_query($query) or die(mysql_error());

/* Как много нашлось таких */
$number = mysql_num_rows($res);

/* Напечатать всех в красивом виде*/
if ($number == 0) {
  echo "<p>Нет таких пользователей</p>";
} else {
  echo "<p>Найдено пользователей: $number<br /><br />";
  /* Получать по одной строке из таблицы в массив $row, пока строки не кончатся */ 
  while ($row=mysql_fetch_array($res)) {
    echo "Логин ".$row['login']." | ";
    echo "Его Email: ".$row['email']. " | ";

   echo "Дата регистрации: ".$row['date'];
    echo "<br /><br />";
  }
  echo "</p>";
}
?>

</body>

</html>


Список
MySQL-функций:

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

mysql_change_user - изменяет вошедшего/logged пользователя в активном соединении

mysql_character_set_name - возвращает имя набора символов/character set

mysql_close - закрывает MySQL-соединение

mysql_connect - открывает соединение с MySQL-сервером

mysql_create_db - создаёт БД MySQL

mysql_data_seek - перемещает внутренний результирующий указатель

mysql_db_name - получает результирующие данные

mysql_db_query - отправляет MySQL query

mysql_drop_db - удаляет БД MySQL

mysql_errno - возвращает числовое значение сообщения об ошибке из предыдущей MySQL-операции

mysql_error - возвращает текст сообщения об ошибке из предыдущей MySQL-операции

mysql_escape_string - мнемонизирует/Escapes строку для использования в mysql_query

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

mysql_fetch_assoc - извлекает результирующий ряд как ассоциативный массив

mysql_fetch_field - получает информацию столбца из результата и возвращает как объект

mysql_fetch_lengths - получает длину каждого вывода в результате

mysql_fetch_object - извлекает результирующий ряд как объект

mysql_fetch_row - получает результирующий ряд в перечислимом массиве

mysql_field_flags - получает флаги, ассоциированные со специфицированным полем в результате

mysql_field_len - возвращает длину специфицированного поля в результате

mysql_field_name - получает имя специфицированного поля в результате

mysql_field_seek - устанавливает результирующий указатель на смещение специфицированного поля

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

mysql_field_type - получает тип специфицированного поля в результате

mysql_free_result - освобождает результирующую память

mysql_get_client_info - получает информацию о клиенте MySQL

mysql_get_host_info - получает информацию о хосте MySQL

mysql_get_proto_info - получает информацию о MySQL-протоколе

mysql_get_server_info - получает информацию о MySQL-сервере

mysql_info - получает информацию о самом последнем запросе

mysql_insert_id - получает id, сгенерированный предыдущей операцией INSERT

mysql_list_dbs - список БД, доступных на MySQL-сервере

mysql_list_fields - список результирующих полей MySQL

mysql_list_processes - список процессов MySQL

mysql_list_tables - список таблиц в БД MySQL

mysql_num_fields - получает количество полей в результате

mysql_num_rows - получает количество рядов в результате

mysql_pconnect - открывает постоянное соединение с MySQL-сервером

mysql_ping - устанавливает Ping-соединение с сервером или соединяется повторно, если соединения нет

mysql_query - отправляет MySQL query

mysql_real_escape_string - мнемонизирует/Escapes специальные символы в строке для использования в SQL-операторе, учитывая текущий charset соединения

mysql_result - получает результирующие данные

mysql_select_db - выбирает БД MySQL

mysql_stat - получает текущий системный статус

mysql_tablename - получает имя таблицы поля

mysql_thread_id - возвращает id текущего потока

mysql_unbuffered_query - отправляет SQL query в MySQL без извлечения и буферизации результирующих рядов

Механизм сессий

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

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

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

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

Как устроены, и как работают сессии?

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

Сессии используют стандартные, хорошо известные способы передачи данных. Идентификатор - это обычная переменная. По умолчанию ее имя - PHPSESSID.

Задача PHP отправить ее браузеру, чтобы тот вернул ее со следующим запросом. Переменную можно передать только двумя способами: в куках или POST/GET запросом.

PHP использует оба варианта. За это отвечают две настройки в php.ini:

session.use_cookies - если равно 1, то PHP передает идентификатор в куках, если 0 - то нет.
session.use_trans_sid если равно 1, то PHP передает его, добавляя к URL и формам, если 0 - то нет.

Менять эти и другие параметры сессий можно так же, как и другие настройки PHP - в файле php.ini, а так же с помощью команды ini_set() или в файлах настройки веб-сервера.

Если включена только первая, то при старте сессии (при каждом вызове session_start()) клиенту устанавливается кука. Браузер исправно при каждом следующем запросе эту куку возвращает и PHP имеет идентификатор сессии. Проблемы начинаются, если браузер куки не возвращает. В этом случае, не получая куки с идентификатором, PHP будет все время стартовать новую сессию, и механизм работать не будет.

Если включена только вторая, то кука не выставляется. А происходит то, ради чего, в основном, собственно, и стоит использовать встроенный механизм сессий. После того, как скрипт выполняет свою работу, и страница полностью сформирована, PHP просматривает ее всю и дописывает к каждой ссылке и к каждой форме передачу идентификатора сессии. Это выглядит примерно так:
<a href="/index.php">Index</a> превращается в
<a href="/index.php?PHPSESSID=9ebca8bd62c830d3e79272b4f585ff8f">Index</a>
а к формам добавляется скрытое поле
<input type="hidden" name="PHPSESSID" value="00196c1c1a02e4c37ac04f921f4a5eec" />

И браузер при клике на любую ссылку, или при нажатии на кнопку в форме, пошлет в запросе нужную нам переменную - идентификатор сессии! По очевидным причинам идентификатор добавляется только к относительным ссылкам.

К идентификатору привязывается файл с данными на стороне сервера.
PHP это сделает за нас. Достаточно просто написать
session_start();
$_SESSION['test']='Hello world!';
И PHP запишет в файл, связанный с этой сессией, переменную test.

Чтобы поместить переменную в сессию, достаточно присвоить ее элементу массива $_SESSION.
Чтобы получить ее значение - достаточно обратиться к тому же элементу. Пример будет чуть ниже.

Cборкой мусора - удалением устаревших файлов PHP тоже занимается сам. Как и кодированием данных и кучей всяких других нужных вещей. В результате этой заботы работа с сессиями оказывается очень простой.
Пример:
<? 
session_start(); 
if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
echo "Вы обновили эту страницу ".$_SESSION['counter']++." раз";
echo "<br><a href=".$_SERVER['PHP_SELF'].">обновить"; 
?>
Мы проверяем, есть ли у нас в сессии переменная counter, если нет, то создаем ее со значением 0, а дальше выводим ее значение и увеличиваем на единицу. Увеличенное значение запишется в сессию, и при следующем вызове скрипта переменная будет иметь значение 1, и так далее.

Для того, чтобы иметь доступ к переменным сессии на любых страницах сайта, надо написать только одну (!) строчку в самом начале каждого файла, в котором нам нужны сессии:
session_start();
И далее обращаться к элементам массива $_SESSION. Например, проверка авторизации будет выглядеть примерно так:
session_start();
if ($_SESSION['authorized']<>1) {
header("Location: /auth.php");
exit;
}

Удаление переменных из сессии.
Если у вас
register_globals=off, то достаточно написать
unset($_SESSION['var']);
Если же нет, то тогда
рядом с ней надо написать
session_unregister('var');

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

Очень важно понимать, для чего сессии стоит использовать, а для чего - нет.

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

Во-вторых. Важно четко себе представлять тот факт, что сессия - это сеанс работы с сайтом, так как его понимает человек. Пришел, поработал, закрыл браузер - сессия завершилась. Этому есть и техническое объяснение. Гарантированно механизм сессий работает только именно до закрытия браузера. Ведь у клиента могут не работать куки, а в этом случае, естественно, все дополненные идентификатором ссылки пропадут с его закрытием.
Правда, сессия может пропасть и без закрытия браузера. В силу ограничений, механизм сессий не может определить тот момент, когда пользователь закрыл браузер. Для этого используется таймаут – заранее определенное время, по истечении которого мы считаем, что пользователь ушел с сайта. По умолчанию этот параметр равен 24 минутам.
Если вы хотите сохранять пользовательскую информацию на более длительный срок, то используйте куки и, если надо - базу данных на сервере. В частности, именно так работают все популярные системы авторизации:
- по факту идентификации пользователя стартует сессия и признак авторизованности передается в ней.
- Если надо "запомнить" пользователя, то ему ставится кука, его идентифицирующая.
- При следующем заходе пользователя на сайт, для того, чтобы авторизоваться, он должен либо ввести пароль, либо система сама его опознает по поставленной ранее куке, и стартует сессию. Новую сессию, а не продолжая старую.

В-третьих, не стоит стартовать сессии без разбору, каждому входящему на сайт. Это создаст совершенно лишнюю нагрузку. Не используйте сессии по пустякам – к примеру, в счетчиках.
Если же приходится показывать одну и ту же страницу как авторизованным, так и не авторизованным пользователям, то тут поможет такой трюк – стартовать сессию только тем, кто ввел пароль, или тем, у кого уже стартовала сессия.
Для этого в начало каждой страницы вместо просто
session_start() пишем
if (isset($_REQUEST[session_name()])) session_start();
таким образом, Мы стартуем сессию только тем, кто прислал идентификатор.
Соответственно, надо еще в первый раз отправить его пользователю – в момент авторизации.
Если имя и проль верные – пишем
session_start()!

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

Пример авторизации пользователя:

login.php

<html>

<head>

 <title>Страница авторизации<title>

</head>

<body

 

<form action="authorize.php" method="post">

Вход<br />

Пользователь <input type="text" name="login" /><br />

Пароль <input type="password" name="pass" /> 

<input type="submit" name="ok" value="  Ok  " />

</form>

</body>

</html>

authorize.php

<?

// соединяемся с базой

$conn = mysql_connect("localhost","user","pass");

mysql_select_db("my_db");

// составляем запрос

$query = "select * from users where login='". $_POST['login']."' AND pass='". $_POST['pass']."';";

$q = mysql_query($query);

// найден ли кто-нибудь 

$n = mysql_num_rows($q);

if ($n!=0)

{

// стартуем сессию (можно не в начале файла, т.к. никакого вывода в браузер не было)

   session_start();

   $value=mysql_fetch_array($q);

// записываем логин и емейл в сессию

   $_SESSION['user_login']=$value['login'];

   $_SESSION['email']=$value['email'];

 // редиректим (перенаправляем) на главную страницу сайта

   Header("Location: index.php");

}

else Header("Location: login.php"); // если юзер не найден, то снова на страницу авторизации

mysql_close();

?>

index.php

<? session_start(); ?>

<html>

 <head>

 <title>Главная<title>

 </head>

<body

 <? if ($_SESSION["login"]) echo "<h1>Привет, " . $_SESSION["login"] . "</h1>"; ?>

<!—весь остальной контент -->  

</body>

</html>

Если пользователь авторизуется, то в index выведет строку приветствия.

Список функций для работы с сессиями:

session_cache_expire - возвращает окончание действия текущего кэша

session_cache_limiter - получает и/или устанавливает текущий ограничитель кэша

session_decode - декодирует данные сессии из строки

session_destroy - уничтожает все данные, зарегистрированные для сессии

session_encode - шифрует данные текущей сессии как строку

session_get_cookie_params - получает параметры куки сессии

session_id - получает и/или устанавливает текущий session id

session_is_registered - определяет, зарегистрирована ли переменная в сессии

session_module_name - получает и/или устанавливает модуль текущей сессии

session_name - получает и/или устанавливает имя текущей сессии

session_readonly - начинает сессию - реинициализирует замороженные переменные, но не записывает в конец запроса

session_register - регистрирует одну или более переменных для текущей сессии

session_save_path - получает и/или устанавливает путь сохранения текущей сессии

session_set_cookie_params - устанавливает параметры куки сессии

session_set_save_handler - устанавливает функции хранения сессии уровня пользователя

session_start - инициализирует данные сессии

session_unregister - дерегистрирует переменную из текущей сессии

session_unset - освобождает все переменные сессии

session_write_close - записывает данные сессии и конец сессии


Задание к лабораторной работе:

  1.  Изменить web-сайт, разработанный в лабораторной работе №4, так, чтобы вся информация хранилась в базе данных и администратор мог её редактировать.
  2.  Создать через phpMyAdmin новую базу данных и все необходимые таблицы.
  3.  Перенести все тексты страниц в соответствующую таблицу (таблицы).
  4.  Реализовать регистрацию и авторизацию пользователей на сайте.
  5.  Реализовать интерфейс администратора (http://site_name/admin/) для управления всеми текстами и пользователями сайта. Использовать механизм сессий. Реализовать разграничение прав доступа (администратор, обычный пользователь).
  6.  Дополнить один из приемов лабораторной работы №4 используя приемы работы с базой данных, добавив/изменив функционал, выделенный курсивом:
    •  отправка email’а через форму обратной связи с полями «Представьтесь», «Ваш E-mail», «Текст сообщения». Использовать дополнительные заголовки.

Письма могут отправлять только авторизованные пользователи и все их письма сохраняются в БД. Администратор может их просмотреть.

  •  RSS-поток с возможностью просмотра в google reader или яндекс ленте. Данные для потока читать из базы данных, создав предварительно систему новостей, которые может добавлять администратор и пользователи.
    •  наложение текстов/изображений на другие изображения (водяные знаки) или рисование графиков, загрузка изображений и других файлов в каталог на сервере и отображение ссылок на них.

Работать с изображениями могут только авторизованные пользователи. Все ссылки на загруженные и созданные изображения хранятся в БД, администратор может их просмотреть и/или удалить.

  •  организовать сохранение/чтение/удаление из базы данных данных на определенную предметную область (например база данных аудиотреков, видеофильмов, компьютерных комплектующих и т.д. с параметрами «название», «длительность», «вес»).

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

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

Записи в БД (список новостей) создает и редактирует администратор сайта, а также авторизованные пользователи.

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

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

  1.  Страницы должны быть работоспособны в любом браузере.

Каждый отчет должен содержать:

  1.  Заголовок лабораторной работы (название и цель работы).
  2.  Фамилия, инициалы и группа студента.
  3.  Задание к лабораторной работе.
  4.  Краткие теоретические сведения.
  5.  Описание алгоритмов, функций, примененных решений.
  6.  Дамп базы данных.
  7.  Экранные формы разработанных страниц.
  8.  Основные тексты страниц.
  9.  Выводы по сделанной работе.


 

А также другие работы, которые могут Вас заинтересовать

53309. Україна в роки Другої світової війна (1939 -1945 рр.). Велика Вітчизняна війна (1941-1945 рр.) 131.5 KB
  Виховувати почуття гордості до історичного минулого України. Доповніть текст: Приєднання Західної України та Західної Білорусії до СРСР розпочалося після вступу Червоної армії на територію Польщі. Закон про включення Західної України до складу СРСР і возз’єднання її з Українською РСР було прийнято: а Верховними Радами СРСР та УРСР у листопаді 1939 р.; б Народними зборами Західної України у жовтні 1939 р.
53310. Московська держава 74.5 KB
  МЕТА: Ознайомити учнів із внутрішній та зовнішній політикою Івана IV. Вінчання Івана IV на царство. Судебник Івана IV. ТИП УРОКУ: комбінований СТРУКТУРА УРОКУ Організаційний момент Актуалізація Вивчення нового матеріалу ІванIV Грозний; Реформи царя Івана IV; Опричнина та її наслідки для розвитку Росії; Зовнішня політика Івана IV.
53311. Двомовне вивчення історії у 5 класі як засіб формування громадянської свідомості учнів 56.5 KB
  Методи та прийоми: інформаційно-повідомлюючий пояснювально-спонукальний частково пошуковий; бесіда колективна та самостійна робота з підручником атласом; практичне завдання в контурній карті; інтерактивні вправи дидактичні ігри. В низинах Дніпра за дніпровськими порогами пролягали безкрайні...
53313. Козацька Україна 290 KB
  Рубрика Секрети старого козака. lмпровізована сцена біля дошки яка містить елементи відтворення української хати мальованого образу козака українського орнаменту та квітів. Виходять учень та учениця в українських костюмах: Ученькозак: В сивусиву давнину Козаки йшли на війну Бо на рідну Україну Сунулися без упину Ляхи турки та татари Москалі та яничари. Ученицякозачка: Козаки скликають раду: Не буде ворогу пощади Вірні коні рвуться в битву Крешуть іскри зпід копита.
53314. Використання НІТ в адміністративно-господарській діяльності школи 143 KB
  Впровадження НІТ в адміністративно-господарську діяльність школи Напрямки: Організаційне забезпечення. Розвиток єдиного інформаційного простору школи. функціонування інформаційноуправлінської господарської системи закладу; розробка методики використання НІТ в учбовому процесі; застосування різних форм мотивація вчителів працівників школи до використання НІТ в навчальновиховному процесі атестація матеріальне заохочення тощо.
53315. Хлеб - всему голова 41.5 KB
  Воспитывать любовь уважение и бережное отношение к труду и хлебу. Оборудование: Плакат Хлеб - всему голова колоски пшеницы иллюстрации к теме Ход 1. Ребята как вы думаете что это Хлеб.
53316. Хліб – годувальник, всьому голова 38.5 KB
  Мета: виховувати бережне ставлення до хліба повагу до хліборобів. Обладнання: у святковоприбраній світлиці на столі на вишитій скатертині скіп пшениці хлібина вироби з тіста. На землі вирощують хліб.