Коммуникационная модель Web
Добавление данных
Результатом исполнения скрипта create.php3 является файл test. Каждая запись этого файла состоит из двух типов данных: номера по списку id и соответствующих ему фамилии и инициалов - name.Операция добавления данных позволяет создавать новые записи и заполнять их поля заданными значениями.
Примитив добавления данных
// *** соединение с БД ***
require "primitive/connect.inc";
// *** добавление данных ***
$result = pg_Exec( $cnct, "INSERT INTO test values(1, 'Иванов')" );
if ( $result )
{
echo "Data insert \n";
}
?>
назовем insert.php3.
Поместите его на сервер и запустите на исполнение Netscape Navigator'ом.
Если данные будут добавлены, то вы увидите сообщение: Data insert
Формы - средство ввода данных
Примитивы, которые мы разрабатываем должны быть универсальны. Другими словами, они должны позволять работать с изменяемыми значениями параметров SQL. В противном случае разрабатывать приложения компоновкой примитивов нельзя.Рассмотрим в качестве примера реализацию примитива добавления данных с параметром.
В частном случае, когда номер по списку id = 1 и соответствующая ему фамилия - name = "Иванов", он может быть записан так
// *** соединение с БД ***
require "primitive/connect.inc";
// *** добавление данных ***
$result = pg_Exec( $cnct, "INSERT INTO test values(1, 'Иванов')" );
if ( $result )
{
echo "Data insert \n";
}
?>
Параметры примитива можно изменять с помощью html форм.
Начало описания формы обозначают оператором . Например,
Рассмотрим основные параметры оператора
Последнее, что необходимо - это заменить строку примитива
$result = pg_Exec( $cnct, "INSERT INTO test values(1, 'Иванов')" );
на следующую
$result = pg_Exec( $cnct, "INSERT INTO test values(1, '$na')" );
Это позволит добавлять в таблицу БД строки с любыми значениями параметра name.
[<<] | [] | [ >>]
Изменение значений данных
Можно произвести SQL командой UPDATE. Например, такUPDATE test
SET name = 'Петров'
WHERE name = 'Иванов'
Такие запросы, как правило, образуют конкатенацией (символ ".=" ) и хранят в переменной.
В ниже следующем скрипте это переменная $query.
// *** соединение с БД ***
require "primitive/connect.inc";
// *** изменение значений данных ***
// формирование запроса
$query = "UPDATE test " ;
$query .= "SET name = 'Петров' " ;
$query .= "WHERE name = 'Иванов' " ;
// Исполнение запроса
$result = pg_Exec( $cnct, $query );
if ( $result )
{
echo "Data update \n";
}
?>
Сохраните скрипт под именем udate.php3. Запустите его и убедитесь, что фамилия "Иванов" была изменена на "Петров".
Литература и ресурсы
Relational Databases - http://www.awtrey.com/support/dbeweb/Stig S. Bakken and all. PHP3 Manual - http://www.devshed.com/Server_Side/PHP/Manual/manfiles/
Дик Брэндон. PHP/FI Version 2.0 /Пер. с англ. Юрия Плетнева - http://www.citforum.ru/internet/php/index.shtml
Литература и ресурсы
Jay Greenspan. Working with Forms - http://www.hotwired.com/webmonkey/99/13/index2a_page4.htmlСправочник телефонов
Приложение Web баз данных "справочник телефонов" выбрано из следующих соображений:по сути, это не сложное приложение;
оно может быть использовано на практике.
Данное приложение позволяет по заданной фамилии или ее части найти в базе данных все похожие фамилии. Затем оно формирует html документ, который содержит список из этих фамилий и соответствующих им номеров телефонов.
Для ввода фамилии или ее части пользователь должен заполнить однострочную форму, которой соответствует следующий htm код
Теперь обсудим текст скрипта view.php3. Структурно он должен состоять из трех частей, которые должны обеспечить:
соединение с БД;
выборку данных из БД на основании совпадения фамилий с введенной в форму комбинацией символов;
динамическое формирование html документа.
Первую из перечисленных задач можно решить примитивом connect.inc.
Вторую задачу SQL командой
SELECT * FROM phone WHERE lower(fio) LIKE '_fio%'
Для решения третьей задачи можно предложить следующий скрипт, который разработан на основе view_n.php3
// *** динамическое формирование html документа ***
$RecCount = pg_NumRows( $result ); // число записей, которые следует отобразить на экране
if (empty( $RecCount )) {
echo "No Data\n"; // нет таких фамилий
}
else {
?>
| Name: | echo $arr['fio']; ?> | Phone: | echo $arr['num']; ?> |
Назовем его примитивом view_m.inc.
Окончательно текст скрипта view.php3, который обеспечивает реализацию "справочника телефонов" следующий:
//*** соединение с БД ***
require "primitive/connect.inc";
// *** выборка данных ***
$result = pg_Exec( $cnct, "SELECT * FROM phone WHERE lower(fio) LIKE '$_fio%'" );
// *** отображение данных ***
require "primitive/view_m.inc";
?>
Результат работы приложения "справочник телефонов" в случае просмотра абонентов, фамилии которых начинаются на "Ив" приведен ниже.

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

Для определенности клиентскую часть реализуем Netscape Navigator.
Серверная часть функционирует под управлением ОС UNIX. В качестве Web-сервера используем Apache. Данные будем хранить в Postgres95 реляционной базе. Назовем эту базу данных - chek.
WebDBApp будем хранить на том же компьютере, что и базу данных. Например, в папке WebDBApp. Для манипуляций приложениями используем FAR менеджер. Можно приложение Windows Notepad.exe (Блокнот).
Для освоения излагаемого материала можно реализовать клиентскую и серверную части модели распределенных вычислений на одном компьютере (локально), например, в среде Windows. Вместо Postgres95 можно использовать ODBC или . Отличия команд PhP этих серверов от PhP Postgres95 можно уточнить . Инсталляция Apache описана в статье [].
[] | [ >>]
Литература и ресурсы
Дмитрий Котеров. Apache + Perl + PHP 3.0 для Windows 95/98: руководство по установке - http://www.webclub.ru/materials/apache_win/index.html
Просмотр данных
Предварительно задают объем просматриваемых данных.Эту операцию называют "выборка". Ее реализуют SQL командой SELECT. Например, так
SELECT * FROM test
Затем данные, которые выбраны из таблицы, распечатывают построчно. Для этого используют функции, которые сохраняют строки таблиц, как массивы, например,
array pg_Fetch_Array(int result, int row);
Здесь row - номер строки. Их нумеруют, начиная с 0.
Итак, примитив просмотра данных
// *** соединение с БД ***
require "primitive/connect.inc";
// *** просмотр данных ***
$result = pg_Exec( $cnct, "SELECT * FROM test" );
if ( $result )
{
$arr = pg_Fetch_Array ($result, 0);
echo $arr['name'];
}
?>
назовем view.php3.
Поместите его на сервер и запустите на исполнение.
Обратите внимание, что данный скрипт позволяет просмотреть значение поля name только одной записи.
Если в таблице несколько строк, и вы хотите просмотреть результат выборки как таблицу, то используйте следующий скрипт
//*** соединение с БД ***
require "primitive/connect.inc";
// *** просмотр данных ***
$result = pg_Exec( $cnct, "SELECT * FROM test" );
$RecCount = pg_NumRows( $result ); // число записей, которые следует отобразить на экране
?>
| Name: | echo $arr['name']; ?> |
Назовем этот скрипт view_n.php3.
Результат его исполнения такой

Разработка базовых примитивов
Примитивы можно разделить на две группы: манипулирования таблицами базы данных и самими данными. К первой группе относят:создание таблиц баз данных;
удаление таблиц из базы данных.
Во вторую группу входят:
добавление данных;
просмотр данных;
изменение значений данных;
удаление записей таблиц.
Любые манипуляции с таблицами или их данными возможны только после соединения с базой данных. Поэтому, прежде, чем перейти к разработке примитивов рассмотрим этот вопрос.
Соединение с базой данных
Для баз данных Postgres95 это делают с помощью функцииint pg_Connect(string host, string port, string options, string tty, string dbname);
Эта функция возвращает идентификатор соединения. Он равен 1, если соединение прошло успешно. В противном случае его значение равно 0.
Сохраните ниже приведенный скрипт в файле connect.php3 и поместите его в папку WebDBApp.
$cnct = pg_Connect( "host=localhost port=5432 dbname=chek user=chek" );
if( !$cnct )
{
// соединения нет
echo "Connect to database failed! Please, consult the system administrator. \n";
exit;
}
else
{
// соединение прошло успешно
echo "Do Something \n";
}
?>
Запустите скрипт на исполнение, для чего воспользуйтесь, например, Netscape Navigator.
Введите в его адресной строке путь к папке WebDBApp, например, так http://ssu.sumy.ua/teach/WebDBApp/connect.php3
Если соединение с базой данных произойдет успешно, то вы увидите следующее сообщение

Как мы уже отмечали приложения Web баз данных - это сплав PhP и HTML кодов. Как же сервер их различает.
Для указания начала PhP кода используют такую комбинацию символов , а его завершение помечают так ?>. Цвет символов серверу безразличен. Этот цвет выбран для того, чтобы в дальнейшем было зрительно легко отличать PhP код от остального текста.
Комментарии выделены зеленым цветом.
Создайте в папке WebDBApp папку primitive и сохраните там примитив соединения с базой данных
$cnct = pg_Connect( "host=localhost port=5432 dbname=chek user=chek" );
if( !$cnct )
{
// соединения нет
echo "Connect to database failed! Please, consult the system administrator. \n";
exit;
}
?>
как connect.inc файл .
Создание таблиц
А теперь нам осталось совсем чуть-чуть, чтобы создать таблицу test- воспользоваться SQL командой CREATE TABLE. Например, так
//*** соединение с БД ***
require "primitive/connect.inc";
//*** создание таблицы ***
$result = pg_Exec( $cnct, "CREATE TABLE test (id int, name char(20))" );
if ( $result )
{
// таблица создана
echo "Table create \n";
}
?>
Используемая здесь функция
int pg_Exec(int connection, string query)
позволяет переадресовать SQL запрос Postgres95 для исполнения. Ключевое слово require позволяет включить текст примитива connect.inc, который был помещен в папку primitive.
Сохраните этот скрипт под именем create.php3 и запустите его на исполнение.
Удаление таблиц из базы данных
Таблицу удаляют следующей SQL командойDROP TABLE test;
[<<] | [] | [ >>]
Удаление записей таблиц
Для удаления всех записей из таблицы используют команду SQL видаDELETE FROM test;
Записи, где значения полей, которые удовлетворяют некоторым условиям, удаляют так:
DELETE FROM test WHERE name='Иванов';
Доступ к базе данных на стороне клиента
Видимо, наиболее мощные средства обеспечения доступа к базам данных на стороне Web-клиента обеспечивает язык Java. Java - это объектно-ориентированный язык программирования, являющийся, по сути дела, "безопасным" подмножеством языка С++. В частности, Java не содержит средств адресной арифметики, не поддерживает механизм множественного наследования и т. д. Поэтому утверждается, что корректность Java-программы можно проверить до ее реального выполнения (это абсолютно недоказанное утверждение). Различают:язык Java, как таковой, для которого существуют компиляторы в так называемый "мобильный код" (машинно-независимый код, который может интерпретироваться или из которого могут генерироваться машинные коды на разных платформах);
язык JavaScript, который обычно используется для расширения возможностей языка HTML за счет добавления процедурной составляющей;
и программный продукт HotJava, являющийся, по сути, интерпретатором мобильных кодов Java.
Для обеспечения доступа к базам данных на стороне Web-клиента наиболее существенно наличие языка Java. Технология разработки HTML-документа позволяет написать произвольное количество дополнительных Java-программ, откомпилировать их в мобильные коды и поставить ссылки на соответствующие коды в теле HTML-документа. Такие дополнительные Java-программы называются апплетами (Java-applets). Получив доступ к документу, содержащему ссылки на апплеты, клиентская программа просмотра запрашивает у Web-сервера все мобильные коды. Коды могут начать выполняться сразу после размещения в компьютере клиента или быть активизированы с помощью специальных команд.

Поскольку апплет представляет собой произвольную Java-программу, то, в частности, он может быть специализирован для работы с внешними базами данных. Более того, система программирования Java включает развитый набор классов, предназначенных для поддержки графического пользовательского интерфейса. Опираясь на использование этих классов, апплет может получить от пользователя информацию, характеризующую его запрос к базе данных, в том же виде, как если бы использовался стандартный механизм форм языка HTML, а может применять какой-либо другой интерфейс.
Для взаимодействия Java-апплета с внешним сервером баз данных разработан специализированный протокол JDBC, который, фактически, сочетает функции шлюзования между интерпретатором мобильных Java-кодов и ODBC, а также включает ODBC.
В заключение сравним достоинства и недостатки двух рассмотренных подходов. Использование CGI-скриптов на стороне Web-сервера позволяет иметь на стороне клиента только сравнительно простые программы просмотра. Вся хитроумная логика работы с базами данных (возможно, с обработкой полученных данных) переходит на сторону Web-сервера. Это легкий способ построения трехзвенной архитектуры приложения. (В последнее время разгрузку клиента от логики приложения называют решением проблемы "толстого" клиента. В данном случае мы можем иметь предельно тонкого клиента при утолщении сервера.) Отрицательным моментом является то, что при необходимости подключения нового CGI-скрипта, вообще говоря, требуется (относительная) модификация кода сервера.
Использование Java-апплетов, вообще говоря, обеспечивает более гибкое решение. Апплет - это часть HTML-документа. Для включения нового апплета нужно всего-навсего перекомпоновать документ. Web-cервер трогать не нужно. С другой стороны, клиент должен быть толще. Что бы там не говорили, клиент должен быть достаточно "толстым", чтобы в приемлемое время справиться с интерпретацией всех апплетов. Но, конечно же, сервер по-прежнему должен быть "толще" клиента.
На самом деле и при применении первого подхода, и при использовании второго остается нерешенной одна организационно-производственная проблема: кто должен проектировать, писать, отлаживать и сопровождать процедурный код? Web-мастера, производящие HTML-документы, обычно считают себя, скорее, дизайнерами нежели программистами. А здесь требуется чисто программистская работа. Иметь же двух мастеров на одном Web-site - это недопустимая роскошь. Придется растить людей, обладающих достаточными эстетическими способностями и являющимися в то же время квалифицированными и ответственными программистами.
Доступ к базе данных на стороне сервера
Механизм реализуется за счет наличия двух средств: включением форм в документ, составленный с использованием языка HTML и использования внешних по отношению к серверу Web программ. Клиентская часть приложения взаимодействует с серверной частью через специфицированный протокол CGI (Common Gateway Interface) или внедренный позже API (Application Program Interface). (Хотя CGI называется "общим интерфейсом шлюзования", по сути дела, это одновременно некоторое подмножество протокола HTTP, и способ его соблюдения при взаимодействии сервера с внешней программой.)При реализации на основе CGI общая схема реализации доступа к базе данных на стороне Web-сервера выглядит следующим образом:
![]() |
Просматривая документ клиент встречает форму, которая предназначена для ввода параметров запроса данных из базы. Клиент заполняет форму и отправляет ее на сервер. Получив заполненную форму, сервер запускает соответствующую внешнюю программу, передавая ей параметры и получая результаты на основе протокола CGI. Внешняя программа преобразует запрос, выраженный с помощью заполненной формы, в запрос на языке, понятном серверу баз данных (обычно это язык SQL). После получения результатов запроса внешняя программа формирует соответствующую виртуальную или реальную HTML-страницу, передает ее серверу и завершает свое выполнение. Сервер передает сформированную HTML-страницу клиенту, и на этом процедура доступа к базе данных завершается. |
На сленге Web-мастеров любая внешняя программа, запускаемая Web-сервером в соответствии со спецификациями CGI, называется CGI-скриптом. CGI-скрипт может быть написан на языке программирования (С, С++, Pascal и т. д.) или на командном языке (языки семейства shell, perl и т. д.). CGI-скрипт, выполняющий роль посредника между Web-сервером и другими видами серверов (например сервером баз данных), называется шлюзом (видимо, более правильно было бы использовать термин CGI-шлюз). Наличие CGI-скриптов на стороне Web-сервера позволяет, в частности, перенести часть логики приложения из клиента на сервер. CGI-шлюзы представляют собой средство для организации трехзвенной (в общем случае, многозвенной) архитектуры клиент-сервер.
В спецификациях CGI предусмотрены следующие способы взаимодействия Web-сервера и CGI-скрипта (по крайней мере в среде ОС Unix):
Первый способ состоит в использовании создаваемых сервером переменных окружения, через которые передается как общая информация, независящая от функциональных особенностей CGI-скрипта (например имя и версия Web-сервера), так и специфические данные, определяющие поведение CGI-скрипта (скажем набор значений, введенных в форму на стороне клиента).
Второй способ заключается в формировании параметров argc и argv, которые передаются функции main CGI-скрипта (как если бы CGI-скриптвызывался командной строкой в интерактивном режиме). Этот способ применяется для реализации ограниченного класса запросов ISINDEX.
Наконец, входные параметры могут передаваться CGI-скрипту через файл стандартного ввода, а CGI-скрипт может передавать Web-серверу результирующие данные через файл стандартного вывода.
Как видно, при использовании CGI вся интерпретация пользовательского запроса производится CGI-скриптом. Скрипт может быть предельно жестким, ориентированным на выполнение запроса к фиксированной таблице фиксированной базы данных, или относительно гибким, способным выполнить произвольный запрос к одной или нескольким таблицам базы данных, идентифицируемой в параметрах клиента.
Что касается API, то для людей, знающих одновременно Unix и операционные системы вообще, ситуация предельно ясна. Запуск независимого "тяжеловесного" процесса стоит немало. Загрузка и выполнение еще одной программы в уже существующем адресном пространстве по сравнению с предыдущем вариантом гораздо дешевле. Нет никаких новых идей. API - это, фактически, дешевый способ (хотя и небезопасный: понятно, почему?) выполнить в адресном пространстве сервера WWW программу, которая соответствует спецификациям на языке HTML (объясняю, почему; никто не захочет впустить в свою квартиру на предмет хотя бы временного жительства незнакомого человека; внешние программы незнакомы серверу). Такая программа должна быть заранее подготовлена и включена в библиотеку, из которой сервер может производить динамическую загрузку (например, такая библиотека может быть разделяемой - shared library). Т. е. смысл не меняется, меняется только реализация.
Курс Разработчик приложений Web баз данных
GET метод является наиболее простым и быстрым методом передачи запросов. Минимум, что должен содержать запрос, который использует GET метод - это имя метода, URL путь, и символ начала новой строки (GET URL_path
Полная форма GET запроса должна содержать еще и версию протокола, значения полей HTTP (содержащих информацию о клиенте или самом запросе), как показано ниже:
GET /waite/newbooks/search?keyword=web HTTP/1.0
Accept:text/*; image/jpeg
Host: www.mcp.com:80
If-Modified-Since: Friday, 15-Aug-97 02:12:28 GMT
User-Agent: Mozilla/3.0Gold (Win95; I)
В данном примере, HTTP/1.0 - это версия протокола, а Accept, Host, If-Modified-Since и User-Agent -четыре заголовка полей HTTP, которые передаются вместе с GET запросом.
Контрольный вопрос
Укажите название поля HTTP значение которого позволяет определить хост посетителя HTML страницы.
HTTP методы запроса
HTTP обеспечивает несколько методов запроса. Зачастую используют GET и POST методы, которые поддерживает большинство браузеров.Инициализация методов запроса браузером
Следующие события всегда заставляют Web браузер посылать запрос:после щелчка пользователя на ссылке HTML документа. Ссылку создают используя якорь, как показано ниже:
Текст ссылки
после ввода URL в адресной строке браузера;
в результате передачи формы HTML методом GET или POST, как показано ниже:
Использование расширения пути и строки запроса для передачи данных
Вы уже знаете, что запрос состоит из URL_path и полей HTTP заголовка, которые Web браузер создает автоматически при посылке запроса. Единственная часть, которой вы управляете в получающемся запросе - URL_path. Хотя основная цель URL_path - указать расположение запрошенного информационного ресурса, но она не единственная. Реально URL_path состоит из следующих трех частей:адреса документа;
расширения пути, которое указывают после пути для описания дополнительной информации;
строки запроса, которая следует за знаком "?".
Например,
/calendar/view.exe/sales?fromdate=10/1/99&todate=12/31/99
В этом примере /calendar/view.exe - путь, /sales расширение пути, a fromdate=10/1/99&todate=12/31/99 - строка запроса URL_path. Путь определяет местоположение CGI программы VIEW.EXE, которая выберет среди продаж только те, которые были сделаны в период с 10/1/99 по 12/31/99.
[<< ] | [] | [ >>]
Коммуникационная модель Web
В основе World Wide Web лежит модель связи, состоящая из двух основных элементов - Web клиента и Web сервера. В этой клиент-серверной модели Web клиент (обычно Web браузер) сначала инициализирует соединение с нужным Web сервером и затем посылает запрос. Web сервер принимает запрос обрабатывает его и отправляет результат клиенту.Схематично взаимодействие клиента с сервером можно изобразить так

Литература и ресурсы
Selena Sol. Introduction to Databases for the Web - http://www.stars.com/Authoring/DB/Intro/Кузнецов С.Д. Доступ к базам данных с использованием технологии WWW - http://www.citforum.ru/internet/articles/art_5.shtml
POST метод
Метод POST позволяет HTTP запросу нести дополнительные данные наряду с URL путем и полями заголовка, как показано в следующем примере:POST /cgi-win/wdbic/test/test.exe HTTP/1.0
Accept:text/*; image/jpeg
Host: localhost
If-Modified-Since: Friday, 15-Aug-97 02:12:28 GMT
User-Agent: Mozilla/3.0Gold (Win95; I)
Content-type: application/x-www-form-urlencoded
Content-length: 11
keyword=web
Поля сontent-type и content-length описывают формат и размер дополнительных данных. Эти дополнительные данные обычно использует информационный запрашиваемый ресурс, которым является исполняемая программа (в данном примере это /cgi-win/wdbic/test/test.exe). Их пересылают на Web сервер для обработки исполняемой программой.
Universal Resource Locator
Universal Resource Locator (URL) - текстовая строка, которая уникально идентифицирует информационный ресурс. Другими словами, он определяет адрес искомых данных. Синтаксис URL:протокол://хост[:порт]/URL_path
Пример URL
http://www.mcp.com:80/waite/newbooks/search?keyword=web
Тип протокола (http) определяет метод связи, который необходим для передачи документа. Кроме http протокола существует ftp (File Transfer Protocol), file (для файлов, хранящихся на локальном компьютере), telnet (для telnet сессии), mailto
(для Internet почты) и news (для Usenet новостей).
Хост (www.mcp.com) - это реальный домен Internet или IP адрес, представляемый комбинацией чисел десятичного формата. Порт (80) – список TCP портов, который используют для установки соединения.
URL_path (/waite/newbooks/search?keyword=web) указывает местоположение запрашиваемой информации на хост сервере.
Web протоколы
Как показано на рисунке, передача данных между Web клиентом и Web сервером на основе трех протоколов связи: TCP/IP, HTTP и HTML. Каждый протокол функционирует в собственном независимом уровне.Transmission Control Protocol/Internet Protocol (TCP/IP) - протокол, который поддерживают все компьютеры, соединенные с Internet и обеспечивает достоверную передачу данных между компьютерами Internet.
Hypertext Transfer Protocol (HTTP) - стандарт транзакции (общения) между Web клиентом и Web сервером. Другими словами, правил, которые определяют начало и окончание передачи запроса, а так же адреса требуемого документа. Принятый в HTTP метод стандартной адресации документа (universal resource locator - URL) позволяет достичь максимальной эффективности связи за счет минимизации транзакции между сервером и клиентом (сравните с FTP протоколом, где адресацию файлов реализуют в командном режиме).
По сути HTTP превращает Internet (сеть сетей) в Web или WWW (World Wide Web - "Всемирная паутина") - сеть документов.
Hypertext Markup Language (HTML) - стандарт, в соответствии с которым автор разрабатывает документ, чтобы представить информацию Web клиенту. HTML применяют не только для отображения текста, изображений и гиперссылок, но и создания интерактивных Web приложений.
Хотя HTML и HTTP разработаны, чтобы работать на независимых уровнях, HTML присущи некоторые особенности, которые отражают близкую связь с HTTP. Среди этих унаследованных черт, два ярких - использование URL для определения ссылок и поддержка методов запроса.
[] | [ >>]
Бизнес в интернете: Сайты - Софт - Языки - Дизайн
- Киберсантинг
- Киберсантинг как бизнес
- Виды Киберсантинга
- Создание игр
- Дизайн как бизнес
- Dreamweaver
- PHP
- Homesite
- Frontpage
- Studio MX
- Сайтостроительство
- Citrix MetaFrame
- Стили сайта
- ActiveX на сайте
- HTML как основа сайта
- Adobe GoLive
- Что такое WEB
- Мобильные WAP сайты
- 3D графика на сайтах
- 3DS MAX графические решения
- Графика в 3D Studio MAX и на сайте
